* config/ia64/ia64.c (ia64_expand_builtin): Use the
[official-gcc.git] / gcc / tree.c
blobd9982e8b2eca662a8b9cc939f34ee095347aa9d0
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
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 2, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA. */
23 /* This file contains the low level primitives for operating on tree nodes,
24 including allocation, list operations, interning of identifiers,
25 construction of data type nodes and statement nodes,
26 and construction of type conversion nodes. It also contains
27 tables index by tree code that describe how to take apart
28 nodes of that code.
30 It is intended to be language-independent, but occasionally
31 calls language-dependent routines defined (for C) in typecheck.c. */
33 #include "config.h"
34 #include "system.h"
35 #include "coretypes.h"
36 #include "tm.h"
37 #include "flags.h"
38 #include "tree.h"
39 #include "real.h"
40 #include "tm_p.h"
41 #include "function.h"
42 #include "obstack.h"
43 #include "toplev.h"
44 #include "ggc.h"
45 #include "hashtab.h"
46 #include "output.h"
47 #include "target.h"
48 #include "langhooks.h"
49 #include "tree-iterator.h"
50 #include "basic-block.h"
51 #include "tree-flow.h"
52 #include "params.h"
53 #include "pointer-set.h"
55 /* Each tree code class has an associated string representation.
56 These must correspond to the tree_code_class entries. */
58 const char *const tree_code_class_strings[] =
60 "exceptional",
61 "constant",
62 "type",
63 "declaration",
64 "reference",
65 "comparison",
66 "unary",
67 "binary",
68 "statement",
69 "vl_exp",
70 "expression",
71 "gimple_stmt"
74 /* obstack.[ch] explicitly declined to prototype this. */
75 extern int _obstack_allocated_p (struct obstack *h, void *obj);
77 #ifdef GATHER_STATISTICS
78 /* Statistics-gathering stuff. */
80 int tree_node_counts[(int) all_kinds];
81 int tree_node_sizes[(int) all_kinds];
83 /* Keep in sync with tree.h:enum tree_node_kind. */
84 static const char * const tree_node_kind_names[] = {
85 "decls",
86 "types",
87 "blocks",
88 "stmts",
89 "refs",
90 "exprs",
91 "constants",
92 "identifiers",
93 "perm_tree_lists",
94 "temp_tree_lists",
95 "vecs",
96 "binfos",
97 "phi_nodes",
98 "ssa names",
99 "constructors",
100 "random kinds",
101 "lang_decl kinds",
102 "lang_type kinds",
103 "omp clauses",
104 "gimple statements"
106 #endif /* GATHER_STATISTICS */
108 /* Unique id for next decl created. */
109 static GTY(()) int next_decl_uid;
110 /* Unique id for next type created. */
111 static GTY(()) int next_type_uid = 1;
113 /* Since we cannot rehash a type after it is in the table, we have to
114 keep the hash code. */
116 struct type_hash GTY(())
118 unsigned long hash;
119 tree type;
122 /* Initial size of the hash table (rounded to next prime). */
123 #define TYPE_HASH_INITIAL_SIZE 1000
125 /* Now here is the hash table. When recording a type, it is added to
126 the slot whose index is the hash code. Note that the hash table is
127 used for several kinds of types (function types, array types and
128 array index range types, for now). While all these live in the
129 same table, they are completely independent, and the hash code is
130 computed differently for each of these. */
132 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
133 htab_t type_hash_table;
135 /* Hash table and temporary node for larger integer const values. */
136 static GTY (()) tree int_cst_node;
137 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
138 htab_t int_cst_hash_table;
140 /* General tree->tree mapping structure for use in hash tables. */
143 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
144 htab_t debug_expr_for_decl;
146 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
147 htab_t value_expr_for_decl;
149 static GTY ((if_marked ("tree_int_map_marked_p"), param_is (struct tree_int_map)))
150 htab_t init_priority_for_decl;
152 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
153 htab_t restrict_base_for_decl;
155 static void set_type_quals (tree, int);
156 static int type_hash_eq (const void *, const void *);
157 static hashval_t type_hash_hash (const void *);
158 static hashval_t int_cst_hash_hash (const void *);
159 static int int_cst_hash_eq (const void *, const void *);
160 static void print_type_hash_statistics (void);
161 static void print_debug_expr_statistics (void);
162 static void print_value_expr_statistics (void);
163 static int type_hash_marked_p (const void *);
164 static unsigned int type_hash_list (tree, hashval_t);
165 static unsigned int attribute_hash_list (tree, hashval_t);
167 tree global_trees[TI_MAX];
168 tree integer_types[itk_none];
170 unsigned char tree_contains_struct[256][64];
172 /* Number of operands for each OpenMP clause. */
173 unsigned const char omp_clause_num_ops[] =
175 0, /* OMP_CLAUSE_ERROR */
176 1, /* OMP_CLAUSE_PRIVATE */
177 1, /* OMP_CLAUSE_SHARED */
178 1, /* OMP_CLAUSE_FIRSTPRIVATE */
179 1, /* OMP_CLAUSE_LASTPRIVATE */
180 4, /* OMP_CLAUSE_REDUCTION */
181 1, /* OMP_CLAUSE_COPYIN */
182 1, /* OMP_CLAUSE_COPYPRIVATE */
183 1, /* OMP_CLAUSE_IF */
184 1, /* OMP_CLAUSE_NUM_THREADS */
185 1, /* OMP_CLAUSE_SCHEDULE */
186 0, /* OMP_CLAUSE_NOWAIT */
187 0, /* OMP_CLAUSE_ORDERED */
188 0 /* OMP_CLAUSE_DEFAULT */
191 const char * const omp_clause_code_name[] =
193 "error_clause",
194 "private",
195 "shared",
196 "firstprivate",
197 "lastprivate",
198 "reduction",
199 "copyin",
200 "copyprivate",
201 "if",
202 "num_threads",
203 "schedule",
204 "nowait",
205 "ordered",
206 "default"
209 /* Init tree.c. */
211 void
212 init_ttree (void)
214 /* Initialize the hash table of types. */
215 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
216 type_hash_eq, 0);
218 debug_expr_for_decl = htab_create_ggc (512, tree_map_hash,
219 tree_map_eq, 0);
221 value_expr_for_decl = htab_create_ggc (512, tree_map_hash,
222 tree_map_eq, 0);
223 init_priority_for_decl = htab_create_ggc (512, tree_int_map_hash,
224 tree_int_map_eq, 0);
225 restrict_base_for_decl = htab_create_ggc (256, tree_map_hash,
226 tree_map_eq, 0);
228 int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
229 int_cst_hash_eq, NULL);
231 int_cst_node = make_node (INTEGER_CST);
233 tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON] = 1;
234 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_NON_COMMON] = 1;
235 tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON] = 1;
238 tree_contains_struct[CONST_DECL][TS_DECL_COMMON] = 1;
239 tree_contains_struct[VAR_DECL][TS_DECL_COMMON] = 1;
240 tree_contains_struct[PARM_DECL][TS_DECL_COMMON] = 1;
241 tree_contains_struct[RESULT_DECL][TS_DECL_COMMON] = 1;
242 tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON] = 1;
243 tree_contains_struct[TYPE_DECL][TS_DECL_COMMON] = 1;
244 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON] = 1;
245 tree_contains_struct[LABEL_DECL][TS_DECL_COMMON] = 1;
246 tree_contains_struct[FIELD_DECL][TS_DECL_COMMON] = 1;
249 tree_contains_struct[CONST_DECL][TS_DECL_WRTL] = 1;
250 tree_contains_struct[VAR_DECL][TS_DECL_WRTL] = 1;
251 tree_contains_struct[PARM_DECL][TS_DECL_WRTL] = 1;
252 tree_contains_struct[RESULT_DECL][TS_DECL_WRTL] = 1;
253 tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL] = 1;
254 tree_contains_struct[LABEL_DECL][TS_DECL_WRTL] = 1;
256 tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL] = 1;
257 tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL] = 1;
258 tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL] = 1;
259 tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL] = 1;
260 tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL] = 1;
261 tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL] = 1;
262 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL] = 1;
263 tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL] = 1;
264 tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL] = 1;
265 tree_contains_struct[STRUCT_FIELD_TAG][TS_DECL_MINIMAL] = 1;
266 tree_contains_struct[NAME_MEMORY_TAG][TS_DECL_MINIMAL] = 1;
267 tree_contains_struct[SYMBOL_MEMORY_TAG][TS_DECL_MINIMAL] = 1;
268 tree_contains_struct[MEMORY_PARTITION_TAG][TS_DECL_MINIMAL] = 1;
270 tree_contains_struct[STRUCT_FIELD_TAG][TS_MEMORY_TAG] = 1;
271 tree_contains_struct[NAME_MEMORY_TAG][TS_MEMORY_TAG] = 1;
272 tree_contains_struct[SYMBOL_MEMORY_TAG][TS_MEMORY_TAG] = 1;
273 tree_contains_struct[MEMORY_PARTITION_TAG][TS_MEMORY_TAG] = 1;
275 tree_contains_struct[STRUCT_FIELD_TAG][TS_STRUCT_FIELD_TAG] = 1;
276 tree_contains_struct[MEMORY_PARTITION_TAG][TS_MEMORY_PARTITION_TAG] = 1;
278 tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS] = 1;
279 tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS] = 1;
280 tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS] = 1;
281 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_WITH_VIS] = 1;
283 tree_contains_struct[VAR_DECL][TS_VAR_DECL] = 1;
284 tree_contains_struct[FIELD_DECL][TS_FIELD_DECL] = 1;
285 tree_contains_struct[PARM_DECL][TS_PARM_DECL] = 1;
286 tree_contains_struct[LABEL_DECL][TS_LABEL_DECL] = 1;
287 tree_contains_struct[RESULT_DECL][TS_RESULT_DECL] = 1;
288 tree_contains_struct[CONST_DECL][TS_CONST_DECL] = 1;
289 tree_contains_struct[TYPE_DECL][TS_TYPE_DECL] = 1;
290 tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL] = 1;
292 lang_hooks.init_ts ();
296 /* The name of the object as the assembler will see it (but before any
297 translations made by ASM_OUTPUT_LABELREF). Often this is the same
298 as DECL_NAME. It is an IDENTIFIER_NODE. */
299 tree
300 decl_assembler_name (tree decl)
302 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
303 lang_hooks.set_decl_assembler_name (decl);
304 return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
307 /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL. */
309 bool
310 decl_assembler_name_equal (tree decl, tree asmname)
312 tree decl_asmname = DECL_ASSEMBLER_NAME (decl);
314 if (decl_asmname == asmname)
315 return true;
317 /* If the target assembler name was set by the user, things are trickier.
318 We have a leading '*' to begin with. After that, it's arguable what
319 is the correct thing to do with -fleading-underscore. Arguably, we've
320 historically been doing the wrong thing in assemble_alias by always
321 printing the leading underscore. Since we're not changing that, make
322 sure user_label_prefix follows the '*' before matching. */
323 if (IDENTIFIER_POINTER (decl_asmname)[0] == '*')
325 const char *decl_str = IDENTIFIER_POINTER (decl_asmname) + 1;
326 size_t ulp_len = strlen (user_label_prefix);
328 if (ulp_len == 0)
330 else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
331 decl_str += ulp_len;
332 else
333 return false;
335 return strcmp (decl_str, IDENTIFIER_POINTER (asmname)) == 0;
338 return false;
341 /* Compute the number of bytes occupied by a tree with code CODE.
342 This function cannot be used for nodes that have variable sizes,
343 including TREE_VEC, PHI_NODE, STRING_CST, and CALL_EXPR. */
344 size_t
345 tree_code_size (enum tree_code code)
347 switch (TREE_CODE_CLASS (code))
349 case tcc_declaration: /* A decl node */
351 switch (code)
353 case FIELD_DECL:
354 return sizeof (struct tree_field_decl);
355 case PARM_DECL:
356 return sizeof (struct tree_parm_decl);
357 case VAR_DECL:
358 return sizeof (struct tree_var_decl);
359 case LABEL_DECL:
360 return sizeof (struct tree_label_decl);
361 case RESULT_DECL:
362 return sizeof (struct tree_result_decl);
363 case CONST_DECL:
364 return sizeof (struct tree_const_decl);
365 case TYPE_DECL:
366 return sizeof (struct tree_type_decl);
367 case FUNCTION_DECL:
368 return sizeof (struct tree_function_decl);
369 case NAME_MEMORY_TAG:
370 case SYMBOL_MEMORY_TAG:
371 return sizeof (struct tree_memory_tag);
372 case STRUCT_FIELD_TAG:
373 return sizeof (struct tree_struct_field_tag);
374 case MEMORY_PARTITION_TAG:
375 return sizeof (struct tree_memory_partition_tag);
376 default:
377 return sizeof (struct tree_decl_non_common);
381 case tcc_type: /* a type node */
382 return sizeof (struct tree_type);
384 case tcc_reference: /* a reference */
385 case tcc_expression: /* an expression */
386 case tcc_statement: /* an expression with side effects */
387 case tcc_comparison: /* a comparison expression */
388 case tcc_unary: /* a unary arithmetic expression */
389 case tcc_binary: /* a binary arithmetic expression */
390 return (sizeof (struct tree_exp)
391 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
393 case tcc_gimple_stmt:
394 return (sizeof (struct gimple_stmt)
395 + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *));
397 case tcc_constant: /* a constant */
398 switch (code)
400 case INTEGER_CST: return sizeof (struct tree_int_cst);
401 case REAL_CST: return sizeof (struct tree_real_cst);
402 case COMPLEX_CST: return sizeof (struct tree_complex);
403 case VECTOR_CST: return sizeof (struct tree_vector);
404 case STRING_CST: gcc_unreachable ();
405 default:
406 return lang_hooks.tree_size (code);
409 case tcc_exceptional: /* something random, like an identifier. */
410 switch (code)
412 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
413 case TREE_LIST: return sizeof (struct tree_list);
415 case ERROR_MARK:
416 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
418 case TREE_VEC:
419 case OMP_CLAUSE:
420 case PHI_NODE: gcc_unreachable ();
422 case SSA_NAME: return sizeof (struct tree_ssa_name);
424 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
425 case BLOCK: return sizeof (struct tree_block);
426 case VALUE_HANDLE: return sizeof (struct tree_value_handle);
427 case CONSTRUCTOR: return sizeof (struct tree_constructor);
429 default:
430 return lang_hooks.tree_size (code);
433 default:
434 gcc_unreachable ();
438 /* Compute the number of bytes occupied by NODE. This routine only
439 looks at TREE_CODE, except for those nodes that have variable sizes. */
440 size_t
441 tree_size (tree node)
443 enum tree_code code = TREE_CODE (node);
444 switch (code)
446 case PHI_NODE:
447 return (sizeof (struct tree_phi_node)
448 + (PHI_ARG_CAPACITY (node) - 1) * sizeof (struct phi_arg_d));
450 case TREE_BINFO:
451 return (offsetof (struct tree_binfo, base_binfos)
452 + VEC_embedded_size (tree, BINFO_N_BASE_BINFOS (node)));
454 case TREE_VEC:
455 return (sizeof (struct tree_vec)
456 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
458 case STRING_CST:
459 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
461 case OMP_CLAUSE:
462 return (sizeof (struct tree_omp_clause)
463 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
464 * sizeof (tree));
466 default:
467 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
468 return (sizeof (struct tree_exp)
469 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
470 else
471 return tree_code_size (code);
475 /* Return a newly allocated node of code CODE. For decl and type
476 nodes, some other fields are initialized. The rest of the node is
477 initialized to zero. This function cannot be used for PHI_NODE,
478 TREE_VEC or OMP_CLAUSE nodes, which is enforced by asserts in
479 tree_code_size.
481 Achoo! I got a code in the node. */
483 tree
484 make_node_stat (enum tree_code code MEM_STAT_DECL)
486 tree t;
487 enum tree_code_class type = TREE_CODE_CLASS (code);
488 size_t length = tree_code_size (code);
489 #ifdef GATHER_STATISTICS
490 tree_node_kind kind;
492 switch (type)
494 case tcc_declaration: /* A decl node */
495 kind = d_kind;
496 break;
498 case tcc_type: /* a type node */
499 kind = t_kind;
500 break;
502 case tcc_statement: /* an expression with side effects */
503 kind = s_kind;
504 break;
506 case tcc_reference: /* a reference */
507 kind = r_kind;
508 break;
510 case tcc_expression: /* an expression */
511 case tcc_comparison: /* a comparison expression */
512 case tcc_unary: /* a unary arithmetic expression */
513 case tcc_binary: /* a binary arithmetic expression */
514 kind = e_kind;
515 break;
517 case tcc_constant: /* a constant */
518 kind = c_kind;
519 break;
521 case tcc_gimple_stmt:
522 kind = gimple_stmt_kind;
523 break;
525 case tcc_exceptional: /* something random, like an identifier. */
526 switch (code)
528 case IDENTIFIER_NODE:
529 kind = id_kind;
530 break;
532 case TREE_VEC:
533 kind = vec_kind;
534 break;
536 case TREE_BINFO:
537 kind = binfo_kind;
538 break;
540 case PHI_NODE:
541 kind = phi_kind;
542 break;
544 case SSA_NAME:
545 kind = ssa_name_kind;
546 break;
548 case BLOCK:
549 kind = b_kind;
550 break;
552 case CONSTRUCTOR:
553 kind = constr_kind;
554 break;
556 default:
557 kind = x_kind;
558 break;
560 break;
562 default:
563 gcc_unreachable ();
566 tree_node_counts[(int) kind]++;
567 tree_node_sizes[(int) kind] += length;
568 #endif
570 if (code == IDENTIFIER_NODE)
571 t = ggc_alloc_zone_pass_stat (length, &tree_id_zone);
572 else
573 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
575 memset (t, 0, length);
577 TREE_SET_CODE (t, code);
579 switch (type)
581 case tcc_statement:
582 TREE_SIDE_EFFECTS (t) = 1;
583 break;
585 case tcc_declaration:
586 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
587 DECL_IN_SYSTEM_HEADER (t) = in_system_header;
588 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
590 if (code != FUNCTION_DECL)
591 DECL_ALIGN (t) = 1;
592 DECL_USER_ALIGN (t) = 0;
593 /* We have not yet computed the alias set for this declaration. */
594 DECL_POINTER_ALIAS_SET (t) = -1;
596 DECL_SOURCE_LOCATION (t) = input_location;
597 DECL_UID (t) = next_decl_uid++;
599 break;
601 case tcc_type:
602 TYPE_UID (t) = next_type_uid++;
603 TYPE_ALIGN (t) = BITS_PER_UNIT;
604 TYPE_USER_ALIGN (t) = 0;
605 TYPE_MAIN_VARIANT (t) = t;
606 TYPE_CANONICAL (t) = t;
608 /* Default to no attributes for type, but let target change that. */
609 TYPE_ATTRIBUTES (t) = NULL_TREE;
610 targetm.set_default_type_attributes (t);
612 /* We have not yet computed the alias set for this type. */
613 TYPE_ALIAS_SET (t) = -1;
614 break;
616 case tcc_constant:
617 TREE_CONSTANT (t) = 1;
618 TREE_INVARIANT (t) = 1;
619 break;
621 case tcc_expression:
622 switch (code)
624 case INIT_EXPR:
625 case MODIFY_EXPR:
626 case VA_ARG_EXPR:
627 case PREDECREMENT_EXPR:
628 case PREINCREMENT_EXPR:
629 case POSTDECREMENT_EXPR:
630 case POSTINCREMENT_EXPR:
631 /* All of these have side-effects, no matter what their
632 operands are. */
633 TREE_SIDE_EFFECTS (t) = 1;
634 break;
636 default:
637 break;
639 break;
641 case tcc_gimple_stmt:
642 switch (code)
644 case GIMPLE_MODIFY_STMT:
645 TREE_SIDE_EFFECTS (t) = 1;
646 break;
648 default:
649 break;
652 default:
653 /* Other classes need no special treatment. */
654 break;
657 return t;
660 /* Return a new node with the same contents as NODE except that its
661 TREE_CHAIN is zero and it has a fresh uid. */
663 tree
664 copy_node_stat (tree node MEM_STAT_DECL)
666 tree t;
667 enum tree_code code = TREE_CODE (node);
668 size_t length;
670 gcc_assert (code != STATEMENT_LIST);
672 length = tree_size (node);
673 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
674 memcpy (t, node, length);
676 if (!GIMPLE_TUPLE_P (node))
677 TREE_CHAIN (t) = 0;
678 TREE_ASM_WRITTEN (t) = 0;
679 TREE_VISITED (t) = 0;
680 t->base.ann = 0;
682 if (TREE_CODE_CLASS (code) == tcc_declaration)
684 DECL_UID (t) = next_decl_uid++;
685 if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
686 && DECL_HAS_VALUE_EXPR_P (node))
688 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
689 DECL_HAS_VALUE_EXPR_P (t) = 1;
691 if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
693 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
694 DECL_HAS_INIT_PRIORITY_P (t) = 1;
696 if (TREE_CODE (node) == VAR_DECL && DECL_BASED_ON_RESTRICT_P (node))
698 SET_DECL_RESTRICT_BASE (t, DECL_GET_RESTRICT_BASE (node));
699 DECL_BASED_ON_RESTRICT_P (t) = 1;
702 else if (TREE_CODE_CLASS (code) == tcc_type)
704 TYPE_UID (t) = next_type_uid++;
705 /* The following is so that the debug code for
706 the copy is different from the original type.
707 The two statements usually duplicate each other
708 (because they clear fields of the same union),
709 but the optimizer should catch that. */
710 TYPE_SYMTAB_POINTER (t) = 0;
711 TYPE_SYMTAB_ADDRESS (t) = 0;
713 /* Do not copy the values cache. */
714 if (TYPE_CACHED_VALUES_P(t))
716 TYPE_CACHED_VALUES_P (t) = 0;
717 TYPE_CACHED_VALUES (t) = NULL_TREE;
721 return t;
724 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
725 For example, this can copy a list made of TREE_LIST nodes. */
727 tree
728 copy_list (tree list)
730 tree head;
731 tree prev, next;
733 if (list == 0)
734 return 0;
736 head = prev = copy_node (list);
737 next = TREE_CHAIN (list);
738 while (next)
740 TREE_CHAIN (prev) = copy_node (next);
741 prev = TREE_CHAIN (prev);
742 next = TREE_CHAIN (next);
744 return head;
748 /* Create an INT_CST node with a LOW value sign extended. */
750 tree
751 build_int_cst (tree type, HOST_WIDE_INT low)
753 /* Support legacy code. */
754 if (!type)
755 type = integer_type_node;
757 return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
760 /* Create an INT_CST node with a LOW value zero extended. */
762 tree
763 build_int_cstu (tree type, unsigned HOST_WIDE_INT low)
765 return build_int_cst_wide (type, low, 0);
768 /* Create an INT_CST node with a LOW value in TYPE. The value is sign extended
769 if it is negative. This function is similar to build_int_cst, but
770 the extra bits outside of the type precision are cleared. Constants
771 with these extra bits may confuse the fold so that it detects overflows
772 even in cases when they do not occur, and in general should be avoided.
773 We cannot however make this a default behavior of build_int_cst without
774 more intrusive changes, since there are parts of gcc that rely on the extra
775 precision of the integer constants. */
777 tree
778 build_int_cst_type (tree type, HOST_WIDE_INT low)
780 unsigned HOST_WIDE_INT low1;
781 HOST_WIDE_INT hi;
783 gcc_assert (type);
785 fit_double_type (low, low < 0 ? -1 : 0, &low1, &hi, type);
787 return build_int_cst_wide (type, low1, hi);
790 /* Create an INT_CST node of TYPE and value HI:LOW. The value is truncated
791 and sign extended according to the value range of TYPE. */
793 tree
794 build_int_cst_wide_type (tree type,
795 unsigned HOST_WIDE_INT low, HOST_WIDE_INT high)
797 fit_double_type (low, high, &low, &high, type);
798 return build_int_cst_wide (type, low, high);
801 /* These are the hash table functions for the hash table of INTEGER_CST
802 nodes of a sizetype. */
804 /* Return the hash code code X, an INTEGER_CST. */
806 static hashval_t
807 int_cst_hash_hash (const void *x)
809 tree t = (tree) x;
811 return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
812 ^ htab_hash_pointer (TREE_TYPE (t)));
815 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
816 is the same as that given by *Y, which is the same. */
818 static int
819 int_cst_hash_eq (const void *x, const void *y)
821 tree xt = (tree) x;
822 tree yt = (tree) y;
824 return (TREE_TYPE (xt) == TREE_TYPE (yt)
825 && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
826 && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
829 /* Create an INT_CST node of TYPE and value HI:LOW.
830 The returned node is always shared. For small integers we use a
831 per-type vector cache, for larger ones we use a single hash table. */
833 tree
834 build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
836 tree t;
837 int ix = -1;
838 int limit = 0;
840 gcc_assert (type);
842 switch (TREE_CODE (type))
844 case POINTER_TYPE:
845 case REFERENCE_TYPE:
846 /* Cache NULL pointer. */
847 if (!hi && !low)
849 limit = 1;
850 ix = 0;
852 break;
854 case BOOLEAN_TYPE:
855 /* Cache false or true. */
856 limit = 2;
857 if (!hi && low < 2)
858 ix = low;
859 break;
861 case INTEGER_TYPE:
862 case OFFSET_TYPE:
863 if (TYPE_UNSIGNED (type))
865 /* Cache 0..N */
866 limit = INTEGER_SHARE_LIMIT;
867 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
868 ix = low;
870 else
872 /* Cache -1..N */
873 limit = INTEGER_SHARE_LIMIT + 1;
874 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
875 ix = low + 1;
876 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
877 ix = 0;
879 break;
881 case ENUMERAL_TYPE:
882 break;
884 default:
885 gcc_unreachable ();
888 if (ix >= 0)
890 /* Look for it in the type's vector of small shared ints. */
891 if (!TYPE_CACHED_VALUES_P (type))
893 TYPE_CACHED_VALUES_P (type) = 1;
894 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
897 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
898 if (t)
900 /* Make sure no one is clobbering the shared constant. */
901 gcc_assert (TREE_TYPE (t) == type);
902 gcc_assert (TREE_INT_CST_LOW (t) == low);
903 gcc_assert (TREE_INT_CST_HIGH (t) == hi);
905 else
907 /* Create a new shared int. */
908 t = make_node (INTEGER_CST);
910 TREE_INT_CST_LOW (t) = low;
911 TREE_INT_CST_HIGH (t) = hi;
912 TREE_TYPE (t) = type;
914 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
917 else
919 /* Use the cache of larger shared ints. */
920 void **slot;
922 TREE_INT_CST_LOW (int_cst_node) = low;
923 TREE_INT_CST_HIGH (int_cst_node) = hi;
924 TREE_TYPE (int_cst_node) = type;
926 slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
927 t = *slot;
928 if (!t)
930 /* Insert this one into the hash table. */
931 t = int_cst_node;
932 *slot = t;
933 /* Make a new node for next time round. */
934 int_cst_node = make_node (INTEGER_CST);
938 return t;
941 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
942 and the rest are zeros. */
944 tree
945 build_low_bits_mask (tree type, unsigned bits)
947 unsigned HOST_WIDE_INT low;
948 HOST_WIDE_INT high;
949 unsigned HOST_WIDE_INT all_ones = ~(unsigned HOST_WIDE_INT) 0;
951 gcc_assert (bits <= TYPE_PRECISION (type));
953 if (bits == TYPE_PRECISION (type)
954 && !TYPE_UNSIGNED (type))
956 /* Sign extended all-ones mask. */
957 low = all_ones;
958 high = -1;
960 else if (bits <= HOST_BITS_PER_WIDE_INT)
962 low = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
963 high = 0;
965 else
967 bits -= HOST_BITS_PER_WIDE_INT;
968 low = all_ones;
969 high = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
972 return build_int_cst_wide (type, low, high);
975 /* Checks that X is integer constant that can be expressed in (unsigned)
976 HOST_WIDE_INT without loss of precision. */
978 bool
979 cst_and_fits_in_hwi (tree x)
981 if (TREE_CODE (x) != INTEGER_CST)
982 return false;
984 if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
985 return false;
987 return (TREE_INT_CST_HIGH (x) == 0
988 || TREE_INT_CST_HIGH (x) == -1);
991 /* Return a new VECTOR_CST node whose type is TYPE and whose values
992 are in a list pointed to by VALS. */
994 tree
995 build_vector (tree type, tree vals)
997 tree v = make_node (VECTOR_CST);
998 int over = 0;
999 tree link;
1001 TREE_VECTOR_CST_ELTS (v) = vals;
1002 TREE_TYPE (v) = type;
1004 /* Iterate through elements and check for overflow. */
1005 for (link = vals; link; link = TREE_CHAIN (link))
1007 tree value = TREE_VALUE (link);
1009 /* Don't crash if we get an address constant. */
1010 if (!CONSTANT_CLASS_P (value))
1011 continue;
1013 over |= TREE_OVERFLOW (value);
1016 TREE_OVERFLOW (v) = over;
1017 return v;
1020 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1021 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1023 tree
1024 build_vector_from_ctor (tree type, VEC(constructor_elt,gc) *v)
1026 tree list = NULL_TREE;
1027 unsigned HOST_WIDE_INT idx;
1028 tree value;
1030 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1031 list = tree_cons (NULL_TREE, value, list);
1032 return build_vector (type, nreverse (list));
1035 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1036 are in the VEC pointed to by VALS. */
1037 tree
1038 build_constructor (tree type, VEC(constructor_elt,gc) *vals)
1040 tree c = make_node (CONSTRUCTOR);
1041 TREE_TYPE (c) = type;
1042 CONSTRUCTOR_ELTS (c) = vals;
1043 return c;
1046 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1047 INDEX and VALUE. */
1048 tree
1049 build_constructor_single (tree type, tree index, tree value)
1051 VEC(constructor_elt,gc) *v;
1052 constructor_elt *elt;
1053 tree t;
1055 v = VEC_alloc (constructor_elt, gc, 1);
1056 elt = VEC_quick_push (constructor_elt, v, NULL);
1057 elt->index = index;
1058 elt->value = value;
1060 t = build_constructor (type, v);
1061 TREE_CONSTANT (t) = TREE_CONSTANT (value);
1062 return t;
1066 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1067 are in a list pointed to by VALS. */
1068 tree
1069 build_constructor_from_list (tree type, tree vals)
1071 tree t, val;
1072 VEC(constructor_elt,gc) *v = NULL;
1073 bool constant_p = true;
1075 if (vals)
1077 v = VEC_alloc (constructor_elt, gc, list_length (vals));
1078 for (t = vals; t; t = TREE_CHAIN (t))
1080 constructor_elt *elt = VEC_quick_push (constructor_elt, v, NULL);
1081 val = TREE_VALUE (t);
1082 elt->index = TREE_PURPOSE (t);
1083 elt->value = val;
1084 if (!TREE_CONSTANT (val))
1085 constant_p = false;
1089 t = build_constructor (type, v);
1090 TREE_CONSTANT (t) = constant_p;
1091 return t;
1095 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1097 tree
1098 build_real (tree type, REAL_VALUE_TYPE d)
1100 tree v;
1101 REAL_VALUE_TYPE *dp;
1102 int overflow = 0;
1104 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1105 Consider doing it via real_convert now. */
1107 v = make_node (REAL_CST);
1108 dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
1109 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1111 TREE_TYPE (v) = type;
1112 TREE_REAL_CST_PTR (v) = dp;
1113 TREE_OVERFLOW (v) = overflow;
1114 return v;
1117 /* Return a new REAL_CST node whose type is TYPE
1118 and whose value is the integer value of the INTEGER_CST node I. */
1120 REAL_VALUE_TYPE
1121 real_value_from_int_cst (tree type, tree i)
1123 REAL_VALUE_TYPE d;
1125 /* Clear all bits of the real value type so that we can later do
1126 bitwise comparisons to see if two values are the same. */
1127 memset (&d, 0, sizeof d);
1129 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
1130 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1131 TYPE_UNSIGNED (TREE_TYPE (i)));
1132 return d;
1135 /* Given a tree representing an integer constant I, return a tree
1136 representing the same value as a floating-point constant of type TYPE. */
1138 tree
1139 build_real_from_int_cst (tree type, tree i)
1141 tree v;
1142 int overflow = TREE_OVERFLOW (i);
1144 v = build_real (type, real_value_from_int_cst (type, i));
1146 TREE_OVERFLOW (v) |= overflow;
1147 return v;
1150 /* Return a newly constructed STRING_CST node whose value is
1151 the LEN characters at STR.
1152 The TREE_TYPE is not initialized. */
1154 tree
1155 build_string (int len, const char *str)
1157 tree s;
1158 size_t length;
1160 /* Do not waste bytes provided by padding of struct tree_string. */
1161 length = len + offsetof (struct tree_string, str) + 1;
1163 #ifdef GATHER_STATISTICS
1164 tree_node_counts[(int) c_kind]++;
1165 tree_node_sizes[(int) c_kind] += length;
1166 #endif
1168 s = ggc_alloc_tree (length);
1170 memset (s, 0, sizeof (struct tree_common));
1171 TREE_SET_CODE (s, STRING_CST);
1172 TREE_CONSTANT (s) = 1;
1173 TREE_INVARIANT (s) = 1;
1174 TREE_STRING_LENGTH (s) = len;
1175 memcpy ((char *) TREE_STRING_POINTER (s), str, len);
1176 ((char *) TREE_STRING_POINTER (s))[len] = '\0';
1178 return s;
1181 /* Return a newly constructed COMPLEX_CST node whose value is
1182 specified by the real and imaginary parts REAL and IMAG.
1183 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1184 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1186 tree
1187 build_complex (tree type, tree real, tree imag)
1189 tree t = make_node (COMPLEX_CST);
1191 TREE_REALPART (t) = real;
1192 TREE_IMAGPART (t) = imag;
1193 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1194 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1195 return t;
1198 /* Return a constant of arithmetic type TYPE which is the
1199 multiplicative identity of the set TYPE. */
1201 tree
1202 build_one_cst (tree type)
1204 switch (TREE_CODE (type))
1206 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1207 case POINTER_TYPE: case REFERENCE_TYPE:
1208 case OFFSET_TYPE:
1209 return build_int_cst (type, 1);
1211 case REAL_TYPE:
1212 return build_real (type, dconst1);
1214 case VECTOR_TYPE:
1216 tree scalar, cst;
1217 int i;
1219 scalar = build_one_cst (TREE_TYPE (type));
1221 /* Create 'vect_cst_ = {cst,cst,...,cst}' */
1222 cst = NULL_TREE;
1223 for (i = TYPE_VECTOR_SUBPARTS (type); --i >= 0; )
1224 cst = tree_cons (NULL_TREE, scalar, cst);
1226 return build_vector (type, cst);
1229 case COMPLEX_TYPE:
1230 return build_complex (type,
1231 build_one_cst (TREE_TYPE (type)),
1232 fold_convert (TREE_TYPE (type), integer_zero_node));
1234 default:
1235 gcc_unreachable ();
1239 /* Build a BINFO with LEN language slots. */
1241 tree
1242 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
1244 tree t;
1245 size_t length = (offsetof (struct tree_binfo, base_binfos)
1246 + VEC_embedded_size (tree, base_binfos));
1248 #ifdef GATHER_STATISTICS
1249 tree_node_counts[(int) binfo_kind]++;
1250 tree_node_sizes[(int) binfo_kind] += length;
1251 #endif
1253 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
1255 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
1257 TREE_SET_CODE (t, TREE_BINFO);
1259 VEC_embedded_init (tree, BINFO_BASE_BINFOS (t), base_binfos);
1261 return t;
1265 /* Build a newly constructed TREE_VEC node of length LEN. */
1267 tree
1268 make_tree_vec_stat (int len MEM_STAT_DECL)
1270 tree t;
1271 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1273 #ifdef GATHER_STATISTICS
1274 tree_node_counts[(int) vec_kind]++;
1275 tree_node_sizes[(int) vec_kind] += length;
1276 #endif
1278 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
1280 memset (t, 0, length);
1282 TREE_SET_CODE (t, TREE_VEC);
1283 TREE_VEC_LENGTH (t) = len;
1285 return t;
1288 /* Return 1 if EXPR is the integer constant zero or a complex constant
1289 of zero. */
1292 integer_zerop (tree expr)
1294 STRIP_NOPS (expr);
1296 return ((TREE_CODE (expr) == INTEGER_CST
1297 && TREE_INT_CST_LOW (expr) == 0
1298 && TREE_INT_CST_HIGH (expr) == 0)
1299 || (TREE_CODE (expr) == COMPLEX_CST
1300 && integer_zerop (TREE_REALPART (expr))
1301 && integer_zerop (TREE_IMAGPART (expr))));
1304 /* Return 1 if EXPR is the integer constant one or the corresponding
1305 complex constant. */
1308 integer_onep (tree expr)
1310 STRIP_NOPS (expr);
1312 return ((TREE_CODE (expr) == INTEGER_CST
1313 && TREE_INT_CST_LOW (expr) == 1
1314 && TREE_INT_CST_HIGH (expr) == 0)
1315 || (TREE_CODE (expr) == COMPLEX_CST
1316 && integer_onep (TREE_REALPART (expr))
1317 && integer_zerop (TREE_IMAGPART (expr))));
1320 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1321 it contains. Likewise for the corresponding complex constant. */
1324 integer_all_onesp (tree expr)
1326 int prec;
1327 int uns;
1329 STRIP_NOPS (expr);
1331 if (TREE_CODE (expr) == COMPLEX_CST
1332 && integer_all_onesp (TREE_REALPART (expr))
1333 && integer_zerop (TREE_IMAGPART (expr)))
1334 return 1;
1336 else if (TREE_CODE (expr) != INTEGER_CST)
1337 return 0;
1339 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
1340 if (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1341 && TREE_INT_CST_HIGH (expr) == -1)
1342 return 1;
1343 if (!uns)
1344 return 0;
1346 /* Note that using TYPE_PRECISION here is wrong. We care about the
1347 actual bits, not the (arbitrary) range of the type. */
1348 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1349 if (prec >= HOST_BITS_PER_WIDE_INT)
1351 HOST_WIDE_INT high_value;
1352 int shift_amount;
1354 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1356 /* Can not handle precisions greater than twice the host int size. */
1357 gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
1358 if (shift_amount == HOST_BITS_PER_WIDE_INT)
1359 /* Shifting by the host word size is undefined according to the ANSI
1360 standard, so we must handle this as a special case. */
1361 high_value = -1;
1362 else
1363 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1365 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1366 && TREE_INT_CST_HIGH (expr) == high_value);
1368 else
1369 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
1372 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1373 one bit on). */
1376 integer_pow2p (tree expr)
1378 int prec;
1379 HOST_WIDE_INT high, low;
1381 STRIP_NOPS (expr);
1383 if (TREE_CODE (expr) == COMPLEX_CST
1384 && integer_pow2p (TREE_REALPART (expr))
1385 && integer_zerop (TREE_IMAGPART (expr)))
1386 return 1;
1388 if (TREE_CODE (expr) != INTEGER_CST)
1389 return 0;
1391 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1392 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1393 high = TREE_INT_CST_HIGH (expr);
1394 low = TREE_INT_CST_LOW (expr);
1396 /* First clear all bits that are beyond the type's precision in case
1397 we've been sign extended. */
1399 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1401 else if (prec > HOST_BITS_PER_WIDE_INT)
1402 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1403 else
1405 high = 0;
1406 if (prec < HOST_BITS_PER_WIDE_INT)
1407 low &= ~((HOST_WIDE_INT) (-1) << prec);
1410 if (high == 0 && low == 0)
1411 return 0;
1413 return ((high == 0 && (low & (low - 1)) == 0)
1414 || (low == 0 && (high & (high - 1)) == 0));
1417 /* Return 1 if EXPR is an integer constant other than zero or a
1418 complex constant other than zero. */
1421 integer_nonzerop (tree expr)
1423 STRIP_NOPS (expr);
1425 return ((TREE_CODE (expr) == INTEGER_CST
1426 && (TREE_INT_CST_LOW (expr) != 0
1427 || TREE_INT_CST_HIGH (expr) != 0))
1428 || (TREE_CODE (expr) == COMPLEX_CST
1429 && (integer_nonzerop (TREE_REALPART (expr))
1430 || integer_nonzerop (TREE_IMAGPART (expr)))));
1433 /* Return the power of two represented by a tree node known to be a
1434 power of two. */
1437 tree_log2 (tree expr)
1439 int prec;
1440 HOST_WIDE_INT high, low;
1442 STRIP_NOPS (expr);
1444 if (TREE_CODE (expr) == COMPLEX_CST)
1445 return tree_log2 (TREE_REALPART (expr));
1447 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1448 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1450 high = TREE_INT_CST_HIGH (expr);
1451 low = TREE_INT_CST_LOW (expr);
1453 /* First clear all bits that are beyond the type's precision in case
1454 we've been sign extended. */
1456 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1458 else if (prec > HOST_BITS_PER_WIDE_INT)
1459 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1460 else
1462 high = 0;
1463 if (prec < HOST_BITS_PER_WIDE_INT)
1464 low &= ~((HOST_WIDE_INT) (-1) << prec);
1467 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1468 : exact_log2 (low));
1471 /* Similar, but return the largest integer Y such that 2 ** Y is less
1472 than or equal to EXPR. */
1475 tree_floor_log2 (tree expr)
1477 int prec;
1478 HOST_WIDE_INT high, low;
1480 STRIP_NOPS (expr);
1482 if (TREE_CODE (expr) == COMPLEX_CST)
1483 return tree_log2 (TREE_REALPART (expr));
1485 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1486 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1488 high = TREE_INT_CST_HIGH (expr);
1489 low = TREE_INT_CST_LOW (expr);
1491 /* First clear all bits that are beyond the type's precision in case
1492 we've been sign extended. Ignore if type's precision hasn't been set
1493 since what we are doing is setting it. */
1495 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
1497 else if (prec > HOST_BITS_PER_WIDE_INT)
1498 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1499 else
1501 high = 0;
1502 if (prec < HOST_BITS_PER_WIDE_INT)
1503 low &= ~((HOST_WIDE_INT) (-1) << prec);
1506 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
1507 : floor_log2 (low));
1510 /* Return 1 if EXPR is the real constant zero. */
1513 real_zerop (tree expr)
1515 STRIP_NOPS (expr);
1517 return ((TREE_CODE (expr) == REAL_CST
1518 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1519 || (TREE_CODE (expr) == COMPLEX_CST
1520 && real_zerop (TREE_REALPART (expr))
1521 && real_zerop (TREE_IMAGPART (expr))));
1524 /* Return 1 if EXPR is the real constant one in real or complex form. */
1527 real_onep (tree expr)
1529 STRIP_NOPS (expr);
1531 return ((TREE_CODE (expr) == REAL_CST
1532 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1533 || (TREE_CODE (expr) == COMPLEX_CST
1534 && real_onep (TREE_REALPART (expr))
1535 && real_zerop (TREE_IMAGPART (expr))));
1538 /* Return 1 if EXPR is the real constant two. */
1541 real_twop (tree expr)
1543 STRIP_NOPS (expr);
1545 return ((TREE_CODE (expr) == REAL_CST
1546 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1547 || (TREE_CODE (expr) == COMPLEX_CST
1548 && real_twop (TREE_REALPART (expr))
1549 && real_zerop (TREE_IMAGPART (expr))));
1552 /* Return 1 if EXPR is the real constant minus one. */
1555 real_minus_onep (tree expr)
1557 STRIP_NOPS (expr);
1559 return ((TREE_CODE (expr) == REAL_CST
1560 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
1561 || (TREE_CODE (expr) == COMPLEX_CST
1562 && real_minus_onep (TREE_REALPART (expr))
1563 && real_zerop (TREE_IMAGPART (expr))));
1566 /* Nonzero if EXP is a constant or a cast of a constant. */
1569 really_constant_p (tree exp)
1571 /* This is not quite the same as STRIP_NOPS. It does more. */
1572 while (TREE_CODE (exp) == NOP_EXPR
1573 || TREE_CODE (exp) == CONVERT_EXPR
1574 || TREE_CODE (exp) == NON_LVALUE_EXPR)
1575 exp = TREE_OPERAND (exp, 0);
1576 return TREE_CONSTANT (exp);
1579 /* Return first list element whose TREE_VALUE is ELEM.
1580 Return 0 if ELEM is not in LIST. */
1582 tree
1583 value_member (tree elem, tree list)
1585 while (list)
1587 if (elem == TREE_VALUE (list))
1588 return list;
1589 list = TREE_CHAIN (list);
1591 return NULL_TREE;
1594 /* Return first list element whose TREE_PURPOSE is ELEM.
1595 Return 0 if ELEM is not in LIST. */
1597 tree
1598 purpose_member (tree elem, tree list)
1600 while (list)
1602 if (elem == TREE_PURPOSE (list))
1603 return list;
1604 list = TREE_CHAIN (list);
1606 return NULL_TREE;
1609 /* Return nonzero if ELEM is part of the chain CHAIN. */
1612 chain_member (tree elem, tree chain)
1614 while (chain)
1616 if (elem == chain)
1617 return 1;
1618 chain = TREE_CHAIN (chain);
1621 return 0;
1624 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1625 We expect a null pointer to mark the end of the chain.
1626 This is the Lisp primitive `length'. */
1629 list_length (tree t)
1631 tree p = t;
1632 #ifdef ENABLE_TREE_CHECKING
1633 tree q = t;
1634 #endif
1635 int len = 0;
1637 while (p)
1639 p = TREE_CHAIN (p);
1640 #ifdef ENABLE_TREE_CHECKING
1641 if (len % 2)
1642 q = TREE_CHAIN (q);
1643 gcc_assert (p != q);
1644 #endif
1645 len++;
1648 return len;
1651 /* Returns the number of FIELD_DECLs in TYPE. */
1654 fields_length (tree type)
1656 tree t = TYPE_FIELDS (type);
1657 int count = 0;
1659 for (; t; t = TREE_CHAIN (t))
1660 if (TREE_CODE (t) == FIELD_DECL)
1661 ++count;
1663 return count;
1666 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1667 by modifying the last node in chain 1 to point to chain 2.
1668 This is the Lisp primitive `nconc'. */
1670 tree
1671 chainon (tree op1, tree op2)
1673 tree t1;
1675 if (!op1)
1676 return op2;
1677 if (!op2)
1678 return op1;
1680 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1681 continue;
1682 TREE_CHAIN (t1) = op2;
1684 #ifdef ENABLE_TREE_CHECKING
1686 tree t2;
1687 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1688 gcc_assert (t2 != t1);
1690 #endif
1692 return op1;
1695 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1697 tree
1698 tree_last (tree chain)
1700 tree next;
1701 if (chain)
1702 while ((next = TREE_CHAIN (chain)))
1703 chain = next;
1704 return chain;
1707 /* Reverse the order of elements in the chain T,
1708 and return the new head of the chain (old last element). */
1710 tree
1711 nreverse (tree t)
1713 tree prev = 0, decl, next;
1714 for (decl = t; decl; decl = next)
1716 next = TREE_CHAIN (decl);
1717 TREE_CHAIN (decl) = prev;
1718 prev = decl;
1720 return prev;
1723 /* Return a newly created TREE_LIST node whose
1724 purpose and value fields are PARM and VALUE. */
1726 tree
1727 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
1729 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
1730 TREE_PURPOSE (t) = parm;
1731 TREE_VALUE (t) = value;
1732 return t;
1735 /* Return a newly created TREE_LIST node whose
1736 purpose and value fields are PURPOSE and VALUE
1737 and whose TREE_CHAIN is CHAIN. */
1739 tree
1740 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
1742 tree node;
1744 node = ggc_alloc_zone_pass_stat (sizeof (struct tree_list), &tree_zone);
1746 memset (node, 0, sizeof (struct tree_common));
1748 #ifdef GATHER_STATISTICS
1749 tree_node_counts[(int) x_kind]++;
1750 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
1751 #endif
1753 TREE_SET_CODE (node, TREE_LIST);
1754 TREE_CHAIN (node) = chain;
1755 TREE_PURPOSE (node) = purpose;
1756 TREE_VALUE (node) = value;
1757 return node;
1761 /* Return the size nominally occupied by an object of type TYPE
1762 when it resides in memory. The value is measured in units of bytes,
1763 and its data type is that normally used for type sizes
1764 (which is the first type created by make_signed_type or
1765 make_unsigned_type). */
1767 tree
1768 size_in_bytes (tree type)
1770 tree t;
1772 if (type == error_mark_node)
1773 return integer_zero_node;
1775 type = TYPE_MAIN_VARIANT (type);
1776 t = TYPE_SIZE_UNIT (type);
1778 if (t == 0)
1780 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
1781 return size_zero_node;
1784 return t;
1787 /* Return the size of TYPE (in bytes) as a wide integer
1788 or return -1 if the size can vary or is larger than an integer. */
1790 HOST_WIDE_INT
1791 int_size_in_bytes (tree type)
1793 tree t;
1795 if (type == error_mark_node)
1796 return 0;
1798 type = TYPE_MAIN_VARIANT (type);
1799 t = TYPE_SIZE_UNIT (type);
1800 if (t == 0
1801 || TREE_CODE (t) != INTEGER_CST
1802 || TREE_INT_CST_HIGH (t) != 0
1803 /* If the result would appear negative, it's too big to represent. */
1804 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
1805 return -1;
1807 return TREE_INT_CST_LOW (t);
1810 /* Return the maximum size of TYPE (in bytes) as a wide integer
1811 or return -1 if the size can vary or is larger than an integer. */
1813 HOST_WIDE_INT
1814 max_int_size_in_bytes (tree type)
1816 HOST_WIDE_INT size = -1;
1817 tree size_tree;
1819 /* If this is an array type, check for a possible MAX_SIZE attached. */
1821 if (TREE_CODE (type) == ARRAY_TYPE)
1823 size_tree = TYPE_ARRAY_MAX_SIZE (type);
1825 if (size_tree && host_integerp (size_tree, 1))
1826 size = tree_low_cst (size_tree, 1);
1829 /* If we still haven't been able to get a size, see if the language
1830 can compute a maximum size. */
1832 if (size == -1)
1834 size_tree = lang_hooks.types.max_size (type);
1836 if (size_tree && host_integerp (size_tree, 1))
1837 size = tree_low_cst (size_tree, 1);
1840 return size;
1843 /* Return the bit position of FIELD, in bits from the start of the record.
1844 This is a tree of type bitsizetype. */
1846 tree
1847 bit_position (tree field)
1849 return bit_from_pos (DECL_FIELD_OFFSET (field),
1850 DECL_FIELD_BIT_OFFSET (field));
1853 /* Likewise, but return as an integer. It must be representable in
1854 that way (since it could be a signed value, we don't have the
1855 option of returning -1 like int_size_in_byte can. */
1857 HOST_WIDE_INT
1858 int_bit_position (tree field)
1860 return tree_low_cst (bit_position (field), 0);
1863 /* Return the byte position of FIELD, in bytes from the start of the record.
1864 This is a tree of type sizetype. */
1866 tree
1867 byte_position (tree field)
1869 return byte_from_pos (DECL_FIELD_OFFSET (field),
1870 DECL_FIELD_BIT_OFFSET (field));
1873 /* Likewise, but return as an integer. It must be representable in
1874 that way (since it could be a signed value, we don't have the
1875 option of returning -1 like int_size_in_byte can. */
1877 HOST_WIDE_INT
1878 int_byte_position (tree field)
1880 return tree_low_cst (byte_position (field), 0);
1883 /* Return the strictest alignment, in bits, that T is known to have. */
1885 unsigned int
1886 expr_align (tree t)
1888 unsigned int align0, align1;
1890 switch (TREE_CODE (t))
1892 case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
1893 /* If we have conversions, we know that the alignment of the
1894 object must meet each of the alignments of the types. */
1895 align0 = expr_align (TREE_OPERAND (t, 0));
1896 align1 = TYPE_ALIGN (TREE_TYPE (t));
1897 return MAX (align0, align1);
1899 case GIMPLE_MODIFY_STMT:
1900 /* We should never ask for the alignment of a gimple statement. */
1901 gcc_unreachable ();
1903 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
1904 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
1905 case CLEANUP_POINT_EXPR:
1906 /* These don't change the alignment of an object. */
1907 return expr_align (TREE_OPERAND (t, 0));
1909 case COND_EXPR:
1910 /* The best we can do is say that the alignment is the least aligned
1911 of the two arms. */
1912 align0 = expr_align (TREE_OPERAND (t, 1));
1913 align1 = expr_align (TREE_OPERAND (t, 2));
1914 return MIN (align0, align1);
1916 case LABEL_DECL: case CONST_DECL:
1917 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
1918 if (DECL_ALIGN (t) != 0)
1919 return DECL_ALIGN (t);
1920 break;
1922 case FUNCTION_DECL:
1923 return FUNCTION_BOUNDARY;
1925 default:
1926 break;
1929 /* Otherwise take the alignment from that of the type. */
1930 return TYPE_ALIGN (TREE_TYPE (t));
1933 /* Return, as a tree node, the number of elements for TYPE (which is an
1934 ARRAY_TYPE) minus one. This counts only elements of the top array. */
1936 tree
1937 array_type_nelts (tree type)
1939 tree index_type, min, max;
1941 /* If they did it with unspecified bounds, then we should have already
1942 given an error about it before we got here. */
1943 if (! TYPE_DOMAIN (type))
1944 return error_mark_node;
1946 index_type = TYPE_DOMAIN (type);
1947 min = TYPE_MIN_VALUE (index_type);
1948 max = TYPE_MAX_VALUE (index_type);
1950 return (integer_zerop (min)
1951 ? max
1952 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
1955 /* If arg is static -- a reference to an object in static storage -- then
1956 return the object. This is not the same as the C meaning of `static'.
1957 If arg isn't static, return NULL. */
1959 tree
1960 staticp (tree arg)
1962 switch (TREE_CODE (arg))
1964 case FUNCTION_DECL:
1965 /* Nested functions are static, even though taking their address will
1966 involve a trampoline as we unnest the nested function and create
1967 the trampoline on the tree level. */
1968 return arg;
1970 case VAR_DECL:
1971 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1972 && ! DECL_THREAD_LOCAL_P (arg)
1973 && ! DECL_DLLIMPORT_P (arg)
1974 ? arg : NULL);
1976 case CONST_DECL:
1977 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1978 ? arg : NULL);
1980 case CONSTRUCTOR:
1981 return TREE_STATIC (arg) ? arg : NULL;
1983 case LABEL_DECL:
1984 case STRING_CST:
1985 return arg;
1987 case COMPONENT_REF:
1988 /* If the thing being referenced is not a field, then it is
1989 something language specific. */
1990 if (TREE_CODE (TREE_OPERAND (arg, 1)) != FIELD_DECL)
1991 return (*lang_hooks.staticp) (arg);
1993 /* If we are referencing a bitfield, we can't evaluate an
1994 ADDR_EXPR at compile time and so it isn't a constant. */
1995 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
1996 return NULL;
1998 return staticp (TREE_OPERAND (arg, 0));
2000 case BIT_FIELD_REF:
2001 return NULL;
2003 case MISALIGNED_INDIRECT_REF:
2004 case ALIGN_INDIRECT_REF:
2005 case INDIRECT_REF:
2006 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
2008 case ARRAY_REF:
2009 case ARRAY_RANGE_REF:
2010 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2011 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2012 return staticp (TREE_OPERAND (arg, 0));
2013 else
2014 return false;
2016 default:
2017 if ((unsigned int) TREE_CODE (arg)
2018 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
2019 return lang_hooks.staticp (arg);
2020 else
2021 return NULL;
2025 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2026 Do this to any expression which may be used in more than one place,
2027 but must be evaluated only once.
2029 Normally, expand_expr would reevaluate the expression each time.
2030 Calling save_expr produces something that is evaluated and recorded
2031 the first time expand_expr is called on it. Subsequent calls to
2032 expand_expr just reuse the recorded value.
2034 The call to expand_expr that generates code that actually computes
2035 the value is the first call *at compile time*. Subsequent calls
2036 *at compile time* generate code to use the saved value.
2037 This produces correct result provided that *at run time* control
2038 always flows through the insns made by the first expand_expr
2039 before reaching the other places where the save_expr was evaluated.
2040 You, the caller of save_expr, must make sure this is so.
2042 Constants, and certain read-only nodes, are returned with no
2043 SAVE_EXPR because that is safe. Expressions containing placeholders
2044 are not touched; see tree.def for an explanation of what these
2045 are used for. */
2047 tree
2048 save_expr (tree expr)
2050 tree t = fold (expr);
2051 tree inner;
2053 /* If the tree evaluates to a constant, then we don't want to hide that
2054 fact (i.e. this allows further folding, and direct checks for constants).
2055 However, a read-only object that has side effects cannot be bypassed.
2056 Since it is no problem to reevaluate literals, we just return the
2057 literal node. */
2058 inner = skip_simple_arithmetic (t);
2060 if (TREE_INVARIANT (inner)
2061 || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
2062 || TREE_CODE (inner) == SAVE_EXPR
2063 || TREE_CODE (inner) == ERROR_MARK)
2064 return t;
2066 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2067 it means that the size or offset of some field of an object depends on
2068 the value within another field.
2070 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2071 and some variable since it would then need to be both evaluated once and
2072 evaluated more than once. Front-ends must assure this case cannot
2073 happen by surrounding any such subexpressions in their own SAVE_EXPR
2074 and forcing evaluation at the proper time. */
2075 if (contains_placeholder_p (inner))
2076 return t;
2078 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
2080 /* This expression might be placed ahead of a jump to ensure that the
2081 value was computed on both sides of the jump. So make sure it isn't
2082 eliminated as dead. */
2083 TREE_SIDE_EFFECTS (t) = 1;
2084 TREE_INVARIANT (t) = 1;
2085 return t;
2088 /* Look inside EXPR and into any simple arithmetic operations. Return
2089 the innermost non-arithmetic node. */
2091 tree
2092 skip_simple_arithmetic (tree expr)
2094 tree inner;
2096 /* We don't care about whether this can be used as an lvalue in this
2097 context. */
2098 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
2099 expr = TREE_OPERAND (expr, 0);
2101 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
2102 a constant, it will be more efficient to not make another SAVE_EXPR since
2103 it will allow better simplification and GCSE will be able to merge the
2104 computations if they actually occur. */
2105 inner = expr;
2106 while (1)
2108 if (UNARY_CLASS_P (inner))
2109 inner = TREE_OPERAND (inner, 0);
2110 else if (BINARY_CLASS_P (inner))
2112 if (TREE_INVARIANT (TREE_OPERAND (inner, 1)))
2113 inner = TREE_OPERAND (inner, 0);
2114 else if (TREE_INVARIANT (TREE_OPERAND (inner, 0)))
2115 inner = TREE_OPERAND (inner, 1);
2116 else
2117 break;
2119 else
2120 break;
2123 return inner;
2126 /* Return which tree structure is used by T. */
2128 enum tree_node_structure_enum
2129 tree_node_structure (tree t)
2131 enum tree_code code = TREE_CODE (t);
2133 switch (TREE_CODE_CLASS (code))
2135 case tcc_declaration:
2137 switch (code)
2139 case FIELD_DECL:
2140 return TS_FIELD_DECL;
2141 case PARM_DECL:
2142 return TS_PARM_DECL;
2143 case VAR_DECL:
2144 return TS_VAR_DECL;
2145 case LABEL_DECL:
2146 return TS_LABEL_DECL;
2147 case RESULT_DECL:
2148 return TS_RESULT_DECL;
2149 case CONST_DECL:
2150 return TS_CONST_DECL;
2151 case TYPE_DECL:
2152 return TS_TYPE_DECL;
2153 case FUNCTION_DECL:
2154 return TS_FUNCTION_DECL;
2155 case SYMBOL_MEMORY_TAG:
2156 case NAME_MEMORY_TAG:
2157 case STRUCT_FIELD_TAG:
2158 case MEMORY_PARTITION_TAG:
2159 return TS_MEMORY_TAG;
2160 default:
2161 return TS_DECL_NON_COMMON;
2164 case tcc_type:
2165 return TS_TYPE;
2166 case tcc_reference:
2167 case tcc_comparison:
2168 case tcc_unary:
2169 case tcc_binary:
2170 case tcc_expression:
2171 case tcc_statement:
2172 case tcc_vl_exp:
2173 return TS_EXP;
2174 case tcc_gimple_stmt:
2175 return TS_GIMPLE_STATEMENT;
2176 default: /* tcc_constant and tcc_exceptional */
2177 break;
2179 switch (code)
2181 /* tcc_constant cases. */
2182 case INTEGER_CST: return TS_INT_CST;
2183 case REAL_CST: return TS_REAL_CST;
2184 case COMPLEX_CST: return TS_COMPLEX;
2185 case VECTOR_CST: return TS_VECTOR;
2186 case STRING_CST: return TS_STRING;
2187 /* tcc_exceptional cases. */
2188 /* FIXME tuples: eventually this should be TS_BASE. For now, nothing
2189 returns TS_BASE. */
2190 case ERROR_MARK: return TS_COMMON;
2191 case IDENTIFIER_NODE: return TS_IDENTIFIER;
2192 case TREE_LIST: return TS_LIST;
2193 case TREE_VEC: return TS_VEC;
2194 case PHI_NODE: return TS_PHI_NODE;
2195 case SSA_NAME: return TS_SSA_NAME;
2196 case PLACEHOLDER_EXPR: return TS_COMMON;
2197 case STATEMENT_LIST: return TS_STATEMENT_LIST;
2198 case BLOCK: return TS_BLOCK;
2199 case CONSTRUCTOR: return TS_CONSTRUCTOR;
2200 case TREE_BINFO: return TS_BINFO;
2201 case VALUE_HANDLE: return TS_VALUE_HANDLE;
2202 case OMP_CLAUSE: return TS_OMP_CLAUSE;
2204 default:
2205 gcc_unreachable ();
2209 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2210 or offset that depends on a field within a record. */
2212 bool
2213 contains_placeholder_p (tree exp)
2215 enum tree_code code;
2217 if (!exp)
2218 return 0;
2220 code = TREE_CODE (exp);
2221 if (code == PLACEHOLDER_EXPR)
2222 return 1;
2224 switch (TREE_CODE_CLASS (code))
2226 case tcc_reference:
2227 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2228 position computations since they will be converted into a
2229 WITH_RECORD_EXPR involving the reference, which will assume
2230 here will be valid. */
2231 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2233 case tcc_exceptional:
2234 if (code == TREE_LIST)
2235 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
2236 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
2237 break;
2239 case tcc_unary:
2240 case tcc_binary:
2241 case tcc_comparison:
2242 case tcc_expression:
2243 switch (code)
2245 case COMPOUND_EXPR:
2246 /* Ignoring the first operand isn't quite right, but works best. */
2247 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2249 case COND_EXPR:
2250 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2251 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
2252 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
2254 default:
2255 break;
2258 switch (TREE_CODE_LENGTH (code))
2260 case 1:
2261 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2262 case 2:
2263 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2264 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
2265 default:
2266 return 0;
2269 case tcc_vl_exp:
2270 switch (code)
2272 case CALL_EXPR:
2274 tree arg;
2275 call_expr_arg_iterator iter;
2276 FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
2277 if (CONTAINS_PLACEHOLDER_P (arg))
2278 return 1;
2279 return 0;
2281 default:
2282 return 0;
2285 default:
2286 return 0;
2288 return 0;
2291 /* Return true if any part of the computation of TYPE involves a
2292 PLACEHOLDER_EXPR. This includes size, bounds, qualifiers
2293 (for QUAL_UNION_TYPE) and field positions. */
2295 static bool
2296 type_contains_placeholder_1 (tree type)
2298 /* If the size contains a placeholder or the parent type (component type in
2299 the case of arrays) type involves a placeholder, this type does. */
2300 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
2301 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
2302 || (TREE_TYPE (type) != 0
2303 && type_contains_placeholder_p (TREE_TYPE (type))))
2304 return true;
2306 /* Now do type-specific checks. Note that the last part of the check above
2307 greatly limits what we have to do below. */
2308 switch (TREE_CODE (type))
2310 case VOID_TYPE:
2311 case COMPLEX_TYPE:
2312 case ENUMERAL_TYPE:
2313 case BOOLEAN_TYPE:
2314 case POINTER_TYPE:
2315 case OFFSET_TYPE:
2316 case REFERENCE_TYPE:
2317 case METHOD_TYPE:
2318 case FUNCTION_TYPE:
2319 case VECTOR_TYPE:
2320 return false;
2322 case INTEGER_TYPE:
2323 case REAL_TYPE:
2324 /* Here we just check the bounds. */
2325 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
2326 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
2328 case ARRAY_TYPE:
2329 /* We're already checked the component type (TREE_TYPE), so just check
2330 the index type. */
2331 return type_contains_placeholder_p (TYPE_DOMAIN (type));
2333 case RECORD_TYPE:
2334 case UNION_TYPE:
2335 case QUAL_UNION_TYPE:
2337 tree field;
2339 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2340 if (TREE_CODE (field) == FIELD_DECL
2341 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
2342 || (TREE_CODE (type) == QUAL_UNION_TYPE
2343 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
2344 || type_contains_placeholder_p (TREE_TYPE (field))))
2345 return true;
2347 return false;
2350 default:
2351 gcc_unreachable ();
2355 bool
2356 type_contains_placeholder_p (tree type)
2358 bool result;
2360 /* If the contains_placeholder_bits field has been initialized,
2361 then we know the answer. */
2362 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
2363 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
2365 /* Indicate that we've seen this type node, and the answer is false.
2366 This is what we want to return if we run into recursion via fields. */
2367 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
2369 /* Compute the real value. */
2370 result = type_contains_placeholder_1 (type);
2372 /* Store the real value. */
2373 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
2375 return result;
2378 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2379 return a tree with all occurrences of references to F in a
2380 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
2381 contains only arithmetic expressions or a CALL_EXPR with a
2382 PLACEHOLDER_EXPR occurring only in its arglist. */
2384 tree
2385 substitute_in_expr (tree exp, tree f, tree r)
2387 enum tree_code code = TREE_CODE (exp);
2388 tree op0, op1, op2, op3;
2389 tree new;
2390 tree inner;
2392 /* We handle TREE_LIST and COMPONENT_REF separately. */
2393 if (code == TREE_LIST)
2395 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
2396 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
2397 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2398 return exp;
2400 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2402 else if (code == COMPONENT_REF)
2404 /* If this expression is getting a value from a PLACEHOLDER_EXPR
2405 and it is the right field, replace it with R. */
2406 for (inner = TREE_OPERAND (exp, 0);
2407 REFERENCE_CLASS_P (inner);
2408 inner = TREE_OPERAND (inner, 0))
2410 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2411 && TREE_OPERAND (exp, 1) == f)
2412 return r;
2414 /* If this expression hasn't been completed let, leave it alone. */
2415 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && TREE_TYPE (inner) == 0)
2416 return exp;
2418 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2419 if (op0 == TREE_OPERAND (exp, 0))
2420 return exp;
2422 new = fold_build3 (COMPONENT_REF, TREE_TYPE (exp),
2423 op0, TREE_OPERAND (exp, 1), NULL_TREE);
2425 else
2426 switch (TREE_CODE_CLASS (code))
2428 case tcc_constant:
2429 case tcc_declaration:
2430 return exp;
2432 case tcc_exceptional:
2433 case tcc_unary:
2434 case tcc_binary:
2435 case tcc_comparison:
2436 case tcc_expression:
2437 case tcc_reference:
2438 switch (TREE_CODE_LENGTH (code))
2440 case 0:
2441 return exp;
2443 case 1:
2444 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2445 if (op0 == TREE_OPERAND (exp, 0))
2446 return exp;
2448 new = fold_build1 (code, TREE_TYPE (exp), op0);
2449 break;
2451 case 2:
2452 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2453 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2455 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2456 return exp;
2458 new = fold_build2 (code, TREE_TYPE (exp), op0, op1);
2459 break;
2461 case 3:
2462 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2463 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2464 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2466 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2467 && op2 == TREE_OPERAND (exp, 2))
2468 return exp;
2470 new = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
2471 break;
2473 case 4:
2474 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2475 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2476 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2477 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
2479 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2480 && op2 == TREE_OPERAND (exp, 2)
2481 && op3 == TREE_OPERAND (exp, 3))
2482 return exp;
2484 new = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2485 break;
2487 default:
2488 gcc_unreachable ();
2490 break;
2492 case tcc_vl_exp:
2494 tree copy = NULL_TREE;
2495 int i;
2496 int n = TREE_OPERAND_LENGTH (exp);
2497 for (i = 1; i < n; i++)
2499 tree op = TREE_OPERAND (exp, i);
2500 tree newop = SUBSTITUTE_IN_EXPR (op, f, r);
2501 if (newop != op)
2503 copy = copy_node (exp);
2504 TREE_OPERAND (copy, i) = newop;
2507 if (copy)
2508 new = fold (copy);
2509 else
2510 return exp;
2513 default:
2514 gcc_unreachable ();
2517 TREE_READONLY (new) = TREE_READONLY (exp);
2518 return new;
2521 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
2522 for it within OBJ, a tree that is an object or a chain of references. */
2524 tree
2525 substitute_placeholder_in_expr (tree exp, tree obj)
2527 enum tree_code code = TREE_CODE (exp);
2528 tree op0, op1, op2, op3;
2530 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
2531 in the chain of OBJ. */
2532 if (code == PLACEHOLDER_EXPR)
2534 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
2535 tree elt;
2537 for (elt = obj; elt != 0;
2538 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2539 || TREE_CODE (elt) == COND_EXPR)
2540 ? TREE_OPERAND (elt, 1)
2541 : (REFERENCE_CLASS_P (elt)
2542 || UNARY_CLASS_P (elt)
2543 || BINARY_CLASS_P (elt)
2544 || VL_EXP_CLASS_P (elt)
2545 || EXPRESSION_CLASS_P (elt))
2546 ? TREE_OPERAND (elt, 0) : 0))
2547 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
2548 return elt;
2550 for (elt = obj; elt != 0;
2551 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2552 || TREE_CODE (elt) == COND_EXPR)
2553 ? TREE_OPERAND (elt, 1)
2554 : (REFERENCE_CLASS_P (elt)
2555 || UNARY_CLASS_P (elt)
2556 || BINARY_CLASS_P (elt)
2557 || VL_EXP_CLASS_P (elt)
2558 || EXPRESSION_CLASS_P (elt))
2559 ? TREE_OPERAND (elt, 0) : 0))
2560 if (POINTER_TYPE_P (TREE_TYPE (elt))
2561 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
2562 == need_type))
2563 return fold_build1 (INDIRECT_REF, need_type, elt);
2565 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
2566 survives until RTL generation, there will be an error. */
2567 return exp;
2570 /* TREE_LIST is special because we need to look at TREE_VALUE
2571 and TREE_CHAIN, not TREE_OPERANDS. */
2572 else if (code == TREE_LIST)
2574 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
2575 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
2576 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2577 return exp;
2579 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2581 else
2582 switch (TREE_CODE_CLASS (code))
2584 case tcc_constant:
2585 case tcc_declaration:
2586 return exp;
2588 case tcc_exceptional:
2589 case tcc_unary:
2590 case tcc_binary:
2591 case tcc_comparison:
2592 case tcc_expression:
2593 case tcc_reference:
2594 case tcc_statement:
2595 switch (TREE_CODE_LENGTH (code))
2597 case 0:
2598 return exp;
2600 case 1:
2601 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2602 if (op0 == TREE_OPERAND (exp, 0))
2603 return exp;
2604 else
2605 return fold_build1 (code, TREE_TYPE (exp), op0);
2607 case 2:
2608 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2609 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2611 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2612 return exp;
2613 else
2614 return fold_build2 (code, TREE_TYPE (exp), op0, op1);
2616 case 3:
2617 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2618 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2619 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2621 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2622 && op2 == TREE_OPERAND (exp, 2))
2623 return exp;
2624 else
2625 return fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
2627 case 4:
2628 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2629 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2630 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2631 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
2633 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2634 && op2 == TREE_OPERAND (exp, 2)
2635 && op3 == TREE_OPERAND (exp, 3))
2636 return exp;
2637 else
2638 return fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2640 default:
2641 gcc_unreachable ();
2643 break;
2645 case tcc_vl_exp:
2647 tree copy = NULL_TREE;
2648 int i;
2649 int n = TREE_OPERAND_LENGTH (exp);
2650 for (i = 1; i < n; i++)
2652 tree op = TREE_OPERAND (exp, i);
2653 tree newop = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
2654 if (newop != op)
2656 if (!copy)
2657 copy = copy_node (exp);
2658 TREE_OPERAND (copy, i) = newop;
2661 if (copy)
2662 return fold (copy);
2663 else
2664 return exp;
2667 default:
2668 gcc_unreachable ();
2672 /* Stabilize a reference so that we can use it any number of times
2673 without causing its operands to be evaluated more than once.
2674 Returns the stabilized reference. This works by means of save_expr,
2675 so see the caveats in the comments about save_expr.
2677 Also allows conversion expressions whose operands are references.
2678 Any other kind of expression is returned unchanged. */
2680 tree
2681 stabilize_reference (tree ref)
2683 tree result;
2684 enum tree_code code = TREE_CODE (ref);
2686 switch (code)
2688 case VAR_DECL:
2689 case PARM_DECL:
2690 case RESULT_DECL:
2691 /* No action is needed in this case. */
2692 return ref;
2694 case NOP_EXPR:
2695 case CONVERT_EXPR:
2696 case FLOAT_EXPR:
2697 case FIX_TRUNC_EXPR:
2698 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2699 break;
2701 case INDIRECT_REF:
2702 result = build_nt (INDIRECT_REF,
2703 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2704 break;
2706 case COMPONENT_REF:
2707 result = build_nt (COMPONENT_REF,
2708 stabilize_reference (TREE_OPERAND (ref, 0)),
2709 TREE_OPERAND (ref, 1), NULL_TREE);
2710 break;
2712 case BIT_FIELD_REF:
2713 result = build_nt (BIT_FIELD_REF,
2714 stabilize_reference (TREE_OPERAND (ref, 0)),
2715 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2716 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2717 break;
2719 case ARRAY_REF:
2720 result = build_nt (ARRAY_REF,
2721 stabilize_reference (TREE_OPERAND (ref, 0)),
2722 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2723 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2724 break;
2726 case ARRAY_RANGE_REF:
2727 result = build_nt (ARRAY_RANGE_REF,
2728 stabilize_reference (TREE_OPERAND (ref, 0)),
2729 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2730 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2731 break;
2733 case COMPOUND_EXPR:
2734 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2735 it wouldn't be ignored. This matters when dealing with
2736 volatiles. */
2737 return stabilize_reference_1 (ref);
2739 /* If arg isn't a kind of lvalue we recognize, make no change.
2740 Caller should recognize the error for an invalid lvalue. */
2741 default:
2742 return ref;
2744 case ERROR_MARK:
2745 return error_mark_node;
2748 TREE_TYPE (result) = TREE_TYPE (ref);
2749 TREE_READONLY (result) = TREE_READONLY (ref);
2750 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2751 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2753 return result;
2756 /* Subroutine of stabilize_reference; this is called for subtrees of
2757 references. Any expression with side-effects must be put in a SAVE_EXPR
2758 to ensure that it is only evaluated once.
2760 We don't put SAVE_EXPR nodes around everything, because assigning very
2761 simple expressions to temporaries causes us to miss good opportunities
2762 for optimizations. Among other things, the opportunity to fold in the
2763 addition of a constant into an addressing mode often gets lost, e.g.
2764 "y[i+1] += x;". In general, we take the approach that we should not make
2765 an assignment unless we are forced into it - i.e., that any non-side effect
2766 operator should be allowed, and that cse should take care of coalescing
2767 multiple utterances of the same expression should that prove fruitful. */
2769 tree
2770 stabilize_reference_1 (tree e)
2772 tree result;
2773 enum tree_code code = TREE_CODE (e);
2775 /* We cannot ignore const expressions because it might be a reference
2776 to a const array but whose index contains side-effects. But we can
2777 ignore things that are actual constant or that already have been
2778 handled by this function. */
2780 if (TREE_INVARIANT (e))
2781 return e;
2783 switch (TREE_CODE_CLASS (code))
2785 case tcc_exceptional:
2786 case tcc_type:
2787 case tcc_declaration:
2788 case tcc_comparison:
2789 case tcc_statement:
2790 case tcc_expression:
2791 case tcc_reference:
2792 case tcc_vl_exp:
2793 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2794 so that it will only be evaluated once. */
2795 /* The reference (r) and comparison (<) classes could be handled as
2796 below, but it is generally faster to only evaluate them once. */
2797 if (TREE_SIDE_EFFECTS (e))
2798 return save_expr (e);
2799 return e;
2801 case tcc_constant:
2802 /* Constants need no processing. In fact, we should never reach
2803 here. */
2804 return e;
2806 case tcc_binary:
2807 /* Division is slow and tends to be compiled with jumps,
2808 especially the division by powers of 2 that is often
2809 found inside of an array reference. So do it just once. */
2810 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2811 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2812 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2813 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2814 return save_expr (e);
2815 /* Recursively stabilize each operand. */
2816 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2817 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2818 break;
2820 case tcc_unary:
2821 /* Recursively stabilize each operand. */
2822 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2823 break;
2825 default:
2826 gcc_unreachable ();
2829 TREE_TYPE (result) = TREE_TYPE (e);
2830 TREE_READONLY (result) = TREE_READONLY (e);
2831 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2832 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2833 TREE_INVARIANT (result) = 1;
2835 return result;
2838 /* Low-level constructors for expressions. */
2840 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
2841 TREE_INVARIANT, and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
2843 void
2844 recompute_tree_invariant_for_addr_expr (tree t)
2846 tree node;
2847 bool tc = true, ti = true, se = false;
2849 /* We started out assuming this address is both invariant and constant, but
2850 does not have side effects. Now go down any handled components and see if
2851 any of them involve offsets that are either non-constant or non-invariant.
2852 Also check for side-effects.
2854 ??? Note that this code makes no attempt to deal with the case where
2855 taking the address of something causes a copy due to misalignment. */
2857 #define UPDATE_TITCSE(NODE) \
2858 do { tree _node = (NODE); \
2859 if (_node && !TREE_INVARIANT (_node)) ti = false; \
2860 if (_node && !TREE_CONSTANT (_node)) tc = false; \
2861 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
2863 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
2864 node = TREE_OPERAND (node, 0))
2866 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
2867 array reference (probably made temporarily by the G++ front end),
2868 so ignore all the operands. */
2869 if ((TREE_CODE (node) == ARRAY_REF
2870 || TREE_CODE (node) == ARRAY_RANGE_REF)
2871 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
2873 UPDATE_TITCSE (TREE_OPERAND (node, 1));
2874 if (TREE_OPERAND (node, 2))
2875 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2876 if (TREE_OPERAND (node, 3))
2877 UPDATE_TITCSE (TREE_OPERAND (node, 3));
2879 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
2880 FIELD_DECL, apparently. The G++ front end can put something else
2881 there, at least temporarily. */
2882 else if (TREE_CODE (node) == COMPONENT_REF
2883 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
2885 if (TREE_OPERAND (node, 2))
2886 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2888 else if (TREE_CODE (node) == BIT_FIELD_REF)
2889 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2892 node = lang_hooks.expr_to_decl (node, &tc, &ti, &se);
2894 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
2895 the address, since &(*a)->b is a form of addition. If it's a decl, it's
2896 invariant and constant if the decl is static. It's also invariant if it's
2897 a decl in the current function. Taking the address of a volatile variable
2898 is not volatile. If it's a constant, the address is both invariant and
2899 constant. Otherwise it's neither. */
2900 if (TREE_CODE (node) == INDIRECT_REF)
2901 UPDATE_TITCSE (TREE_OPERAND (node, 0));
2902 else if (DECL_P (node))
2904 if (staticp (node))
2906 else if (decl_function_context (node) == current_function_decl
2907 /* Addresses of thread-local variables are invariant. */
2908 || (TREE_CODE (node) == VAR_DECL
2909 && DECL_THREAD_LOCAL_P (node)))
2910 tc = false;
2911 else
2912 ti = tc = false;
2914 else if (CONSTANT_CLASS_P (node))
2916 else
2918 ti = tc = false;
2919 se |= TREE_SIDE_EFFECTS (node);
2922 TREE_CONSTANT (t) = tc;
2923 TREE_INVARIANT (t) = ti;
2924 TREE_SIDE_EFFECTS (t) = se;
2925 #undef UPDATE_TITCSE
2928 /* Build an expression of code CODE, data type TYPE, and operands as
2929 specified. Expressions and reference nodes can be created this way.
2930 Constants, decls, types and misc nodes cannot be.
2932 We define 5 non-variadic functions, from 0 to 4 arguments. This is
2933 enough for all extant tree codes. */
2935 tree
2936 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
2938 tree t;
2940 gcc_assert (TREE_CODE_LENGTH (code) == 0);
2942 t = make_node_stat (code PASS_MEM_STAT);
2943 TREE_TYPE (t) = tt;
2945 return t;
2948 tree
2949 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
2951 int length = sizeof (struct tree_exp);
2952 #ifdef GATHER_STATISTICS
2953 tree_node_kind kind;
2954 #endif
2955 tree t;
2957 #ifdef GATHER_STATISTICS
2958 switch (TREE_CODE_CLASS (code))
2960 case tcc_statement: /* an expression with side effects */
2961 kind = s_kind;
2962 break;
2963 case tcc_reference: /* a reference */
2964 kind = r_kind;
2965 break;
2966 default:
2967 kind = e_kind;
2968 break;
2971 tree_node_counts[(int) kind]++;
2972 tree_node_sizes[(int) kind] += length;
2973 #endif
2975 gcc_assert (TREE_CODE_LENGTH (code) == 1);
2977 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
2979 memset (t, 0, sizeof (struct tree_common));
2981 TREE_SET_CODE (t, code);
2983 TREE_TYPE (t) = type;
2984 #ifdef USE_MAPPED_LOCATION
2985 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
2986 #else
2987 SET_EXPR_LOCUS (t, NULL);
2988 #endif
2989 TREE_OPERAND (t, 0) = node;
2990 TREE_BLOCK (t) = NULL_TREE;
2991 if (node && !TYPE_P (node))
2993 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2994 TREE_READONLY (t) = TREE_READONLY (node);
2997 if (TREE_CODE_CLASS (code) == tcc_statement)
2998 TREE_SIDE_EFFECTS (t) = 1;
2999 else switch (code)
3001 case VA_ARG_EXPR:
3002 /* All of these have side-effects, no matter what their
3003 operands are. */
3004 TREE_SIDE_EFFECTS (t) = 1;
3005 TREE_READONLY (t) = 0;
3006 break;
3008 case MISALIGNED_INDIRECT_REF:
3009 case ALIGN_INDIRECT_REF:
3010 case INDIRECT_REF:
3011 /* Whether a dereference is readonly has nothing to do with whether
3012 its operand is readonly. */
3013 TREE_READONLY (t) = 0;
3014 break;
3016 case ADDR_EXPR:
3017 if (node)
3018 recompute_tree_invariant_for_addr_expr (t);
3019 break;
3021 default:
3022 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
3023 && node && !TYPE_P (node)
3024 && TREE_CONSTANT (node))
3025 TREE_CONSTANT (t) = 1;
3026 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
3027 && node && TREE_INVARIANT (node))
3028 TREE_INVARIANT (t) = 1;
3029 if (TREE_CODE_CLASS (code) == tcc_reference
3030 && node && TREE_THIS_VOLATILE (node))
3031 TREE_THIS_VOLATILE (t) = 1;
3032 break;
3035 return t;
3038 #define PROCESS_ARG(N) \
3039 do { \
3040 TREE_OPERAND (t, N) = arg##N; \
3041 if (arg##N &&!TYPE_P (arg##N)) \
3043 if (TREE_SIDE_EFFECTS (arg##N)) \
3044 side_effects = 1; \
3045 if (!TREE_READONLY (arg##N)) \
3046 read_only = 0; \
3047 if (!TREE_CONSTANT (arg##N)) \
3048 constant = 0; \
3049 if (!TREE_INVARIANT (arg##N)) \
3050 invariant = 0; \
3052 } while (0)
3054 tree
3055 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
3057 bool constant, read_only, side_effects, invariant;
3058 tree t;
3060 gcc_assert (TREE_CODE_LENGTH (code) == 2);
3062 #if 1
3063 /* FIXME tuples: Statement's aren't expressions! */
3064 if (code == GIMPLE_MODIFY_STMT)
3065 return build_gimple_modify_stmt_stat (arg0, arg1 PASS_MEM_STAT);
3066 #else
3067 /* Must use build_gimple_modify_stmt to construct GIMPLE_MODIFY_STMTs. */
3068 gcc_assert (code != GIMPLE_MODIFY_STMT);
3069 #endif
3071 t = make_node_stat (code PASS_MEM_STAT);
3072 TREE_TYPE (t) = tt;
3074 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
3075 result based on those same flags for the arguments. But if the
3076 arguments aren't really even `tree' expressions, we shouldn't be trying
3077 to do this. */
3079 /* Expressions without side effects may be constant if their
3080 arguments are as well. */
3081 constant = (TREE_CODE_CLASS (code) == tcc_comparison
3082 || TREE_CODE_CLASS (code) == tcc_binary);
3083 read_only = 1;
3084 side_effects = TREE_SIDE_EFFECTS (t);
3085 invariant = constant;
3087 PROCESS_ARG(0);
3088 PROCESS_ARG(1);
3090 TREE_READONLY (t) = read_only;
3091 TREE_CONSTANT (t) = constant;
3092 TREE_INVARIANT (t) = invariant;
3093 TREE_SIDE_EFFECTS (t) = side_effects;
3094 TREE_THIS_VOLATILE (t)
3095 = (TREE_CODE_CLASS (code) == tcc_reference
3096 && arg0 && TREE_THIS_VOLATILE (arg0));
3098 return t;
3102 /* Build a GIMPLE_MODIFY_STMT node. This tree code doesn't have a
3103 type, so we can't use build2 (a.k.a. build2_stat). */
3105 tree
3106 build_gimple_modify_stmt_stat (tree arg0, tree arg1 MEM_STAT_DECL)
3108 tree t;
3110 t = make_node_stat (GIMPLE_MODIFY_STMT PASS_MEM_STAT);
3111 /* ?? We don't care about setting flags for tuples... */
3112 GIMPLE_STMT_OPERAND (t, 0) = arg0;
3113 GIMPLE_STMT_OPERAND (t, 1) = arg1;
3114 return t;
3117 tree
3118 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3119 tree arg2 MEM_STAT_DECL)
3121 bool constant, read_only, side_effects, invariant;
3122 tree t;
3124 gcc_assert (TREE_CODE_LENGTH (code) == 3);
3125 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3127 t = make_node_stat (code PASS_MEM_STAT);
3128 TREE_TYPE (t) = tt;
3130 side_effects = TREE_SIDE_EFFECTS (t);
3132 PROCESS_ARG(0);
3133 PROCESS_ARG(1);
3134 PROCESS_ARG(2);
3136 TREE_SIDE_EFFECTS (t) = side_effects;
3137 TREE_THIS_VOLATILE (t)
3138 = (TREE_CODE_CLASS (code) == tcc_reference
3139 && arg0 && TREE_THIS_VOLATILE (arg0));
3141 return t;
3144 tree
3145 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3146 tree arg2, tree arg3 MEM_STAT_DECL)
3148 bool constant, read_only, side_effects, invariant;
3149 tree t;
3151 gcc_assert (TREE_CODE_LENGTH (code) == 4);
3153 t = make_node_stat (code PASS_MEM_STAT);
3154 TREE_TYPE (t) = tt;
3156 side_effects = TREE_SIDE_EFFECTS (t);
3158 PROCESS_ARG(0);
3159 PROCESS_ARG(1);
3160 PROCESS_ARG(2);
3161 PROCESS_ARG(3);
3163 TREE_SIDE_EFFECTS (t) = side_effects;
3164 TREE_THIS_VOLATILE (t)
3165 = (TREE_CODE_CLASS (code) == tcc_reference
3166 && arg0 && TREE_THIS_VOLATILE (arg0));
3168 return t;
3171 tree
3172 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3173 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
3175 bool constant, read_only, side_effects, invariant;
3176 tree t;
3178 gcc_assert (TREE_CODE_LENGTH (code) == 5);
3180 t = make_node_stat (code PASS_MEM_STAT);
3181 TREE_TYPE (t) = tt;
3183 side_effects = TREE_SIDE_EFFECTS (t);
3185 PROCESS_ARG(0);
3186 PROCESS_ARG(1);
3187 PROCESS_ARG(2);
3188 PROCESS_ARG(3);
3189 PROCESS_ARG(4);
3191 TREE_SIDE_EFFECTS (t) = side_effects;
3192 TREE_THIS_VOLATILE (t)
3193 = (TREE_CODE_CLASS (code) == tcc_reference
3194 && arg0 && TREE_THIS_VOLATILE (arg0));
3196 return t;
3199 tree
3200 build7_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3201 tree arg2, tree arg3, tree arg4, tree arg5,
3202 tree arg6 MEM_STAT_DECL)
3204 bool constant, read_only, side_effects, invariant;
3205 tree t;
3207 gcc_assert (code == TARGET_MEM_REF);
3209 t = make_node_stat (code PASS_MEM_STAT);
3210 TREE_TYPE (t) = tt;
3212 side_effects = TREE_SIDE_EFFECTS (t);
3214 PROCESS_ARG(0);
3215 PROCESS_ARG(1);
3216 PROCESS_ARG(2);
3217 PROCESS_ARG(3);
3218 PROCESS_ARG(4);
3219 PROCESS_ARG(5);
3220 PROCESS_ARG(6);
3222 TREE_SIDE_EFFECTS (t) = side_effects;
3223 TREE_THIS_VOLATILE (t) = 0;
3225 return t;
3228 /* Similar except don't specify the TREE_TYPE
3229 and leave the TREE_SIDE_EFFECTS as 0.
3230 It is permissible for arguments to be null,
3231 or even garbage if their values do not matter. */
3233 tree
3234 build_nt (enum tree_code code, ...)
3236 tree t;
3237 int length;
3238 int i;
3239 va_list p;
3241 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3243 va_start (p, code);
3245 t = make_node (code);
3246 length = TREE_CODE_LENGTH (code);
3248 for (i = 0; i < length; i++)
3249 TREE_OPERAND (t, i) = va_arg (p, tree);
3251 va_end (p);
3252 return t;
3255 /* Similar to build_nt, but for creating a CALL_EXPR object with
3256 ARGLIST passed as a list. */
3258 tree
3259 build_nt_call_list (tree fn, tree arglist)
3261 tree t;
3262 int i;
3264 t = build_vl_exp (CALL_EXPR, list_length (arglist) + 3);
3265 CALL_EXPR_FN (t) = fn;
3266 CALL_EXPR_STATIC_CHAIN (t) = NULL_TREE;
3267 for (i = 0; arglist; arglist = TREE_CHAIN (arglist), i++)
3268 CALL_EXPR_ARG (t, i) = TREE_VALUE (arglist);
3269 return t;
3272 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3273 We do NOT enter this node in any sort of symbol table.
3275 layout_decl is used to set up the decl's storage layout.
3276 Other slots are initialized to 0 or null pointers. */
3278 tree
3279 build_decl_stat (enum tree_code code, tree name, tree type MEM_STAT_DECL)
3281 tree t;
3283 t = make_node_stat (code PASS_MEM_STAT);
3285 /* if (type == error_mark_node)
3286 type = integer_type_node; */
3287 /* That is not done, deliberately, so that having error_mark_node
3288 as the type can suppress useless errors in the use of this variable. */
3290 DECL_NAME (t) = name;
3291 TREE_TYPE (t) = type;
3293 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3294 layout_decl (t, 0);
3295 else if (code == FUNCTION_DECL)
3296 DECL_MODE (t) = FUNCTION_MODE;
3298 return t;
3301 /* Builds and returns function declaration with NAME and TYPE. */
3303 tree
3304 build_fn_decl (const char *name, tree type)
3306 tree id = get_identifier (name);
3307 tree decl = build_decl (FUNCTION_DECL, id, type);
3309 DECL_EXTERNAL (decl) = 1;
3310 TREE_PUBLIC (decl) = 1;
3311 DECL_ARTIFICIAL (decl) = 1;
3312 TREE_NOTHROW (decl) = 1;
3314 return decl;
3318 /* BLOCK nodes are used to represent the structure of binding contours
3319 and declarations, once those contours have been exited and their contents
3320 compiled. This information is used for outputting debugging info. */
3322 tree
3323 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
3325 tree block = make_node (BLOCK);
3327 BLOCK_VARS (block) = vars;
3328 BLOCK_SUBBLOCKS (block) = subblocks;
3329 BLOCK_SUPERCONTEXT (block) = supercontext;
3330 BLOCK_CHAIN (block) = chain;
3331 return block;
3334 #if 1 /* ! defined(USE_MAPPED_LOCATION) */
3335 /* ??? gengtype doesn't handle conditionals */
3336 static GTY(()) source_locus last_annotated_node;
3337 #endif
3339 #ifdef USE_MAPPED_LOCATION
3341 expanded_location
3342 expand_location (source_location loc)
3344 expanded_location xloc;
3345 if (loc == 0)
3347 xloc.file = NULL;
3348 xloc.line = 0;
3349 xloc.column = 0;
3351 else
3353 const struct line_map *map = linemap_lookup (&line_table, loc);
3354 xloc.file = map->to_file;
3355 xloc.line = SOURCE_LINE (map, loc);
3356 xloc.column = SOURCE_COLUMN (map, loc);
3358 return xloc;
3361 #else
3363 /* Record the exact location where an expression or an identifier were
3364 encountered. */
3366 void
3367 annotate_with_file_line (tree node, const char *file, int line)
3369 /* Roughly one percent of the calls to this function are to annotate
3370 a node with the same information already attached to that node!
3371 Just return instead of wasting memory. */
3372 if (EXPR_LOCUS (node)
3373 && EXPR_LINENO (node) == line
3374 && (EXPR_FILENAME (node) == file
3375 || !strcmp (EXPR_FILENAME (node), file)))
3377 last_annotated_node = EXPR_LOCUS (node);
3378 return;
3381 /* In heavily macroized code (such as GCC itself) this single
3382 entry cache can reduce the number of allocations by more
3383 than half. */
3384 if (last_annotated_node
3385 && last_annotated_node->line == line
3386 && (last_annotated_node->file == file
3387 || !strcmp (last_annotated_node->file, file)))
3389 SET_EXPR_LOCUS (node, last_annotated_node);
3390 return;
3393 SET_EXPR_LOCUS (node, ggc_alloc (sizeof (location_t)));
3394 EXPR_LINENO (node) = line;
3395 EXPR_FILENAME (node) = file;
3396 last_annotated_node = EXPR_LOCUS (node);
3399 void
3400 annotate_with_locus (tree node, location_t locus)
3402 annotate_with_file_line (node, locus.file, locus.line);
3404 #endif
3406 /* Source location accessor functions. */
3409 /* The source location of this expression. Non-tree_exp nodes such as
3410 decls and constants can be shared among multiple locations, so
3411 return nothing. */
3412 location_t
3413 expr_location (tree node)
3415 #ifdef USE_MAPPED_LOCATION
3416 if (GIMPLE_STMT_P (node))
3417 return GIMPLE_STMT_LOCUS (node);
3418 return EXPR_P (node) ? node->exp.locus : UNKNOWN_LOCATION;
3419 #else
3420 if (GIMPLE_STMT_P (node))
3421 return EXPR_HAS_LOCATION (node)
3422 ? *GIMPLE_STMT_LOCUS (node) : UNKNOWN_LOCATION;
3423 return EXPR_HAS_LOCATION (node) ? *node->exp.locus : UNKNOWN_LOCATION;
3424 #endif
3427 void
3428 set_expr_location (tree node, location_t locus)
3430 #ifdef USE_MAPPED_LOCATION
3431 if (GIMPLE_STMT_P (node))
3432 GIMPLE_STMT_LOCUS (node) = locus;
3433 else
3434 EXPR_CHECK (node)->exp.locus = locus;
3435 #else
3436 annotate_with_locus (node, locus);
3437 #endif
3440 bool
3441 expr_has_location (tree node)
3443 #ifdef USE_MAPPED_LOCATION
3444 return expr_location (node) != UNKNOWN_LOCATION;
3445 #else
3446 return expr_locus (node) != NULL;
3447 #endif
3450 #ifdef USE_MAPPED_LOCATION
3451 source_location *
3452 #else
3453 source_locus
3454 #endif
3455 expr_locus (tree node)
3457 #ifdef USE_MAPPED_LOCATION
3458 if (GIMPLE_STMT_P (node))
3459 return &GIMPLE_STMT_LOCUS (node);
3460 return EXPR_P (node) ? &node->exp.locus : (location_t *) NULL;
3461 #else
3462 if (GIMPLE_STMT_P (node))
3463 return GIMPLE_STMT_LOCUS (node);
3464 /* ?? The cast below was originally "(location_t *)" in the macro,
3465 but that makes no sense. ?? */
3466 return EXPR_P (node) ? node->exp.locus : (source_locus) NULL;
3467 #endif
3470 void
3471 set_expr_locus (tree node,
3472 #ifdef USE_MAPPED_LOCATION
3473 source_location *loc
3474 #else
3475 source_locus loc
3476 #endif
3479 #ifdef USE_MAPPED_LOCATION
3480 if (loc == NULL)
3482 if (GIMPLE_STMT_P (node))
3483 GIMPLE_STMT_LOCUS (node) = UNKNOWN_LOCATION;
3484 else
3485 EXPR_CHECK (node)->exp.locus = UNKNOWN_LOCATION;
3487 else
3489 if (GIMPLE_STMT_P (node))
3490 GIMPLE_STMT_LOCUS (node) = *loc;
3491 else
3492 EXPR_CHECK (node)->exp.locus = *loc;
3494 #else
3495 if (GIMPLE_STMT_P (node))
3496 GIMPLE_STMT_LOCUS (node) = loc;
3497 else
3498 EXPR_CHECK (node)->exp.locus = loc;
3499 #endif
3502 const char **
3503 expr_filename (tree node)
3505 #ifdef USE_MAPPED_LOCATION
3506 if (GIMPLE_STMT_P (node))
3507 return &LOCATION_FILE (GIMPLE_STMT_LOCUS (node));
3508 return &LOCATION_FILE (EXPR_CHECK (node)->exp.locus);
3509 #else
3510 if (GIMPLE_STMT_P (node))
3511 return &GIMPLE_STMT_LOCUS (node)->file;
3512 return &(EXPR_CHECK (node)->exp.locus->file);
3513 #endif
3516 int *
3517 expr_lineno (tree node)
3519 #ifdef USE_MAPPED_LOCATION
3520 if (GIMPLE_STMT_P (node))
3521 return &LOCATION_LINE (GIMPLE_STMT_LOCUS (node));
3522 return &LOCATION_LINE (EXPR_CHECK (node)->exp.locus);
3523 #else
3524 if (GIMPLE_STMT_P (node))
3525 return &GIMPLE_STMT_LOCUS (node)->line;
3526 return &EXPR_CHECK (node)->exp.locus->line;
3527 #endif
3530 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
3531 is ATTRIBUTE. */
3533 tree
3534 build_decl_attribute_variant (tree ddecl, tree attribute)
3536 DECL_ATTRIBUTES (ddecl) = attribute;
3537 return ddecl;
3540 /* Borrowed from hashtab.c iterative_hash implementation. */
3541 #define mix(a,b,c) \
3543 a -= b; a -= c; a ^= (c>>13); \
3544 b -= c; b -= a; b ^= (a<< 8); \
3545 c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
3546 a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
3547 b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
3548 c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
3549 a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
3550 b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
3551 c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
3555 /* Produce good hash value combining VAL and VAL2. */
3556 static inline hashval_t
3557 iterative_hash_hashval_t (hashval_t val, hashval_t val2)
3559 /* the golden ratio; an arbitrary value. */
3560 hashval_t a = 0x9e3779b9;
3562 mix (a, val, val2);
3563 return val2;
3566 /* Produce good hash value combining PTR and VAL2. */
3567 static inline hashval_t
3568 iterative_hash_pointer (void *ptr, hashval_t val2)
3570 if (sizeof (ptr) == sizeof (hashval_t))
3571 return iterative_hash_hashval_t ((size_t) ptr, val2);
3572 else
3574 hashval_t a = (hashval_t) (size_t) ptr;
3575 /* Avoid warnings about shifting of more than the width of the type on
3576 hosts that won't execute this path. */
3577 int zero = 0;
3578 hashval_t b = (hashval_t) ((size_t) ptr >> (sizeof (hashval_t) * 8 + zero));
3579 mix (a, b, val2);
3580 return val2;
3584 /* Produce good hash value combining VAL and VAL2. */
3585 static inline hashval_t
3586 iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
3588 if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
3589 return iterative_hash_hashval_t (val, val2);
3590 else
3592 hashval_t a = (hashval_t) val;
3593 /* Avoid warnings about shifting of more than the width of the type on
3594 hosts that won't execute this path. */
3595 int zero = 0;
3596 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
3597 mix (a, b, val2);
3598 if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
3600 hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
3601 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
3602 mix (a, b, val2);
3604 return val2;
3608 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3609 is ATTRIBUTE and its qualifiers are QUALS.
3611 Record such modified types already made so we don't make duplicates. */
3613 static tree
3614 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
3616 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3618 hashval_t hashcode = 0;
3619 tree ntype;
3620 enum tree_code code = TREE_CODE (ttype);
3622 ntype = copy_node (ttype);
3624 TYPE_POINTER_TO (ntype) = 0;
3625 TYPE_REFERENCE_TO (ntype) = 0;
3626 TYPE_ATTRIBUTES (ntype) = attribute;
3628 if (TYPE_STRUCTURAL_EQUALITY_P (ttype))
3629 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
3630 else
3631 TYPE_CANONICAL (ntype)
3632 = build_qualified_type (TYPE_CANONICAL (ttype), quals);
3634 /* Create a new main variant of TYPE. */
3635 TYPE_MAIN_VARIANT (ntype) = ntype;
3636 TYPE_NEXT_VARIANT (ntype) = 0;
3637 set_type_quals (ntype, TYPE_UNQUALIFIED);
3639 hashcode = iterative_hash_object (code, hashcode);
3640 if (TREE_TYPE (ntype))
3641 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
3642 hashcode);
3643 hashcode = attribute_hash_list (attribute, hashcode);
3645 switch (TREE_CODE (ntype))
3647 case FUNCTION_TYPE:
3648 hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
3649 break;
3650 case ARRAY_TYPE:
3651 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
3652 hashcode);
3653 break;
3654 case INTEGER_TYPE:
3655 hashcode = iterative_hash_object
3656 (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
3657 hashcode = iterative_hash_object
3658 (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
3659 break;
3660 case REAL_TYPE:
3662 unsigned int precision = TYPE_PRECISION (ntype);
3663 hashcode = iterative_hash_object (precision, hashcode);
3665 break;
3666 default:
3667 break;
3670 ntype = type_hash_canon (hashcode, ntype);
3672 /* If the target-dependent attributes make NTYPE different from
3673 its canonical type, we will need to use structural equality
3674 checks for this qualified type. */
3675 if (!targetm.comp_type_attributes (ntype, ttype))
3676 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
3678 ttype = build_qualified_type (ntype, quals);
3681 return ttype;
3685 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3686 is ATTRIBUTE.
3688 Record such modified types already made so we don't make duplicates. */
3690 tree
3691 build_type_attribute_variant (tree ttype, tree attribute)
3693 return build_type_attribute_qual_variant (ttype, attribute,
3694 TYPE_QUALS (ttype));
3697 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3698 or zero if not.
3700 We try both `text' and `__text__', ATTR may be either one. */
3701 /* ??? It might be a reasonable simplification to require ATTR to be only
3702 `text'. One might then also require attribute lists to be stored in
3703 their canonicalized form. */
3705 static int
3706 is_attribute_with_length_p (const char *attr, int attr_len, tree ident)
3708 int ident_len;
3709 const char *p;
3711 if (TREE_CODE (ident) != IDENTIFIER_NODE)
3712 return 0;
3714 p = IDENTIFIER_POINTER (ident);
3715 ident_len = IDENTIFIER_LENGTH (ident);
3717 if (ident_len == attr_len
3718 && strcmp (attr, p) == 0)
3719 return 1;
3721 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
3722 if (attr[0] == '_')
3724 gcc_assert (attr[1] == '_');
3725 gcc_assert (attr[attr_len - 2] == '_');
3726 gcc_assert (attr[attr_len - 1] == '_');
3727 if (ident_len == attr_len - 4
3728 && strncmp (attr + 2, p, attr_len - 4) == 0)
3729 return 1;
3731 else
3733 if (ident_len == attr_len + 4
3734 && p[0] == '_' && p[1] == '_'
3735 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3736 && strncmp (attr, p + 2, attr_len) == 0)
3737 return 1;
3740 return 0;
3743 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3744 or zero if not.
3746 We try both `text' and `__text__', ATTR may be either one. */
3749 is_attribute_p (const char *attr, tree ident)
3751 return is_attribute_with_length_p (attr, strlen (attr), ident);
3754 /* Given an attribute name and a list of attributes, return a pointer to the
3755 attribute's list element if the attribute is part of the list, or NULL_TREE
3756 if not found. If the attribute appears more than once, this only
3757 returns the first occurrence; the TREE_CHAIN of the return value should
3758 be passed back in if further occurrences are wanted. */
3760 tree
3761 lookup_attribute (const char *attr_name, tree list)
3763 tree l;
3764 size_t attr_len = strlen (attr_name);
3766 for (l = list; l; l = TREE_CHAIN (l))
3768 gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
3769 if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
3770 return l;
3773 return NULL_TREE;
3776 /* Remove any instances of attribute ATTR_NAME in LIST and return the
3777 modified list. */
3779 tree
3780 remove_attribute (const char *attr_name, tree list)
3782 tree *p;
3783 size_t attr_len = strlen (attr_name);
3785 for (p = &list; *p; )
3787 tree l = *p;
3788 gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
3789 if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
3790 *p = TREE_CHAIN (l);
3791 else
3792 p = &TREE_CHAIN (l);
3795 return list;
3798 /* Return an attribute list that is the union of a1 and a2. */
3800 tree
3801 merge_attributes (tree a1, tree a2)
3803 tree attributes;
3805 /* Either one unset? Take the set one. */
3807 if ((attributes = a1) == 0)
3808 attributes = a2;
3810 /* One that completely contains the other? Take it. */
3812 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3814 if (attribute_list_contained (a2, a1))
3815 attributes = a2;
3816 else
3818 /* Pick the longest list, and hang on the other list. */
3820 if (list_length (a1) < list_length (a2))
3821 attributes = a2, a2 = a1;
3823 for (; a2 != 0; a2 = TREE_CHAIN (a2))
3825 tree a;
3826 for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3827 attributes);
3828 a != NULL_TREE;
3829 a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3830 TREE_CHAIN (a)))
3832 if (TREE_VALUE (a) != NULL
3833 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
3834 && TREE_VALUE (a2) != NULL
3835 && TREE_CODE (TREE_VALUE (a2)) == TREE_LIST)
3837 if (simple_cst_list_equal (TREE_VALUE (a),
3838 TREE_VALUE (a2)) == 1)
3839 break;
3841 else if (simple_cst_equal (TREE_VALUE (a),
3842 TREE_VALUE (a2)) == 1)
3843 break;
3845 if (a == NULL_TREE)
3847 a1 = copy_node (a2);
3848 TREE_CHAIN (a1) = attributes;
3849 attributes = a1;
3854 return attributes;
3857 /* Given types T1 and T2, merge their attributes and return
3858 the result. */
3860 tree
3861 merge_type_attributes (tree t1, tree t2)
3863 return merge_attributes (TYPE_ATTRIBUTES (t1),
3864 TYPE_ATTRIBUTES (t2));
3867 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3868 the result. */
3870 tree
3871 merge_decl_attributes (tree olddecl, tree newdecl)
3873 return merge_attributes (DECL_ATTRIBUTES (olddecl),
3874 DECL_ATTRIBUTES (newdecl));
3877 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
3879 /* Specialization of merge_decl_attributes for various Windows targets.
3881 This handles the following situation:
3883 __declspec (dllimport) int foo;
3884 int foo;
3886 The second instance of `foo' nullifies the dllimport. */
3888 tree
3889 merge_dllimport_decl_attributes (tree old, tree new)
3891 tree a;
3892 int delete_dllimport_p = 1;
3894 /* What we need to do here is remove from `old' dllimport if it doesn't
3895 appear in `new'. dllimport behaves like extern: if a declaration is
3896 marked dllimport and a definition appears later, then the object
3897 is not dllimport'd. We also remove a `new' dllimport if the old list
3898 contains dllexport: dllexport always overrides dllimport, regardless
3899 of the order of declaration. */
3900 if (!VAR_OR_FUNCTION_DECL_P (new))
3901 delete_dllimport_p = 0;
3902 else if (DECL_DLLIMPORT_P (new)
3903 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
3905 DECL_DLLIMPORT_P (new) = 0;
3906 warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
3907 "dllimport ignored", new);
3909 else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new))
3911 /* Warn about overriding a symbol that has already been used. eg:
3912 extern int __attribute__ ((dllimport)) foo;
3913 int* bar () {return &foo;}
3914 int foo;
3916 if (TREE_USED (old))
3918 warning (0, "%q+D redeclared without dllimport attribute "
3919 "after being referenced with dll linkage", new);
3920 /* If we have used a variable's address with dllimport linkage,
3921 keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
3922 decl may already have had TREE_INVARIANT and TREE_CONSTANT
3923 computed.
3924 We still remove the attribute so that assembler code refers
3925 to '&foo rather than '_imp__foo'. */
3926 if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
3927 DECL_DLLIMPORT_P (new) = 1;
3930 /* Let an inline definition silently override the external reference,
3931 but otherwise warn about attribute inconsistency. */
3932 else if (TREE_CODE (new) == VAR_DECL
3933 || !DECL_DECLARED_INLINE_P (new))
3934 warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
3935 "previous dllimport ignored", new);
3937 else
3938 delete_dllimport_p = 0;
3940 a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new));
3942 if (delete_dllimport_p)
3944 tree prev, t;
3945 const size_t attr_len = strlen ("dllimport");
3947 /* Scan the list for dllimport and delete it. */
3948 for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
3950 if (is_attribute_with_length_p ("dllimport", attr_len,
3951 TREE_PURPOSE (t)))
3953 if (prev == NULL_TREE)
3954 a = TREE_CHAIN (a);
3955 else
3956 TREE_CHAIN (prev) = TREE_CHAIN (t);
3957 break;
3962 return a;
3965 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
3966 struct attribute_spec.handler. */
3968 tree
3969 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
3970 bool *no_add_attrs)
3972 tree node = *pnode;
3974 /* These attributes may apply to structure and union types being created,
3975 but otherwise should pass to the declaration involved. */
3976 if (!DECL_P (node))
3978 if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
3979 | (int) ATTR_FLAG_ARRAY_NEXT))
3981 *no_add_attrs = true;
3982 return tree_cons (name, args, NULL_TREE);
3984 if (TREE_CODE (node) != RECORD_TYPE && TREE_CODE (node) != UNION_TYPE)
3986 warning (OPT_Wattributes, "%qs attribute ignored",
3987 IDENTIFIER_POINTER (name));
3988 *no_add_attrs = true;
3991 return NULL_TREE;
3994 if (TREE_CODE (node) != FUNCTION_DECL
3995 && TREE_CODE (node) != VAR_DECL)
3997 *no_add_attrs = true;
3998 warning (OPT_Wattributes, "%qs attribute ignored",
3999 IDENTIFIER_POINTER (name));
4000 return NULL_TREE;
4003 /* Report error on dllimport ambiguities seen now before they cause
4004 any damage. */
4005 else if (is_attribute_p ("dllimport", name))
4007 /* Honor any target-specific overrides. */
4008 if (!targetm.valid_dllimport_attribute_p (node))
4009 *no_add_attrs = true;
4011 else if (TREE_CODE (node) == FUNCTION_DECL
4012 && DECL_DECLARED_INLINE_P (node))
4014 warning (OPT_Wattributes, "inline function %q+D declared as "
4015 " dllimport: attribute ignored", node);
4016 *no_add_attrs = true;
4018 /* Like MS, treat definition of dllimported variables and
4019 non-inlined functions on declaration as syntax errors. */
4020 else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
4022 error ("function %q+D definition is marked dllimport", node);
4023 *no_add_attrs = true;
4026 else if (TREE_CODE (node) == VAR_DECL)
4028 if (DECL_INITIAL (node))
4030 error ("variable %q+D definition is marked dllimport",
4031 node);
4032 *no_add_attrs = true;
4035 /* `extern' needn't be specified with dllimport.
4036 Specify `extern' now and hope for the best. Sigh. */
4037 DECL_EXTERNAL (node) = 1;
4038 /* Also, implicitly give dllimport'd variables declared within
4039 a function global scope, unless declared static. */
4040 if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
4041 TREE_PUBLIC (node) = 1;
4044 if (*no_add_attrs == false)
4045 DECL_DLLIMPORT_P (node) = 1;
4048 /* Report error if symbol is not accessible at global scope. */
4049 if (!TREE_PUBLIC (node)
4050 && (TREE_CODE (node) == VAR_DECL
4051 || TREE_CODE (node) == FUNCTION_DECL))
4053 error ("external linkage required for symbol %q+D because of "
4054 "%qs attribute", node, IDENTIFIER_POINTER (name));
4055 *no_add_attrs = true;
4058 return NULL_TREE;
4061 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
4063 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
4064 of the various TYPE_QUAL values. */
4066 static void
4067 set_type_quals (tree type, int type_quals)
4069 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
4070 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
4071 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
4074 /* Returns true iff cand is equivalent to base with type_quals. */
4076 bool
4077 check_qualified_type (tree cand, tree base, int type_quals)
4079 return (TYPE_QUALS (cand) == type_quals
4080 && TYPE_NAME (cand) == TYPE_NAME (base)
4081 /* Apparently this is needed for Objective-C. */
4082 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
4083 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
4084 TYPE_ATTRIBUTES (base)));
4087 /* Return a version of the TYPE, qualified as indicated by the
4088 TYPE_QUALS, if one exists. If no qualified version exists yet,
4089 return NULL_TREE. */
4091 tree
4092 get_qualified_type (tree type, int type_quals)
4094 tree t;
4096 if (TYPE_QUALS (type) == type_quals)
4097 return type;
4099 /* Search the chain of variants to see if there is already one there just
4100 like the one we need to have. If so, use that existing one. We must
4101 preserve the TYPE_NAME, since there is code that depends on this. */
4102 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
4103 if (check_qualified_type (t, type, type_quals))
4104 return t;
4106 return NULL_TREE;
4109 /* Like get_qualified_type, but creates the type if it does not
4110 exist. This function never returns NULL_TREE. */
4112 tree
4113 build_qualified_type (tree type, int type_quals)
4115 tree t;
4117 /* See if we already have the appropriate qualified variant. */
4118 t = get_qualified_type (type, type_quals);
4120 /* If not, build it. */
4121 if (!t)
4123 t = build_variant_type_copy (type);
4124 set_type_quals (t, type_quals);
4126 if (TYPE_STRUCTURAL_EQUALITY_P (type))
4127 /* Propagate structural equality. */
4128 SET_TYPE_STRUCTURAL_EQUALITY (t);
4129 else if (TYPE_CANONICAL (type) != type)
4130 /* Build the underlying canonical type, since it is different
4131 from TYPE. */
4132 TYPE_CANONICAL (t) = build_qualified_type (TYPE_CANONICAL (type),
4133 type_quals);
4134 else
4135 /* T is its own canonical type. */
4136 TYPE_CANONICAL (t) = t;
4140 return t;
4143 /* Create a new distinct copy of TYPE. The new type is made its own
4144 MAIN_VARIANT. If TYPE requires structural equality checks, the
4145 resulting type requires structural equality checks; otherwise, its
4146 TYPE_CANONICAL points to itself. */
4148 tree
4149 build_distinct_type_copy (tree type)
4151 tree t = copy_node (type);
4153 TYPE_POINTER_TO (t) = 0;
4154 TYPE_REFERENCE_TO (t) = 0;
4156 /* Set the canonical type either to a new equivalence class, or
4157 propagate the need for structural equality checks. */
4158 if (TYPE_STRUCTURAL_EQUALITY_P (type))
4159 SET_TYPE_STRUCTURAL_EQUALITY (t);
4160 else
4161 TYPE_CANONICAL (t) = t;
4163 /* Make it its own variant. */
4164 TYPE_MAIN_VARIANT (t) = t;
4165 TYPE_NEXT_VARIANT (t) = 0;
4167 return t;
4170 /* Create a new variant of TYPE, equivalent but distinct. This is so
4171 the caller can modify it. TYPE_CANONICAL for the return type will
4172 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
4173 are considered equal by the language itself (or that both types
4174 require structural equality checks). */
4176 tree
4177 build_variant_type_copy (tree type)
4179 tree t, m = TYPE_MAIN_VARIANT (type);
4181 t = build_distinct_type_copy (type);
4183 /* Since we're building a variant, assume that it is a non-semantic
4184 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
4185 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
4187 /* Add the new type to the chain of variants of TYPE. */
4188 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
4189 TYPE_NEXT_VARIANT (m) = t;
4190 TYPE_MAIN_VARIANT (t) = m;
4192 return t;
4195 /* Return true if the from tree in both tree maps are equal. */
4198 tree_map_eq (const void *va, const void *vb)
4200 const struct tree_map *a = va, *b = vb;
4201 return (a->from == b->from);
4204 /* Hash a from tree in a tree_map. */
4206 unsigned int
4207 tree_map_hash (const void *item)
4209 return (((const struct tree_map *) item)->hash);
4212 /* Return true if this tree map structure is marked for garbage collection
4213 purposes. We simply return true if the from tree is marked, so that this
4214 structure goes away when the from tree goes away. */
4217 tree_map_marked_p (const void *p)
4219 tree from = ((struct tree_map *) p)->from;
4221 return ggc_marked_p (from);
4224 /* Return true if the trees in the tree_int_map *'s VA and VB are equal. */
4227 tree_int_map_eq (const void *va, const void *vb)
4229 const struct tree_int_map *a = va, *b = vb;
4230 return (a->from == b->from);
4233 /* Hash a from tree in the tree_int_map * ITEM. */
4235 unsigned int
4236 tree_int_map_hash (const void *item)
4238 return htab_hash_pointer (((const struct tree_int_map *)item)->from);
4241 /* Return true if this tree int map structure is marked for garbage collection
4242 purposes. We simply return true if the from tree_int_map *P's from tree is marked, so that this
4243 structure goes away when the from tree goes away. */
4246 tree_int_map_marked_p (const void *p)
4248 tree from = ((struct tree_int_map *) p)->from;
4250 return ggc_marked_p (from);
4252 /* Lookup an init priority for FROM, and return it if we find one. */
4254 unsigned short
4255 decl_init_priority_lookup (tree from)
4257 struct tree_int_map *h, in;
4258 in.from = from;
4260 h = htab_find_with_hash (init_priority_for_decl,
4261 &in, htab_hash_pointer (from));
4262 if (h)
4263 return h->to;
4264 return 0;
4267 /* Insert a mapping FROM->TO in the init priority hashtable. */
4269 void
4270 decl_init_priority_insert (tree from, unsigned short to)
4272 struct tree_int_map *h;
4273 void **loc;
4275 h = ggc_alloc (sizeof (struct tree_int_map));
4276 h->from = from;
4277 h->to = to;
4278 loc = htab_find_slot_with_hash (init_priority_for_decl, h,
4279 htab_hash_pointer (from), INSERT);
4280 *(struct tree_int_map **) loc = h;
4283 /* Look up a restrict qualified base decl for FROM. */
4285 tree
4286 decl_restrict_base_lookup (tree from)
4288 struct tree_map *h;
4289 struct tree_map in;
4291 in.from = from;
4292 h = htab_find_with_hash (restrict_base_for_decl, &in,
4293 htab_hash_pointer (from));
4294 return h ? h->to : NULL_TREE;
4297 /* Record the restrict qualified base TO for FROM. */
4299 void
4300 decl_restrict_base_insert (tree from, tree to)
4302 struct tree_map *h;
4303 void **loc;
4305 h = ggc_alloc (sizeof (struct tree_map));
4306 h->hash = htab_hash_pointer (from);
4307 h->from = from;
4308 h->to = to;
4309 loc = htab_find_slot_with_hash (restrict_base_for_decl, h, h->hash, INSERT);
4310 *(struct tree_map **) loc = h;
4313 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
4315 static void
4316 print_debug_expr_statistics (void)
4318 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n",
4319 (long) htab_size (debug_expr_for_decl),
4320 (long) htab_elements (debug_expr_for_decl),
4321 htab_collisions (debug_expr_for_decl));
4324 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
4326 static void
4327 print_value_expr_statistics (void)
4329 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n",
4330 (long) htab_size (value_expr_for_decl),
4331 (long) htab_elements (value_expr_for_decl),
4332 htab_collisions (value_expr_for_decl));
4335 /* Print out statistics for the RESTRICT_BASE_FOR_DECL hash table, but
4336 don't print anything if the table is empty. */
4338 static void
4339 print_restrict_base_statistics (void)
4341 if (htab_elements (restrict_base_for_decl) != 0)
4342 fprintf (stderr,
4343 "RESTRICT_BASE hash: size %ld, %ld elements, %f collisions\n",
4344 (long) htab_size (restrict_base_for_decl),
4345 (long) htab_elements (restrict_base_for_decl),
4346 htab_collisions (restrict_base_for_decl));
4349 /* Lookup a debug expression for FROM, and return it if we find one. */
4351 tree
4352 decl_debug_expr_lookup (tree from)
4354 struct tree_map *h, in;
4355 in.from = from;
4357 h = htab_find_with_hash (debug_expr_for_decl, &in, htab_hash_pointer (from));
4358 if (h)
4359 return h->to;
4360 return NULL_TREE;
4363 /* Insert a mapping FROM->TO in the debug expression hashtable. */
4365 void
4366 decl_debug_expr_insert (tree from, tree to)
4368 struct tree_map *h;
4369 void **loc;
4371 h = ggc_alloc (sizeof (struct tree_map));
4372 h->hash = htab_hash_pointer (from);
4373 h->from = from;
4374 h->to = to;
4375 loc = htab_find_slot_with_hash (debug_expr_for_decl, h, h->hash, INSERT);
4376 *(struct tree_map **) loc = h;
4379 /* Lookup a value expression for FROM, and return it if we find one. */
4381 tree
4382 decl_value_expr_lookup (tree from)
4384 struct tree_map *h, in;
4385 in.from = from;
4387 h = htab_find_with_hash (value_expr_for_decl, &in, htab_hash_pointer (from));
4388 if (h)
4389 return h->to;
4390 return NULL_TREE;
4393 /* Insert a mapping FROM->TO in the value expression hashtable. */
4395 void
4396 decl_value_expr_insert (tree from, tree to)
4398 struct tree_map *h;
4399 void **loc;
4401 h = ggc_alloc (sizeof (struct tree_map));
4402 h->hash = htab_hash_pointer (from);
4403 h->from = from;
4404 h->to = to;
4405 loc = htab_find_slot_with_hash (value_expr_for_decl, h, h->hash, INSERT);
4406 *(struct tree_map **) loc = h;
4409 /* Hashing of types so that we don't make duplicates.
4410 The entry point is `type_hash_canon'. */
4412 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
4413 with types in the TREE_VALUE slots), by adding the hash codes
4414 of the individual types. */
4416 unsigned int
4417 type_hash_list (tree list, hashval_t hashcode)
4419 tree tail;
4421 for (tail = list; tail; tail = TREE_CHAIN (tail))
4422 if (TREE_VALUE (tail) != error_mark_node)
4423 hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
4424 hashcode);
4426 return hashcode;
4429 /* These are the Hashtable callback functions. */
4431 /* Returns true iff the types are equivalent. */
4433 static int
4434 type_hash_eq (const void *va, const void *vb)
4436 const struct type_hash *a = va, *b = vb;
4438 /* First test the things that are the same for all types. */
4439 if (a->hash != b->hash
4440 || TREE_CODE (a->type) != TREE_CODE (b->type)
4441 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
4442 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
4443 TYPE_ATTRIBUTES (b->type))
4444 || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
4445 || TYPE_MODE (a->type) != TYPE_MODE (b->type))
4446 return 0;
4448 switch (TREE_CODE (a->type))
4450 case VOID_TYPE:
4451 case COMPLEX_TYPE:
4452 case POINTER_TYPE:
4453 case REFERENCE_TYPE:
4454 return 1;
4456 case VECTOR_TYPE:
4457 return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
4459 case ENUMERAL_TYPE:
4460 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
4461 && !(TYPE_VALUES (a->type)
4462 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
4463 && TYPE_VALUES (b->type)
4464 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
4465 && type_list_equal (TYPE_VALUES (a->type),
4466 TYPE_VALUES (b->type))))
4467 return 0;
4469 /* ... fall through ... */
4471 case INTEGER_TYPE:
4472 case REAL_TYPE:
4473 case BOOLEAN_TYPE:
4474 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
4475 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
4476 TYPE_MAX_VALUE (b->type)))
4477 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
4478 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
4479 TYPE_MIN_VALUE (b->type))));
4481 case OFFSET_TYPE:
4482 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
4484 case METHOD_TYPE:
4485 return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
4486 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
4487 || (TYPE_ARG_TYPES (a->type)
4488 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
4489 && TYPE_ARG_TYPES (b->type)
4490 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
4491 && type_list_equal (TYPE_ARG_TYPES (a->type),
4492 TYPE_ARG_TYPES (b->type)))));
4494 case ARRAY_TYPE:
4495 return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
4497 case RECORD_TYPE:
4498 case UNION_TYPE:
4499 case QUAL_UNION_TYPE:
4500 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
4501 || (TYPE_FIELDS (a->type)
4502 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
4503 && TYPE_FIELDS (b->type)
4504 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
4505 && type_list_equal (TYPE_FIELDS (a->type),
4506 TYPE_FIELDS (b->type))));
4508 case FUNCTION_TYPE:
4509 return (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
4510 || (TYPE_ARG_TYPES (a->type)
4511 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
4512 && TYPE_ARG_TYPES (b->type)
4513 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
4514 && type_list_equal (TYPE_ARG_TYPES (a->type),
4515 TYPE_ARG_TYPES (b->type))));
4517 default:
4518 return 0;
4522 /* Return the cached hash value. */
4524 static hashval_t
4525 type_hash_hash (const void *item)
4527 return ((const struct type_hash *) item)->hash;
4530 /* Look in the type hash table for a type isomorphic to TYPE.
4531 If one is found, return it. Otherwise return 0. */
4533 tree
4534 type_hash_lookup (hashval_t hashcode, tree type)
4536 struct type_hash *h, in;
4538 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
4539 must call that routine before comparing TYPE_ALIGNs. */
4540 layout_type (type);
4542 in.hash = hashcode;
4543 in.type = type;
4545 h = htab_find_with_hash (type_hash_table, &in, hashcode);
4546 if (h)
4547 return h->type;
4548 return NULL_TREE;
4551 /* Add an entry to the type-hash-table
4552 for a type TYPE whose hash code is HASHCODE. */
4554 void
4555 type_hash_add (hashval_t hashcode, tree type)
4557 struct type_hash *h;
4558 void **loc;
4560 h = ggc_alloc (sizeof (struct type_hash));
4561 h->hash = hashcode;
4562 h->type = type;
4563 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
4564 *(struct type_hash **) loc = h;
4567 /* Given TYPE, and HASHCODE its hash code, return the canonical
4568 object for an identical type if one already exists.
4569 Otherwise, return TYPE, and record it as the canonical object.
4571 To use this function, first create a type of the sort you want.
4572 Then compute its hash code from the fields of the type that
4573 make it different from other similar types.
4574 Then call this function and use the value. */
4576 tree
4577 type_hash_canon (unsigned int hashcode, tree type)
4579 tree t1;
4581 /* The hash table only contains main variants, so ensure that's what we're
4582 being passed. */
4583 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
4585 if (!lang_hooks.types.hash_types)
4586 return type;
4588 /* See if the type is in the hash table already. If so, return it.
4589 Otherwise, add the type. */
4590 t1 = type_hash_lookup (hashcode, type);
4591 if (t1 != 0)
4593 #ifdef GATHER_STATISTICS
4594 tree_node_counts[(int) t_kind]--;
4595 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
4596 #endif
4597 return t1;
4599 else
4601 type_hash_add (hashcode, type);
4602 return type;
4606 /* See if the data pointed to by the type hash table is marked. We consider
4607 it marked if the type is marked or if a debug type number or symbol
4608 table entry has been made for the type. This reduces the amount of
4609 debugging output and eliminates that dependency of the debug output on
4610 the number of garbage collections. */
4612 static int
4613 type_hash_marked_p (const void *p)
4615 tree type = ((struct type_hash *) p)->type;
4617 return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
4620 static void
4621 print_type_hash_statistics (void)
4623 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
4624 (long) htab_size (type_hash_table),
4625 (long) htab_elements (type_hash_table),
4626 htab_collisions (type_hash_table));
4629 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
4630 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
4631 by adding the hash codes of the individual attributes. */
4633 unsigned int
4634 attribute_hash_list (tree list, hashval_t hashcode)
4636 tree tail;
4638 for (tail = list; tail; tail = TREE_CHAIN (tail))
4639 /* ??? Do we want to add in TREE_VALUE too? */
4640 hashcode = iterative_hash_object
4641 (IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
4642 return hashcode;
4645 /* Given two lists of attributes, return true if list l2 is
4646 equivalent to l1. */
4649 attribute_list_equal (tree l1, tree l2)
4651 return attribute_list_contained (l1, l2)
4652 && attribute_list_contained (l2, l1);
4655 /* Given two lists of attributes, return true if list L2 is
4656 completely contained within L1. */
4657 /* ??? This would be faster if attribute names were stored in a canonicalized
4658 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
4659 must be used to show these elements are equivalent (which they are). */
4660 /* ??? It's not clear that attributes with arguments will always be handled
4661 correctly. */
4664 attribute_list_contained (tree l1, tree l2)
4666 tree t1, t2;
4668 /* First check the obvious, maybe the lists are identical. */
4669 if (l1 == l2)
4670 return 1;
4672 /* Maybe the lists are similar. */
4673 for (t1 = l1, t2 = l2;
4674 t1 != 0 && t2 != 0
4675 && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
4676 && TREE_VALUE (t1) == TREE_VALUE (t2);
4677 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
4679 /* Maybe the lists are equal. */
4680 if (t1 == 0 && t2 == 0)
4681 return 1;
4683 for (; t2 != 0; t2 = TREE_CHAIN (t2))
4685 tree attr;
4686 for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
4687 attr != NULL_TREE;
4688 attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
4689 TREE_CHAIN (attr)))
4691 if (TREE_VALUE (t2) != NULL
4692 && TREE_CODE (TREE_VALUE (t2)) == TREE_LIST
4693 && TREE_VALUE (attr) != NULL
4694 && TREE_CODE (TREE_VALUE (attr)) == TREE_LIST)
4696 if (simple_cst_list_equal (TREE_VALUE (t2),
4697 TREE_VALUE (attr)) == 1)
4698 break;
4700 else if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
4701 break;
4704 if (attr == 0)
4705 return 0;
4708 return 1;
4711 /* Given two lists of types
4712 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
4713 return 1 if the lists contain the same types in the same order.
4714 Also, the TREE_PURPOSEs must match. */
4717 type_list_equal (tree l1, tree l2)
4719 tree t1, t2;
4721 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
4722 if (TREE_VALUE (t1) != TREE_VALUE (t2)
4723 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
4724 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
4725 && (TREE_TYPE (TREE_PURPOSE (t1))
4726 == TREE_TYPE (TREE_PURPOSE (t2))))))
4727 return 0;
4729 return t1 == t2;
4732 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
4733 given by TYPE. If the argument list accepts variable arguments,
4734 then this function counts only the ordinary arguments. */
4737 type_num_arguments (tree type)
4739 int i = 0;
4740 tree t;
4742 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
4743 /* If the function does not take a variable number of arguments,
4744 the last element in the list will have type `void'. */
4745 if (VOID_TYPE_P (TREE_VALUE (t)))
4746 break;
4747 else
4748 ++i;
4750 return i;
4753 /* Nonzero if integer constants T1 and T2
4754 represent the same constant value. */
4757 tree_int_cst_equal (tree t1, tree t2)
4759 if (t1 == t2)
4760 return 1;
4762 if (t1 == 0 || t2 == 0)
4763 return 0;
4765 if (TREE_CODE (t1) == INTEGER_CST
4766 && TREE_CODE (t2) == INTEGER_CST
4767 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4768 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
4769 return 1;
4771 return 0;
4774 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
4775 The precise way of comparison depends on their data type. */
4778 tree_int_cst_lt (tree t1, tree t2)
4780 if (t1 == t2)
4781 return 0;
4783 if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
4785 int t1_sgn = tree_int_cst_sgn (t1);
4786 int t2_sgn = tree_int_cst_sgn (t2);
4788 if (t1_sgn < t2_sgn)
4789 return 1;
4790 else if (t1_sgn > t2_sgn)
4791 return 0;
4792 /* Otherwise, both are non-negative, so we compare them as
4793 unsigned just in case one of them would overflow a signed
4794 type. */
4796 else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
4797 return INT_CST_LT (t1, t2);
4799 return INT_CST_LT_UNSIGNED (t1, t2);
4802 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
4805 tree_int_cst_compare (tree t1, tree t2)
4807 if (tree_int_cst_lt (t1, t2))
4808 return -1;
4809 else if (tree_int_cst_lt (t2, t1))
4810 return 1;
4811 else
4812 return 0;
4815 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
4816 the host. If POS is zero, the value can be represented in a single
4817 HOST_WIDE_INT. If POS is nonzero, the value must be non-negative and can
4818 be represented in a single unsigned HOST_WIDE_INT. */
4821 host_integerp (tree t, int pos)
4823 return (TREE_CODE (t) == INTEGER_CST
4824 && ((TREE_INT_CST_HIGH (t) == 0
4825 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
4826 || (! pos && TREE_INT_CST_HIGH (t) == -1
4827 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
4828 && !TYPE_UNSIGNED (TREE_TYPE (t)))
4829 || (pos && TREE_INT_CST_HIGH (t) == 0)));
4832 /* Return the HOST_WIDE_INT least significant bits of T if it is an
4833 INTEGER_CST and there is no overflow. POS is nonzero if the result must
4834 be non-negative. We must be able to satisfy the above conditions. */
4836 HOST_WIDE_INT
4837 tree_low_cst (tree t, int pos)
4839 gcc_assert (host_integerp (t, pos));
4840 return TREE_INT_CST_LOW (t);
4843 /* Return the most significant bit of the integer constant T. */
4846 tree_int_cst_msb (tree t)
4848 int prec;
4849 HOST_WIDE_INT h;
4850 unsigned HOST_WIDE_INT l;
4852 /* Note that using TYPE_PRECISION here is wrong. We care about the
4853 actual bits, not the (arbitrary) range of the type. */
4854 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
4855 rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
4856 2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
4857 return (l & 1) == 1;
4860 /* Return an indication of the sign of the integer constant T.
4861 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
4862 Note that -1 will never be returned if T's type is unsigned. */
4865 tree_int_cst_sgn (tree t)
4867 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
4868 return 0;
4869 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
4870 return 1;
4871 else if (TREE_INT_CST_HIGH (t) < 0)
4872 return -1;
4873 else
4874 return 1;
4877 /* Compare two constructor-element-type constants. Return 1 if the lists
4878 are known to be equal; otherwise return 0. */
4881 simple_cst_list_equal (tree l1, tree l2)
4883 while (l1 != NULL_TREE && l2 != NULL_TREE)
4885 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4886 return 0;
4888 l1 = TREE_CHAIN (l1);
4889 l2 = TREE_CHAIN (l2);
4892 return l1 == l2;
4895 /* Return truthvalue of whether T1 is the same tree structure as T2.
4896 Return 1 if they are the same.
4897 Return 0 if they are understandably different.
4898 Return -1 if either contains tree structure not understood by
4899 this function. */
4902 simple_cst_equal (tree t1, tree t2)
4904 enum tree_code code1, code2;
4905 int cmp;
4906 int i;
4908 if (t1 == t2)
4909 return 1;
4910 if (t1 == 0 || t2 == 0)
4911 return 0;
4913 code1 = TREE_CODE (t1);
4914 code2 = TREE_CODE (t2);
4916 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
4918 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4919 || code2 == NON_LVALUE_EXPR)
4920 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4921 else
4922 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
4925 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4926 || code2 == NON_LVALUE_EXPR)
4927 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
4929 if (code1 != code2)
4930 return 0;
4932 switch (code1)
4934 case INTEGER_CST:
4935 return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4936 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
4938 case REAL_CST:
4939 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4941 case STRING_CST:
4942 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4943 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4944 TREE_STRING_LENGTH (t1)));
4946 case CONSTRUCTOR:
4948 unsigned HOST_WIDE_INT idx;
4949 VEC(constructor_elt, gc) *v1 = CONSTRUCTOR_ELTS (t1);
4950 VEC(constructor_elt, gc) *v2 = CONSTRUCTOR_ELTS (t2);
4952 if (VEC_length (constructor_elt, v1) != VEC_length (constructor_elt, v2))
4953 return false;
4955 for (idx = 0; idx < VEC_length (constructor_elt, v1); ++idx)
4956 /* ??? Should we handle also fields here? */
4957 if (!simple_cst_equal (VEC_index (constructor_elt, v1, idx)->value,
4958 VEC_index (constructor_elt, v2, idx)->value))
4959 return false;
4960 return true;
4963 case SAVE_EXPR:
4964 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4966 case CALL_EXPR:
4967 cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
4968 if (cmp <= 0)
4969 return cmp;
4970 if (call_expr_nargs (t1) != call_expr_nargs (t2))
4971 return 0;
4973 tree arg1, arg2;
4974 call_expr_arg_iterator iter1, iter2;
4975 for (arg1 = first_call_expr_arg (t1, &iter1),
4976 arg2 = first_call_expr_arg (t2, &iter2);
4977 arg1 && arg2;
4978 arg1 = next_call_expr_arg (&iter1),
4979 arg2 = next_call_expr_arg (&iter2))
4981 cmp = simple_cst_equal (arg1, arg2);
4982 if (cmp <= 0)
4983 return cmp;
4985 return arg1 == arg2;
4988 case TARGET_EXPR:
4989 /* Special case: if either target is an unallocated VAR_DECL,
4990 it means that it's going to be unified with whatever the
4991 TARGET_EXPR is really supposed to initialize, so treat it
4992 as being equivalent to anything. */
4993 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4994 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4995 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
4996 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4997 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4998 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
4999 cmp = 1;
5000 else
5001 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
5003 if (cmp <= 0)
5004 return cmp;
5006 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
5008 case WITH_CLEANUP_EXPR:
5009 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
5010 if (cmp <= 0)
5011 return cmp;
5013 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
5015 case COMPONENT_REF:
5016 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
5017 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
5019 return 0;
5021 case VAR_DECL:
5022 case PARM_DECL:
5023 case CONST_DECL:
5024 case FUNCTION_DECL:
5025 return 0;
5027 default:
5028 break;
5031 /* This general rule works for most tree codes. All exceptions should be
5032 handled above. If this is a language-specific tree code, we can't
5033 trust what might be in the operand, so say we don't know
5034 the situation. */
5035 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
5036 return -1;
5038 switch (TREE_CODE_CLASS (code1))
5040 case tcc_unary:
5041 case tcc_binary:
5042 case tcc_comparison:
5043 case tcc_expression:
5044 case tcc_reference:
5045 case tcc_statement:
5046 cmp = 1;
5047 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
5049 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
5050 if (cmp <= 0)
5051 return cmp;
5054 return cmp;
5056 default:
5057 return -1;
5061 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
5062 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
5063 than U, respectively. */
5066 compare_tree_int (tree t, unsigned HOST_WIDE_INT u)
5068 if (tree_int_cst_sgn (t) < 0)
5069 return -1;
5070 else if (TREE_INT_CST_HIGH (t) != 0)
5071 return 1;
5072 else if (TREE_INT_CST_LOW (t) == u)
5073 return 0;
5074 else if (TREE_INT_CST_LOW (t) < u)
5075 return -1;
5076 else
5077 return 1;
5080 /* Return true if CODE represents an associative tree code. Otherwise
5081 return false. */
5082 bool
5083 associative_tree_code (enum tree_code code)
5085 switch (code)
5087 case BIT_IOR_EXPR:
5088 case BIT_AND_EXPR:
5089 case BIT_XOR_EXPR:
5090 case PLUS_EXPR:
5091 case MULT_EXPR:
5092 case MIN_EXPR:
5093 case MAX_EXPR:
5094 return true;
5096 default:
5097 break;
5099 return false;
5102 /* Return true if CODE represents a commutative tree code. Otherwise
5103 return false. */
5104 bool
5105 commutative_tree_code (enum tree_code code)
5107 switch (code)
5109 case PLUS_EXPR:
5110 case MULT_EXPR:
5111 case MIN_EXPR:
5112 case MAX_EXPR:
5113 case BIT_IOR_EXPR:
5114 case BIT_XOR_EXPR:
5115 case BIT_AND_EXPR:
5116 case NE_EXPR:
5117 case EQ_EXPR:
5118 case UNORDERED_EXPR:
5119 case ORDERED_EXPR:
5120 case UNEQ_EXPR:
5121 case LTGT_EXPR:
5122 case TRUTH_AND_EXPR:
5123 case TRUTH_XOR_EXPR:
5124 case TRUTH_OR_EXPR:
5125 return true;
5127 default:
5128 break;
5130 return false;
5133 /* Generate a hash value for an expression. This can be used iteratively
5134 by passing a previous result as the "val" argument.
5136 This function is intended to produce the same hash for expressions which
5137 would compare equal using operand_equal_p. */
5139 hashval_t
5140 iterative_hash_expr (tree t, hashval_t val)
5142 int i;
5143 enum tree_code code;
5144 char class;
5146 if (t == NULL_TREE)
5147 return iterative_hash_pointer (t, val);
5149 code = TREE_CODE (t);
5151 switch (code)
5153 /* Alas, constants aren't shared, so we can't rely on pointer
5154 identity. */
5155 case INTEGER_CST:
5156 val = iterative_hash_host_wide_int (TREE_INT_CST_LOW (t), val);
5157 return iterative_hash_host_wide_int (TREE_INT_CST_HIGH (t), val);
5158 case REAL_CST:
5160 unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
5162 return iterative_hash_hashval_t (val2, val);
5164 case STRING_CST:
5165 return iterative_hash (TREE_STRING_POINTER (t),
5166 TREE_STRING_LENGTH (t), val);
5167 case COMPLEX_CST:
5168 val = iterative_hash_expr (TREE_REALPART (t), val);
5169 return iterative_hash_expr (TREE_IMAGPART (t), val);
5170 case VECTOR_CST:
5171 return iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
5173 case SSA_NAME:
5174 case VALUE_HANDLE:
5175 /* we can just compare by pointer. */
5176 return iterative_hash_pointer (t, val);
5178 case TREE_LIST:
5179 /* A list of expressions, for a CALL_EXPR or as the elements of a
5180 VECTOR_CST. */
5181 for (; t; t = TREE_CHAIN (t))
5182 val = iterative_hash_expr (TREE_VALUE (t), val);
5183 return val;
5184 case CONSTRUCTOR:
5186 unsigned HOST_WIDE_INT idx;
5187 tree field, value;
5188 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
5190 val = iterative_hash_expr (field, val);
5191 val = iterative_hash_expr (value, val);
5193 return val;
5195 case FUNCTION_DECL:
5196 /* When referring to a built-in FUNCTION_DECL, use the
5197 __builtin__ form. Otherwise nodes that compare equal
5198 according to operand_equal_p might get different
5199 hash codes. */
5200 if (DECL_BUILT_IN (t))
5202 val = iterative_hash_pointer (built_in_decls[DECL_FUNCTION_CODE (t)],
5203 val);
5204 return val;
5206 /* else FALL THROUGH */
5207 default:
5208 class = TREE_CODE_CLASS (code);
5210 if (class == tcc_declaration)
5212 /* DECL's have a unique ID */
5213 val = iterative_hash_host_wide_int (DECL_UID (t), val);
5215 else
5217 gcc_assert (IS_EXPR_CODE_CLASS (class));
5219 val = iterative_hash_object (code, val);
5221 /* Don't hash the type, that can lead to having nodes which
5222 compare equal according to operand_equal_p, but which
5223 have different hash codes. */
5224 if (code == NOP_EXPR
5225 || code == CONVERT_EXPR
5226 || code == NON_LVALUE_EXPR)
5228 /* Make sure to include signness in the hash computation. */
5229 val += TYPE_UNSIGNED (TREE_TYPE (t));
5230 val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
5233 else if (commutative_tree_code (code))
5235 /* It's a commutative expression. We want to hash it the same
5236 however it appears. We do this by first hashing both operands
5237 and then rehashing based on the order of their independent
5238 hashes. */
5239 hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
5240 hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
5241 hashval_t t;
5243 if (one > two)
5244 t = one, one = two, two = t;
5246 val = iterative_hash_hashval_t (one, val);
5247 val = iterative_hash_hashval_t (two, val);
5249 else
5250 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
5251 val = iterative_hash_expr (TREE_OPERAND (t, i), val);
5253 return val;
5254 break;
5258 /* Constructors for pointer, array and function types.
5259 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
5260 constructed by language-dependent code, not here.) */
5262 /* Construct, lay out and return the type of pointers to TO_TYPE with
5263 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
5264 reference all of memory. If such a type has already been
5265 constructed, reuse it. */
5267 tree
5268 build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
5269 bool can_alias_all)
5271 tree t;
5273 if (to_type == error_mark_node)
5274 return error_mark_node;
5276 /* In some cases, languages will have things that aren't a POINTER_TYPE
5277 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
5278 In that case, return that type without regard to the rest of our
5279 operands.
5281 ??? This is a kludge, but consistent with the way this function has
5282 always operated and there doesn't seem to be a good way to avoid this
5283 at the moment. */
5284 if (TYPE_POINTER_TO (to_type) != 0
5285 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
5286 return TYPE_POINTER_TO (to_type);
5288 /* First, if we already have a type for pointers to TO_TYPE and it's
5289 the proper mode, use it. */
5290 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
5291 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
5292 return t;
5294 t = make_node (POINTER_TYPE);
5296 TREE_TYPE (t) = to_type;
5297 TYPE_MODE (t) = mode;
5298 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
5299 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
5300 TYPE_POINTER_TO (to_type) = t;
5302 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
5303 SET_TYPE_STRUCTURAL_EQUALITY (t);
5304 else if (TYPE_CANONICAL (to_type) != to_type)
5305 TYPE_CANONICAL (t)
5306 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
5307 mode, can_alias_all);
5309 /* Lay out the type. This function has many callers that are concerned
5310 with expression-construction, and this simplifies them all. */
5311 layout_type (t);
5313 return t;
5316 /* By default build pointers in ptr_mode. */
5318 tree
5319 build_pointer_type (tree to_type)
5321 return build_pointer_type_for_mode (to_type, ptr_mode, false);
5324 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
5326 tree
5327 build_reference_type_for_mode (tree to_type, enum machine_mode mode,
5328 bool can_alias_all)
5330 tree t;
5332 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
5333 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
5334 In that case, return that type without regard to the rest of our
5335 operands.
5337 ??? This is a kludge, but consistent with the way this function has
5338 always operated and there doesn't seem to be a good way to avoid this
5339 at the moment. */
5340 if (TYPE_REFERENCE_TO (to_type) != 0
5341 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
5342 return TYPE_REFERENCE_TO (to_type);
5344 /* First, if we already have a type for pointers to TO_TYPE and it's
5345 the proper mode, use it. */
5346 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
5347 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
5348 return t;
5350 t = make_node (REFERENCE_TYPE);
5352 TREE_TYPE (t) = to_type;
5353 TYPE_MODE (t) = mode;
5354 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
5355 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
5356 TYPE_REFERENCE_TO (to_type) = t;
5358 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
5359 SET_TYPE_STRUCTURAL_EQUALITY (t);
5360 else if (TYPE_CANONICAL (to_type) != to_type)
5361 TYPE_CANONICAL (t)
5362 = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
5363 mode, can_alias_all);
5365 layout_type (t);
5367 return t;
5371 /* Build the node for the type of references-to-TO_TYPE by default
5372 in ptr_mode. */
5374 tree
5375 build_reference_type (tree to_type)
5377 return build_reference_type_for_mode (to_type, ptr_mode, false);
5380 /* Build a type that is compatible with t but has no cv quals anywhere
5381 in its type, thus
5383 const char *const *const * -> char ***. */
5385 tree
5386 build_type_no_quals (tree t)
5388 switch (TREE_CODE (t))
5390 case POINTER_TYPE:
5391 return build_pointer_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
5392 TYPE_MODE (t),
5393 TYPE_REF_CAN_ALIAS_ALL (t));
5394 case REFERENCE_TYPE:
5395 return
5396 build_reference_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
5397 TYPE_MODE (t),
5398 TYPE_REF_CAN_ALIAS_ALL (t));
5399 default:
5400 return TYPE_MAIN_VARIANT (t);
5404 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
5405 MAXVAL should be the maximum value in the domain
5406 (one less than the length of the array).
5408 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
5409 We don't enforce this limit, that is up to caller (e.g. language front end).
5410 The limit exists because the result is a signed type and we don't handle
5411 sizes that use more than one HOST_WIDE_INT. */
5413 tree
5414 build_index_type (tree maxval)
5416 tree itype = make_node (INTEGER_TYPE);
5418 TREE_TYPE (itype) = sizetype;
5419 TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
5420 TYPE_MIN_VALUE (itype) = size_zero_node;
5421 TYPE_MAX_VALUE (itype) = fold_convert (sizetype, maxval);
5422 TYPE_MODE (itype) = TYPE_MODE (sizetype);
5423 TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
5424 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
5425 TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
5426 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
5428 if (host_integerp (maxval, 1))
5429 return type_hash_canon (tree_low_cst (maxval, 1), itype);
5430 else
5432 /* Since we cannot hash this type, we need to compare it using
5433 structural equality checks. */
5434 SET_TYPE_STRUCTURAL_EQUALITY (itype);
5435 return itype;
5439 /* Builds a signed or unsigned integer type of precision PRECISION.
5440 Used for C bitfields whose precision does not match that of
5441 built-in target types. */
5442 tree
5443 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
5444 int unsignedp)
5446 tree itype = make_node (INTEGER_TYPE);
5448 TYPE_PRECISION (itype) = precision;
5450 if (unsignedp)
5451 fixup_unsigned_type (itype);
5452 else
5453 fixup_signed_type (itype);
5455 if (host_integerp (TYPE_MAX_VALUE (itype), 1))
5456 return type_hash_canon (tree_low_cst (TYPE_MAX_VALUE (itype), 1), itype);
5458 return itype;
5461 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
5462 ENUMERAL_TYPE or BOOLEAN_TYPE), with low bound LOWVAL and
5463 high bound HIGHVAL. If TYPE is NULL, sizetype is used. */
5465 tree
5466 build_range_type (tree type, tree lowval, tree highval)
5468 tree itype = make_node (INTEGER_TYPE);
5470 TREE_TYPE (itype) = type;
5471 if (type == NULL_TREE)
5472 type = sizetype;
5474 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
5475 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
5477 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
5478 TYPE_MODE (itype) = TYPE_MODE (type);
5479 TYPE_SIZE (itype) = TYPE_SIZE (type);
5480 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
5481 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
5482 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
5484 if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
5485 return type_hash_canon (tree_low_cst (highval, 0)
5486 - tree_low_cst (lowval, 0),
5487 itype);
5488 else
5489 return itype;
5492 /* Just like build_index_type, but takes lowval and highval instead
5493 of just highval (maxval). */
5495 tree
5496 build_index_2_type (tree lowval, tree highval)
5498 return build_range_type (sizetype, lowval, highval);
5501 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
5502 and number of elements specified by the range of values of INDEX_TYPE.
5503 If such a type has already been constructed, reuse it. */
5505 tree
5506 build_array_type (tree elt_type, tree index_type)
5508 tree t;
5509 hashval_t hashcode = 0;
5511 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
5513 error ("arrays of functions are not meaningful");
5514 elt_type = integer_type_node;
5517 t = make_node (ARRAY_TYPE);
5518 TREE_TYPE (t) = elt_type;
5519 TYPE_DOMAIN (t) = index_type;
5521 if (index_type == 0)
5523 tree save = t;
5524 hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
5525 t = type_hash_canon (hashcode, t);
5526 if (save == t)
5527 layout_type (t);
5529 if (TYPE_CANONICAL (t) == t)
5531 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type))
5532 SET_TYPE_STRUCTURAL_EQUALITY (t);
5533 else if (TYPE_CANONICAL (elt_type) != elt_type)
5534 TYPE_CANONICAL (t)
5535 = build_array_type (TYPE_CANONICAL (elt_type), index_type);
5538 return t;
5541 hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
5542 hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
5543 t = type_hash_canon (hashcode, t);
5545 if (!COMPLETE_TYPE_P (t))
5546 layout_type (t);
5548 if (TYPE_CANONICAL (t) == t)
5550 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
5551 || TYPE_STRUCTURAL_EQUALITY_P (index_type))
5552 SET_TYPE_STRUCTURAL_EQUALITY (t);
5553 else if (TYPE_CANONICAL (elt_type) != elt_type
5554 || TYPE_CANONICAL (index_type) != index_type)
5555 TYPE_CANONICAL (t)
5556 = build_array_type (TYPE_CANONICAL (elt_type),
5557 TYPE_CANONICAL (index_type));
5560 return t;
5563 /* Return the TYPE of the elements comprising
5564 the innermost dimension of ARRAY. */
5566 tree
5567 get_inner_array_type (tree array)
5569 tree type = TREE_TYPE (array);
5571 while (TREE_CODE (type) == ARRAY_TYPE)
5572 type = TREE_TYPE (type);
5574 return type;
5577 /* Construct, lay out and return
5578 the type of functions returning type VALUE_TYPE
5579 given arguments of types ARG_TYPES.
5580 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
5581 are data type nodes for the arguments of the function.
5582 If such a type has already been constructed, reuse it. */
5584 tree
5585 build_function_type (tree value_type, tree arg_types)
5587 tree t;
5588 hashval_t hashcode = 0;
5590 if (TREE_CODE (value_type) == FUNCTION_TYPE)
5592 error ("function return type cannot be function");
5593 value_type = integer_type_node;
5596 /* Make a node of the sort we want. */
5597 t = make_node (FUNCTION_TYPE);
5598 TREE_TYPE (t) = value_type;
5599 TYPE_ARG_TYPES (t) = arg_types;
5601 /* We don't have canonicalization of function types, yet. */
5602 SET_TYPE_STRUCTURAL_EQUALITY (t);
5604 /* If we already have such a type, use the old one. */
5605 hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
5606 hashcode = type_hash_list (arg_types, hashcode);
5607 t = type_hash_canon (hashcode, t);
5609 if (!COMPLETE_TYPE_P (t))
5610 layout_type (t);
5611 return t;
5614 /* Build a function type. The RETURN_TYPE is the type returned by the
5615 function. If additional arguments are provided, they are
5616 additional argument types. The list of argument types must always
5617 be terminated by NULL_TREE. */
5619 tree
5620 build_function_type_list (tree return_type, ...)
5622 tree t, args, last;
5623 va_list p;
5625 va_start (p, return_type);
5627 t = va_arg (p, tree);
5628 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
5629 args = tree_cons (NULL_TREE, t, args);
5631 if (args == NULL_TREE)
5632 args = void_list_node;
5633 else
5635 last = args;
5636 args = nreverse (args);
5637 TREE_CHAIN (last) = void_list_node;
5639 args = build_function_type (return_type, args);
5641 va_end (p);
5642 return args;
5645 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
5646 and ARGTYPES (a TREE_LIST) are the return type and arguments types
5647 for the method. An implicit additional parameter (of type
5648 pointer-to-BASETYPE) is added to the ARGTYPES. */
5650 tree
5651 build_method_type_directly (tree basetype,
5652 tree rettype,
5653 tree argtypes)
5655 tree t;
5656 tree ptype;
5657 int hashcode = 0;
5659 /* Make a node of the sort we want. */
5660 t = make_node (METHOD_TYPE);
5662 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
5663 TREE_TYPE (t) = rettype;
5664 ptype = build_pointer_type (basetype);
5666 /* The actual arglist for this function includes a "hidden" argument
5667 which is "this". Put it into the list of argument types. */
5668 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
5669 TYPE_ARG_TYPES (t) = argtypes;
5671 /* We don't have canonicalization of method types yet. */
5672 SET_TYPE_STRUCTURAL_EQUALITY (t);
5674 /* If we already have such a type, use the old one. */
5675 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
5676 hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
5677 hashcode = type_hash_list (argtypes, hashcode);
5678 t = type_hash_canon (hashcode, t);
5680 if (!COMPLETE_TYPE_P (t))
5681 layout_type (t);
5683 return t;
5686 /* Construct, lay out and return the type of methods belonging to class
5687 BASETYPE and whose arguments and values are described by TYPE.
5688 If that type exists already, reuse it.
5689 TYPE must be a FUNCTION_TYPE node. */
5691 tree
5692 build_method_type (tree basetype, tree type)
5694 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
5696 return build_method_type_directly (basetype,
5697 TREE_TYPE (type),
5698 TYPE_ARG_TYPES (type));
5701 /* Construct, lay out and return the type of offsets to a value
5702 of type TYPE, within an object of type BASETYPE.
5703 If a suitable offset type exists already, reuse it. */
5705 tree
5706 build_offset_type (tree basetype, tree type)
5708 tree t;
5709 hashval_t hashcode = 0;
5711 /* Make a node of the sort we want. */
5712 t = make_node (OFFSET_TYPE);
5714 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
5715 TREE_TYPE (t) = type;
5717 /* If we already have such a type, use the old one. */
5718 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
5719 hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
5720 t = type_hash_canon (hashcode, t);
5722 if (!COMPLETE_TYPE_P (t))
5723 layout_type (t);
5725 if (TYPE_CANONICAL (t) == t)
5727 if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
5728 || TYPE_STRUCTURAL_EQUALITY_P (type))
5729 SET_TYPE_STRUCTURAL_EQUALITY (t);
5730 else if (TYPE_CANONICAL (basetype) != basetype
5731 || TYPE_CANONICAL (type) != type)
5732 TYPE_CANONICAL (t)
5733 = build_offset_type (TYPE_CANONICAL (basetype),
5734 TYPE_CANONICAL (type));
5737 return t;
5740 /* Create a complex type whose components are COMPONENT_TYPE. */
5742 tree
5743 build_complex_type (tree component_type)
5745 tree t;
5746 hashval_t hashcode;
5748 /* Make a node of the sort we want. */
5749 t = make_node (COMPLEX_TYPE);
5751 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
5753 /* If we already have such a type, use the old one. */
5754 hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
5755 t = type_hash_canon (hashcode, t);
5757 if (!COMPLETE_TYPE_P (t))
5758 layout_type (t);
5760 if (TYPE_CANONICAL (t) == t)
5762 if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
5763 SET_TYPE_STRUCTURAL_EQUALITY (t);
5764 else if (TYPE_CANONICAL (component_type) != component_type)
5765 TYPE_CANONICAL (t)
5766 = build_complex_type (TYPE_CANONICAL (component_type));
5769 /* If we are writing Dwarf2 output we need to create a name,
5770 since complex is a fundamental type. */
5771 if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
5772 && ! TYPE_NAME (t))
5774 const char *name;
5775 if (component_type == char_type_node)
5776 name = "complex char";
5777 else if (component_type == signed_char_type_node)
5778 name = "complex signed char";
5779 else if (component_type == unsigned_char_type_node)
5780 name = "complex unsigned char";
5781 else if (component_type == short_integer_type_node)
5782 name = "complex short int";
5783 else if (component_type == short_unsigned_type_node)
5784 name = "complex short unsigned int";
5785 else if (component_type == integer_type_node)
5786 name = "complex int";
5787 else if (component_type == unsigned_type_node)
5788 name = "complex unsigned int";
5789 else if (component_type == long_integer_type_node)
5790 name = "complex long int";
5791 else if (component_type == long_unsigned_type_node)
5792 name = "complex long unsigned int";
5793 else if (component_type == long_long_integer_type_node)
5794 name = "complex long long int";
5795 else if (component_type == long_long_unsigned_type_node)
5796 name = "complex long long unsigned int";
5797 else
5798 name = 0;
5800 if (name != 0)
5801 TYPE_NAME (t) = get_identifier (name);
5804 return build_qualified_type (t, TYPE_QUALS (component_type));
5807 /* Return OP, stripped of any conversions to wider types as much as is safe.
5808 Converting the value back to OP's type makes a value equivalent to OP.
5810 If FOR_TYPE is nonzero, we return a value which, if converted to
5811 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
5813 If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
5814 narrowest type that can hold the value, even if they don't exactly fit.
5815 Otherwise, bit-field references are changed to a narrower type
5816 only if they can be fetched directly from memory in that type.
5818 OP must have integer, real or enumeral type. Pointers are not allowed!
5820 There are some cases where the obvious value we could return
5821 would regenerate to OP if converted to OP's type,
5822 but would not extend like OP to wider types.
5823 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
5824 For example, if OP is (unsigned short)(signed char)-1,
5825 we avoid returning (signed char)-1 if FOR_TYPE is int,
5826 even though extending that to an unsigned short would regenerate OP,
5827 since the result of extending (signed char)-1 to (int)
5828 is different from (int) OP. */
5830 tree
5831 get_unwidened (tree op, tree for_type)
5833 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
5834 tree type = TREE_TYPE (op);
5835 unsigned final_prec
5836 = TYPE_PRECISION (for_type != 0 ? for_type : type);
5837 int uns
5838 = (for_type != 0 && for_type != type
5839 && final_prec > TYPE_PRECISION (type)
5840 && TYPE_UNSIGNED (type));
5841 tree win = op;
5843 while (TREE_CODE (op) == NOP_EXPR
5844 || TREE_CODE (op) == CONVERT_EXPR)
5846 int bitschange;
5848 /* TYPE_PRECISION on vector types has different meaning
5849 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
5850 so avoid them here. */
5851 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
5852 break;
5854 bitschange = TYPE_PRECISION (TREE_TYPE (op))
5855 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
5857 /* Truncations are many-one so cannot be removed.
5858 Unless we are later going to truncate down even farther. */
5859 if (bitschange < 0
5860 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
5861 break;
5863 /* See what's inside this conversion. If we decide to strip it,
5864 we will set WIN. */
5865 op = TREE_OPERAND (op, 0);
5867 /* If we have not stripped any zero-extensions (uns is 0),
5868 we can strip any kind of extension.
5869 If we have previously stripped a zero-extension,
5870 only zero-extensions can safely be stripped.
5871 Any extension can be stripped if the bits it would produce
5872 are all going to be discarded later by truncating to FOR_TYPE. */
5874 if (bitschange > 0)
5876 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
5877 win = op;
5878 /* TYPE_UNSIGNED says whether this is a zero-extension.
5879 Let's avoid computing it if it does not affect WIN
5880 and if UNS will not be needed again. */
5881 if ((uns
5882 || TREE_CODE (op) == NOP_EXPR
5883 || TREE_CODE (op) == CONVERT_EXPR)
5884 && TYPE_UNSIGNED (TREE_TYPE (op)))
5886 uns = 1;
5887 win = op;
5892 if (TREE_CODE (op) == COMPONENT_REF
5893 /* Since type_for_size always gives an integer type. */
5894 && TREE_CODE (type) != REAL_TYPE
5895 /* Don't crash if field not laid out yet. */
5896 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
5897 && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
5899 unsigned int innerprec
5900 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
5901 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
5902 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
5903 type = lang_hooks.types.type_for_size (innerprec, unsignedp);
5905 /* We can get this structure field in the narrowest type it fits in.
5906 If FOR_TYPE is 0, do this only for a field that matches the
5907 narrower type exactly and is aligned for it
5908 The resulting extension to its nominal type (a fullword type)
5909 must fit the same conditions as for other extensions. */
5911 if (type != 0
5912 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (op)))
5913 && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
5914 && (! uns || final_prec <= innerprec || unsignedp))
5916 win = build3 (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5917 TREE_OPERAND (op, 1), NULL_TREE);
5918 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5919 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5923 return win;
5926 /* Return OP or a simpler expression for a narrower value
5927 which can be sign-extended or zero-extended to give back OP.
5928 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
5929 or 0 if the value should be sign-extended. */
5931 tree
5932 get_narrower (tree op, int *unsignedp_ptr)
5934 int uns = 0;
5935 int first = 1;
5936 tree win = op;
5937 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
5939 while (TREE_CODE (op) == NOP_EXPR)
5941 int bitschange
5942 = (TYPE_PRECISION (TREE_TYPE (op))
5943 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
5945 /* Truncations are many-one so cannot be removed. */
5946 if (bitschange < 0)
5947 break;
5949 /* See what's inside this conversion. If we decide to strip it,
5950 we will set WIN. */
5952 if (bitschange > 0)
5954 op = TREE_OPERAND (op, 0);
5955 /* An extension: the outermost one can be stripped,
5956 but remember whether it is zero or sign extension. */
5957 if (first)
5958 uns = TYPE_UNSIGNED (TREE_TYPE (op));
5959 /* Otherwise, if a sign extension has been stripped,
5960 only sign extensions can now be stripped;
5961 if a zero extension has been stripped, only zero-extensions. */
5962 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
5963 break;
5964 first = 0;
5966 else /* bitschange == 0 */
5968 /* A change in nominal type can always be stripped, but we must
5969 preserve the unsignedness. */
5970 if (first)
5971 uns = TYPE_UNSIGNED (TREE_TYPE (op));
5972 first = 0;
5973 op = TREE_OPERAND (op, 0);
5974 /* Keep trying to narrow, but don't assign op to win if it
5975 would turn an integral type into something else. */
5976 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
5977 continue;
5980 win = op;
5983 if (TREE_CODE (op) == COMPONENT_REF
5984 /* Since type_for_size always gives an integer type. */
5985 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
5986 /* Ensure field is laid out already. */
5987 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
5988 && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
5990 unsigned HOST_WIDE_INT innerprec
5991 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
5992 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
5993 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
5994 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
5996 /* We can get this structure field in a narrower type that fits it,
5997 but the resulting extension to its nominal type (a fullword type)
5998 must satisfy the same conditions as for other extensions.
6000 Do this only for fields that are aligned (not bit-fields),
6001 because when bit-field insns will be used there is no
6002 advantage in doing this. */
6004 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
6005 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
6006 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
6007 && type != 0)
6009 if (first)
6010 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
6011 win = fold_convert (type, op);
6015 *unsignedp_ptr = uns;
6016 return win;
6019 /* Nonzero if integer constant C has a value that is permissible
6020 for type TYPE (an INTEGER_TYPE). */
6023 int_fits_type_p (tree c, tree type)
6025 tree type_low_bound = TYPE_MIN_VALUE (type);
6026 tree type_high_bound = TYPE_MAX_VALUE (type);
6027 bool ok_for_low_bound, ok_for_high_bound;
6028 unsigned HOST_WIDE_INT low;
6029 HOST_WIDE_INT high;
6031 /* If at least one bound of the type is a constant integer, we can check
6032 ourselves and maybe make a decision. If no such decision is possible, but
6033 this type is a subtype, try checking against that. Otherwise, use
6034 fit_double_type, which checks against the precision.
6036 Compute the status for each possibly constant bound, and return if we see
6037 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
6038 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
6039 for "constant known to fit". */
6041 /* Check if C >= type_low_bound. */
6042 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
6044 if (tree_int_cst_lt (c, type_low_bound))
6045 return 0;
6046 ok_for_low_bound = true;
6048 else
6049 ok_for_low_bound = false;
6051 /* Check if c <= type_high_bound. */
6052 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
6054 if (tree_int_cst_lt (type_high_bound, c))
6055 return 0;
6056 ok_for_high_bound = true;
6058 else
6059 ok_for_high_bound = false;
6061 /* If the constant fits both bounds, the result is known. */
6062 if (ok_for_low_bound && ok_for_high_bound)
6063 return 1;
6065 /* Perform some generic filtering which may allow making a decision
6066 even if the bounds are not constant. First, negative integers
6067 never fit in unsigned types, */
6068 if (TYPE_UNSIGNED (type) && tree_int_cst_sgn (c) < 0)
6069 return 0;
6071 /* Second, narrower types always fit in wider ones. */
6072 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
6073 return 1;
6075 /* Third, unsigned integers with top bit set never fit signed types. */
6076 if (! TYPE_UNSIGNED (type)
6077 && TYPE_UNSIGNED (TREE_TYPE (c))
6078 && tree_int_cst_msb (c))
6079 return 0;
6081 /* If we haven't been able to decide at this point, there nothing more we
6082 can check ourselves here. Look at the base type if we have one and it
6083 has the same precision. */
6084 if (TREE_CODE (type) == INTEGER_TYPE
6085 && TREE_TYPE (type) != 0
6086 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
6087 return int_fits_type_p (c, TREE_TYPE (type));
6089 /* Or to fit_double_type, if nothing else. */
6090 low = TREE_INT_CST_LOW (c);
6091 high = TREE_INT_CST_HIGH (c);
6092 return !fit_double_type (low, high, &low, &high, type);
6095 /* Subprogram of following function. Called by walk_tree.
6097 Return *TP if it is an automatic variable or parameter of the
6098 function passed in as DATA. */
6100 static tree
6101 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
6103 tree fn = (tree) data;
6105 if (TYPE_P (*tp))
6106 *walk_subtrees = 0;
6108 else if (DECL_P (*tp)
6109 && lang_hooks.tree_inlining.auto_var_in_fn_p (*tp, fn))
6110 return *tp;
6112 return NULL_TREE;
6115 /* Returns true if T is, contains, or refers to a type with variable
6116 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
6117 arguments, but not the return type. If FN is nonzero, only return
6118 true if a modifier of the type or position of FN is a variable or
6119 parameter inside FN.
6121 This concept is more general than that of C99 'variably modified types':
6122 in C99, a struct type is never variably modified because a VLA may not
6123 appear as a structure member. However, in GNU C code like:
6125 struct S { int i[f()]; };
6127 is valid, and other languages may define similar constructs. */
6129 bool
6130 variably_modified_type_p (tree type, tree fn)
6132 tree t;
6134 /* Test if T is either variable (if FN is zero) or an expression containing
6135 a variable in FN. */
6136 #define RETURN_TRUE_IF_VAR(T) \
6137 do { tree _t = (T); \
6138 if (_t && _t != error_mark_node && TREE_CODE (_t) != INTEGER_CST \
6139 && (!fn || walk_tree (&_t, find_var_from_fn, fn, NULL))) \
6140 return true; } while (0)
6142 if (type == error_mark_node)
6143 return false;
6145 /* If TYPE itself has variable size, it is variably modified. */
6146 RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
6147 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
6149 switch (TREE_CODE (type))
6151 case POINTER_TYPE:
6152 case REFERENCE_TYPE:
6153 case VECTOR_TYPE:
6154 if (variably_modified_type_p (TREE_TYPE (type), fn))
6155 return true;
6156 break;
6158 case FUNCTION_TYPE:
6159 case METHOD_TYPE:
6160 /* If TYPE is a function type, it is variably modified if the
6161 return type is variably modified. */
6162 if (variably_modified_type_p (TREE_TYPE (type), fn))
6163 return true;
6164 break;
6166 case INTEGER_TYPE:
6167 case REAL_TYPE:
6168 case ENUMERAL_TYPE:
6169 case BOOLEAN_TYPE:
6170 /* Scalar types are variably modified if their end points
6171 aren't constant. */
6172 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
6173 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
6174 break;
6176 case RECORD_TYPE:
6177 case UNION_TYPE:
6178 case QUAL_UNION_TYPE:
6179 /* We can't see if any of the fields are variably-modified by the
6180 definition we normally use, since that would produce infinite
6181 recursion via pointers. */
6182 /* This is variably modified if some field's type is. */
6183 for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
6184 if (TREE_CODE (t) == FIELD_DECL)
6186 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
6187 RETURN_TRUE_IF_VAR (DECL_SIZE (t));
6188 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
6190 if (TREE_CODE (type) == QUAL_UNION_TYPE)
6191 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
6193 break;
6195 case ARRAY_TYPE:
6196 /* Do not call ourselves to avoid infinite recursion. This is
6197 variably modified if the element type is. */
6198 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
6199 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
6200 break;
6202 default:
6203 break;
6206 /* The current language may have other cases to check, but in general,
6207 all other types are not variably modified. */
6208 return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
6210 #undef RETURN_TRUE_IF_VAR
6213 /* Given a DECL or TYPE, return the scope in which it was declared, or
6214 NULL_TREE if there is no containing scope. */
6216 tree
6217 get_containing_scope (tree t)
6219 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
6222 /* Return the innermost context enclosing DECL that is
6223 a FUNCTION_DECL, or zero if none. */
6225 tree
6226 decl_function_context (tree decl)
6228 tree context;
6230 if (TREE_CODE (decl) == ERROR_MARK)
6231 return 0;
6233 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
6234 where we look up the function at runtime. Such functions always take
6235 a first argument of type 'pointer to real context'.
6237 C++ should really be fixed to use DECL_CONTEXT for the real context,
6238 and use something else for the "virtual context". */
6239 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
6240 context
6241 = TYPE_MAIN_VARIANT
6242 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6243 else
6244 context = DECL_CONTEXT (decl);
6246 while (context && TREE_CODE (context) != FUNCTION_DECL)
6248 if (TREE_CODE (context) == BLOCK)
6249 context = BLOCK_SUPERCONTEXT (context);
6250 else
6251 context = get_containing_scope (context);
6254 return context;
6257 /* Return the innermost context enclosing DECL that is
6258 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
6259 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
6261 tree
6262 decl_type_context (tree decl)
6264 tree context = DECL_CONTEXT (decl);
6266 while (context)
6267 switch (TREE_CODE (context))
6269 case NAMESPACE_DECL:
6270 case TRANSLATION_UNIT_DECL:
6271 return NULL_TREE;
6273 case RECORD_TYPE:
6274 case UNION_TYPE:
6275 case QUAL_UNION_TYPE:
6276 return context;
6278 case TYPE_DECL:
6279 case FUNCTION_DECL:
6280 context = DECL_CONTEXT (context);
6281 break;
6283 case BLOCK:
6284 context = BLOCK_SUPERCONTEXT (context);
6285 break;
6287 default:
6288 gcc_unreachable ();
6291 return NULL_TREE;
6294 /* CALL is a CALL_EXPR. Return the declaration for the function
6295 called, or NULL_TREE if the called function cannot be
6296 determined. */
6298 tree
6299 get_callee_fndecl (tree call)
6301 tree addr;
6303 if (call == error_mark_node)
6304 return call;
6306 /* It's invalid to call this function with anything but a
6307 CALL_EXPR. */
6308 gcc_assert (TREE_CODE (call) == CALL_EXPR);
6310 /* The first operand to the CALL is the address of the function
6311 called. */
6312 addr = CALL_EXPR_FN (call);
6314 STRIP_NOPS (addr);
6316 /* If this is a readonly function pointer, extract its initial value. */
6317 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
6318 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
6319 && DECL_INITIAL (addr))
6320 addr = DECL_INITIAL (addr);
6322 /* If the address is just `&f' for some function `f', then we know
6323 that `f' is being called. */
6324 if (TREE_CODE (addr) == ADDR_EXPR
6325 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
6326 return TREE_OPERAND (addr, 0);
6328 /* We couldn't figure out what was being called. Maybe the front
6329 end has some idea. */
6330 return lang_hooks.lang_get_callee_fndecl (call);
6333 /* Print debugging information about tree nodes generated during the compile,
6334 and any language-specific information. */
6336 void
6337 dump_tree_statistics (void)
6339 #ifdef GATHER_STATISTICS
6340 int i;
6341 int total_nodes, total_bytes;
6342 #endif
6344 fprintf (stderr, "\n??? tree nodes created\n\n");
6345 #ifdef GATHER_STATISTICS
6346 fprintf (stderr, "Kind Nodes Bytes\n");
6347 fprintf (stderr, "---------------------------------------\n");
6348 total_nodes = total_bytes = 0;
6349 for (i = 0; i < (int) all_kinds; i++)
6351 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
6352 tree_node_counts[i], tree_node_sizes[i]);
6353 total_nodes += tree_node_counts[i];
6354 total_bytes += tree_node_sizes[i];
6356 fprintf (stderr, "---------------------------------------\n");
6357 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
6358 fprintf (stderr, "---------------------------------------\n");
6359 ssanames_print_statistics ();
6360 phinodes_print_statistics ();
6361 #else
6362 fprintf (stderr, "(No per-node statistics)\n");
6363 #endif
6364 print_type_hash_statistics ();
6365 print_debug_expr_statistics ();
6366 print_value_expr_statistics ();
6367 print_restrict_base_statistics ();
6368 lang_hooks.print_statistics ();
6371 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
6373 /* Generate a crc32 of a string. */
6375 unsigned
6376 crc32_string (unsigned chksum, const char *string)
6380 unsigned value = *string << 24;
6381 unsigned ix;
6383 for (ix = 8; ix--; value <<= 1)
6385 unsigned feedback;
6387 feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
6388 chksum <<= 1;
6389 chksum ^= feedback;
6392 while (*string++);
6393 return chksum;
6396 /* P is a string that will be used in a symbol. Mask out any characters
6397 that are not valid in that context. */
6399 void
6400 clean_symbol_name (char *p)
6402 for (; *p; p++)
6403 if (! (ISALNUM (*p)
6404 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
6405 || *p == '$'
6406 #endif
6407 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
6408 || *p == '.'
6409 #endif
6411 *p = '_';
6414 /* Generate a name for a special-purpose function function.
6415 The generated name may need to be unique across the whole link.
6416 TYPE is some string to identify the purpose of this function to the
6417 linker or collect2; it must start with an uppercase letter,
6418 one of:
6419 I - for constructors
6420 D - for destructors
6421 N - for C++ anonymous namespaces
6422 F - for DWARF unwind frame information. */
6424 tree
6425 get_file_function_name (const char *type)
6427 char *buf;
6428 const char *p;
6429 char *q;
6431 /* If we already have a name we know to be unique, just use that. */
6432 if (first_global_object_name)
6433 p = first_global_object_name;
6434 /* If the target is handling the constructors/destructors, they
6435 will be local to this file and the name is only necessary for
6436 debugging purposes. */
6437 else if ((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
6439 const char *file = main_input_filename;
6440 if (! file)
6441 file = input_filename;
6442 /* Just use the file's basename, because the full pathname
6443 might be quite long. */
6444 p = strrchr (file, '/');
6445 if (p)
6446 p++;
6447 else
6448 p = file;
6449 p = q = ASTRDUP (p);
6450 clean_symbol_name (q);
6452 else
6454 /* Otherwise, the name must be unique across the entire link.
6455 We don't have anything that we know to be unique to this translation
6456 unit, so use what we do have and throw in some randomness. */
6457 unsigned len;
6458 const char *name = weak_global_object_name;
6459 const char *file = main_input_filename;
6461 if (! name)
6462 name = "";
6463 if (! file)
6464 file = input_filename;
6466 len = strlen (file);
6467 q = alloca (9 * 2 + len + 1);
6468 memcpy (q, file, len + 1);
6469 clean_symbol_name (q);
6471 sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
6472 crc32_string (0, flag_random_seed));
6474 p = q;
6477 buf = alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + strlen (type));
6479 /* Set up the name of the file-level functions we may need.
6480 Use a global object (which is already required to be unique over
6481 the program) rather than the file name (which imposes extra
6482 constraints). */
6483 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
6485 return get_identifier (buf);
6488 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
6490 /* Complain that the tree code of NODE does not match the expected 0
6491 terminated list of trailing codes. The trailing code list can be
6492 empty, for a more vague error message. FILE, LINE, and FUNCTION
6493 are of the caller. */
6495 void
6496 tree_check_failed (const tree node, const char *file,
6497 int line, const char *function, ...)
6499 va_list args;
6500 char *buffer;
6501 unsigned length = 0;
6502 int code;
6504 va_start (args, function);
6505 while ((code = va_arg (args, int)))
6506 length += 4 + strlen (tree_code_name[code]);
6507 va_end (args);
6508 if (length)
6510 va_start (args, function);
6511 length += strlen ("expected ");
6512 buffer = alloca (length);
6513 length = 0;
6514 while ((code = va_arg (args, int)))
6516 const char *prefix = length ? " or " : "expected ";
6518 strcpy (buffer + length, prefix);
6519 length += strlen (prefix);
6520 strcpy (buffer + length, tree_code_name[code]);
6521 length += strlen (tree_code_name[code]);
6523 va_end (args);
6525 else
6526 buffer = (char *)"unexpected node";
6528 internal_error ("tree check: %s, have %s in %s, at %s:%d",
6529 buffer, tree_code_name[TREE_CODE (node)],
6530 function, trim_filename (file), line);
6533 /* Complain that the tree code of NODE does match the expected 0
6534 terminated list of trailing codes. FILE, LINE, and FUNCTION are of
6535 the caller. */
6537 void
6538 tree_not_check_failed (const tree node, const char *file,
6539 int line, const char *function, ...)
6541 va_list args;
6542 char *buffer;
6543 unsigned length = 0;
6544 int code;
6546 va_start (args, function);
6547 while ((code = va_arg (args, int)))
6548 length += 4 + strlen (tree_code_name[code]);
6549 va_end (args);
6550 va_start (args, function);
6551 buffer = alloca (length);
6552 length = 0;
6553 while ((code = va_arg (args, int)))
6555 if (length)
6557 strcpy (buffer + length, " or ");
6558 length += 4;
6560 strcpy (buffer + length, tree_code_name[code]);
6561 length += strlen (tree_code_name[code]);
6563 va_end (args);
6565 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
6566 buffer, tree_code_name[TREE_CODE (node)],
6567 function, trim_filename (file), line);
6570 /* Similar to tree_check_failed, except that we check for a class of tree
6571 code, given in CL. */
6573 void
6574 tree_class_check_failed (const tree node, const enum tree_code_class cl,
6575 const char *file, int line, const char *function)
6577 internal_error
6578 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
6579 TREE_CODE_CLASS_STRING (cl),
6580 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
6581 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
6584 /* Similar to tree_check_failed, except that instead of specifying a
6585 dozen codes, use the knowledge that they're all sequential. */
6587 void
6588 tree_range_check_failed (const tree node, const char *file, int line,
6589 const char *function, enum tree_code c1,
6590 enum tree_code c2)
6592 char *buffer;
6593 unsigned length = 0;
6594 enum tree_code c;
6596 for (c = c1; c <= c2; ++c)
6597 length += 4 + strlen (tree_code_name[c]);
6599 length += strlen ("expected ");
6600 buffer = alloca (length);
6601 length = 0;
6603 for (c = c1; c <= c2; ++c)
6605 const char *prefix = length ? " or " : "expected ";
6607 strcpy (buffer + length, prefix);
6608 length += strlen (prefix);
6609 strcpy (buffer + length, tree_code_name[c]);
6610 length += strlen (tree_code_name[c]);
6613 internal_error ("tree check: %s, have %s in %s, at %s:%d",
6614 buffer, tree_code_name[TREE_CODE (node)],
6615 function, trim_filename (file), line);
6619 /* Similar to tree_check_failed, except that we check that a tree does
6620 not have the specified code, given in CL. */
6622 void
6623 tree_not_class_check_failed (const tree node, const enum tree_code_class cl,
6624 const char *file, int line, const char *function)
6626 internal_error
6627 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
6628 TREE_CODE_CLASS_STRING (cl),
6629 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
6630 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
6634 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
6636 void
6637 omp_clause_check_failed (const tree node, const char *file, int line,
6638 const char *function, enum omp_clause_code code)
6640 internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
6641 omp_clause_code_name[code], tree_code_name[TREE_CODE (node)],
6642 function, trim_filename (file), line);
6646 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
6648 void
6649 omp_clause_range_check_failed (const tree node, const char *file, int line,
6650 const char *function, enum omp_clause_code c1,
6651 enum omp_clause_code c2)
6653 char *buffer;
6654 unsigned length = 0;
6655 enum omp_clause_code c;
6657 for (c = c1; c <= c2; ++c)
6658 length += 4 + strlen (omp_clause_code_name[c]);
6660 length += strlen ("expected ");
6661 buffer = alloca (length);
6662 length = 0;
6664 for (c = c1; c <= c2; ++c)
6666 const char *prefix = length ? " or " : "expected ";
6668 strcpy (buffer + length, prefix);
6669 length += strlen (prefix);
6670 strcpy (buffer + length, omp_clause_code_name[c]);
6671 length += strlen (omp_clause_code_name[c]);
6674 internal_error ("tree check: %s, have %s in %s, at %s:%d",
6675 buffer, omp_clause_code_name[TREE_CODE (node)],
6676 function, trim_filename (file), line);
6680 #undef DEFTREESTRUCT
6681 #define DEFTREESTRUCT(VAL, NAME) NAME,
6683 static const char *ts_enum_names[] = {
6684 #include "treestruct.def"
6686 #undef DEFTREESTRUCT
6688 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
6690 /* Similar to tree_class_check_failed, except that we check for
6691 whether CODE contains the tree structure identified by EN. */
6693 void
6694 tree_contains_struct_check_failed (const tree node,
6695 const enum tree_node_structure_enum en,
6696 const char *file, int line,
6697 const char *function)
6699 internal_error
6700 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
6701 TS_ENUM_NAME(en),
6702 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
6706 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
6707 (dynamically sized) vector. */
6709 void
6710 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
6711 const char *function)
6713 internal_error
6714 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
6715 idx + 1, len, function, trim_filename (file), line);
6718 /* Similar to above, except that the check is for the bounds of a PHI_NODE's
6719 (dynamically sized) vector. */
6721 void
6722 phi_node_elt_check_failed (int idx, int len, const char *file, int line,
6723 const char *function)
6725 internal_error
6726 ("tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d",
6727 idx + 1, len, function, trim_filename (file), line);
6730 /* Similar to above, except that the check is for the bounds of the operand
6731 vector of an expression node EXP. */
6733 void
6734 tree_operand_check_failed (int idx, tree exp, const char *file,
6735 int line, const char *function)
6737 int code = TREE_CODE (exp);
6738 internal_error
6739 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
6740 idx + 1, tree_code_name[code], TREE_OPERAND_LENGTH (exp),
6741 function, trim_filename (file), line);
6744 /* Similar to above, except that the check is for the number of
6745 operands of an OMP_CLAUSE node. */
6747 void
6748 omp_clause_operand_check_failed (int idx, tree t, const char *file,
6749 int line, const char *function)
6751 internal_error
6752 ("tree check: accessed operand %d of omp_clause %s with %d operands "
6753 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
6754 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
6755 trim_filename (file), line);
6757 #endif /* ENABLE_TREE_CHECKING */
6759 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
6760 and mapped to the machine mode MODE. Initialize its fields and build
6761 the information necessary for debugging output. */
6763 static tree
6764 make_vector_type (tree innertype, int nunits, enum machine_mode mode)
6766 tree t;
6767 hashval_t hashcode = 0;
6769 /* Build a main variant, based on the main variant of the inner type, then
6770 use it to build the variant we return. */
6771 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
6772 && TYPE_MAIN_VARIANT (innertype) != innertype)
6773 return build_type_attribute_qual_variant (
6774 make_vector_type (TYPE_MAIN_VARIANT (innertype), nunits, mode),
6775 TYPE_ATTRIBUTES (innertype),
6776 TYPE_QUALS (innertype));
6778 t = make_node (VECTOR_TYPE);
6779 TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
6780 SET_TYPE_VECTOR_SUBPARTS (t, nunits);
6781 TYPE_MODE (t) = mode;
6782 TYPE_READONLY (t) = TYPE_READONLY (innertype);
6783 TYPE_VOLATILE (t) = TYPE_VOLATILE (innertype);
6785 if (TYPE_STRUCTURAL_EQUALITY_P (innertype))
6786 SET_TYPE_STRUCTURAL_EQUALITY (t);
6787 else if (TYPE_CANONICAL (innertype) != innertype
6788 || mode != VOIDmode)
6789 TYPE_CANONICAL (t)
6790 = make_vector_type (TYPE_CANONICAL (innertype), nunits, VOIDmode);
6792 layout_type (t);
6795 tree index = build_int_cst (NULL_TREE, nunits - 1);
6796 tree array = build_array_type (innertype, build_index_type (index));
6797 tree rt = make_node (RECORD_TYPE);
6799 TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
6800 DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
6801 layout_type (rt);
6802 TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
6803 /* In dwarfout.c, type lookup uses TYPE_UID numbers. We want to output
6804 the representation type, and we want to find that die when looking up
6805 the vector type. This is most easily achieved by making the TYPE_UID
6806 numbers equal. */
6807 TYPE_UID (rt) = TYPE_UID (t);
6810 hashcode = iterative_hash_host_wide_int (VECTOR_TYPE, hashcode);
6811 hashcode = iterative_hash_host_wide_int (mode, hashcode);
6812 hashcode = iterative_hash_object (TYPE_HASH (innertype), hashcode);
6813 return type_hash_canon (hashcode, t);
6816 static tree
6817 make_or_reuse_type (unsigned size, int unsignedp)
6819 if (size == INT_TYPE_SIZE)
6820 return unsignedp ? unsigned_type_node : integer_type_node;
6821 if (size == CHAR_TYPE_SIZE)
6822 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
6823 if (size == SHORT_TYPE_SIZE)
6824 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
6825 if (size == LONG_TYPE_SIZE)
6826 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
6827 if (size == LONG_LONG_TYPE_SIZE)
6828 return (unsignedp ? long_long_unsigned_type_node
6829 : long_long_integer_type_node);
6831 if (unsignedp)
6832 return make_unsigned_type (size);
6833 else
6834 return make_signed_type (size);
6837 /* Create nodes for all integer types (and error_mark_node) using the sizes
6838 of C datatypes. The caller should call set_sizetype soon after calling
6839 this function to select one of the types as sizetype. */
6841 void
6842 build_common_tree_nodes (bool signed_char, bool signed_sizetype)
6844 error_mark_node = make_node (ERROR_MARK);
6845 TREE_TYPE (error_mark_node) = error_mark_node;
6847 initialize_sizetypes (signed_sizetype);
6849 /* Define both `signed char' and `unsigned char'. */
6850 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6851 TYPE_STRING_FLAG (signed_char_type_node) = 1;
6852 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6853 TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
6855 /* Define `char', which is like either `signed char' or `unsigned char'
6856 but not the same as either. */
6857 char_type_node
6858 = (signed_char
6859 ? make_signed_type (CHAR_TYPE_SIZE)
6860 : make_unsigned_type (CHAR_TYPE_SIZE));
6861 TYPE_STRING_FLAG (char_type_node) = 1;
6863 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6864 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6865 integer_type_node = make_signed_type (INT_TYPE_SIZE);
6866 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6867 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6868 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6869 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6870 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6872 /* Define a boolean type. This type only represents boolean values but
6873 may be larger than char depending on the value of BOOL_TYPE_SIZE.
6874 Front ends which want to override this size (i.e. Java) can redefine
6875 boolean_type_node before calling build_common_tree_nodes_2. */
6876 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6877 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6878 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
6879 TYPE_PRECISION (boolean_type_node) = 1;
6881 /* Fill in the rest of the sized types. Reuse existing type nodes
6882 when possible. */
6883 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
6884 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
6885 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
6886 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
6887 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
6889 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
6890 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
6891 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
6892 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
6893 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
6895 access_public_node = get_identifier ("public");
6896 access_protected_node = get_identifier ("protected");
6897 access_private_node = get_identifier ("private");
6900 /* Call this function after calling build_common_tree_nodes and set_sizetype.
6901 It will create several other common tree nodes. */
6903 void
6904 build_common_tree_nodes_2 (int short_double)
6906 /* Define these next since types below may used them. */
6907 integer_zero_node = build_int_cst (NULL_TREE, 0);
6908 integer_one_node = build_int_cst (NULL_TREE, 1);
6909 integer_minus_one_node = build_int_cst (NULL_TREE, -1);
6911 size_zero_node = size_int (0);
6912 size_one_node = size_int (1);
6913 bitsize_zero_node = bitsize_int (0);
6914 bitsize_one_node = bitsize_int (1);
6915 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
6917 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
6918 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
6920 void_type_node = make_node (VOID_TYPE);
6921 layout_type (void_type_node);
6923 /* We are not going to have real types in C with less than byte alignment,
6924 so we might as well not have any types that claim to have it. */
6925 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
6926 TYPE_USER_ALIGN (void_type_node) = 0;
6928 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
6929 layout_type (TREE_TYPE (null_pointer_node));
6931 ptr_type_node = build_pointer_type (void_type_node);
6932 const_ptr_type_node
6933 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
6934 fileptr_type_node = ptr_type_node;
6936 float_type_node = make_node (REAL_TYPE);
6937 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6938 layout_type (float_type_node);
6940 double_type_node = make_node (REAL_TYPE);
6941 if (short_double)
6942 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6943 else
6944 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6945 layout_type (double_type_node);
6947 long_double_type_node = make_node (REAL_TYPE);
6948 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6949 layout_type (long_double_type_node);
6951 float_ptr_type_node = build_pointer_type (float_type_node);
6952 double_ptr_type_node = build_pointer_type (double_type_node);
6953 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
6954 integer_ptr_type_node = build_pointer_type (integer_type_node);
6956 /* Fixed size integer types. */
6957 uint32_type_node = build_nonstandard_integer_type (32, true);
6958 uint64_type_node = build_nonstandard_integer_type (64, true);
6960 /* Decimal float types. */
6961 dfloat32_type_node = make_node (REAL_TYPE);
6962 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
6963 layout_type (dfloat32_type_node);
6964 TYPE_MODE (dfloat32_type_node) = SDmode;
6965 dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
6967 dfloat64_type_node = make_node (REAL_TYPE);
6968 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
6969 layout_type (dfloat64_type_node);
6970 TYPE_MODE (dfloat64_type_node) = DDmode;
6971 dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
6973 dfloat128_type_node = make_node (REAL_TYPE);
6974 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
6975 layout_type (dfloat128_type_node);
6976 TYPE_MODE (dfloat128_type_node) = TDmode;
6977 dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
6979 complex_integer_type_node = make_node (COMPLEX_TYPE);
6980 TREE_TYPE (complex_integer_type_node) = integer_type_node;
6981 layout_type (complex_integer_type_node);
6983 complex_float_type_node = make_node (COMPLEX_TYPE);
6984 TREE_TYPE (complex_float_type_node) = float_type_node;
6985 layout_type (complex_float_type_node);
6987 complex_double_type_node = make_node (COMPLEX_TYPE);
6988 TREE_TYPE (complex_double_type_node) = double_type_node;
6989 layout_type (complex_double_type_node);
6991 complex_long_double_type_node = make_node (COMPLEX_TYPE);
6992 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6993 layout_type (complex_long_double_type_node);
6996 tree t = targetm.build_builtin_va_list ();
6998 /* Many back-ends define record types without setting TYPE_NAME.
6999 If we copied the record type here, we'd keep the original
7000 record type without a name. This breaks name mangling. So,
7001 don't copy record types and let c_common_nodes_and_builtins()
7002 declare the type to be __builtin_va_list. */
7003 if (TREE_CODE (t) != RECORD_TYPE)
7004 t = build_variant_type_copy (t);
7006 va_list_type_node = t;
7010 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
7012 static void
7013 local_define_builtin (const char *name, tree type, enum built_in_function code,
7014 const char *library_name, int ecf_flags)
7016 tree decl;
7018 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
7019 library_name, NULL_TREE);
7020 if (ecf_flags & ECF_CONST)
7021 TREE_READONLY (decl) = 1;
7022 if (ecf_flags & ECF_PURE)
7023 DECL_IS_PURE (decl) = 1;
7024 if (ecf_flags & ECF_NORETURN)
7025 TREE_THIS_VOLATILE (decl) = 1;
7026 if (ecf_flags & ECF_NOTHROW)
7027 TREE_NOTHROW (decl) = 1;
7028 if (ecf_flags & ECF_MALLOC)
7029 DECL_IS_MALLOC (decl) = 1;
7031 built_in_decls[code] = decl;
7032 implicit_built_in_decls[code] = decl;
7035 /* Call this function after instantiating all builtins that the language
7036 front end cares about. This will build the rest of the builtins that
7037 are relied upon by the tree optimizers and the middle-end. */
7039 void
7040 build_common_builtin_nodes (void)
7042 tree tmp, ftype;
7044 if (built_in_decls[BUILT_IN_MEMCPY] == NULL
7045 || built_in_decls[BUILT_IN_MEMMOVE] == NULL)
7047 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
7048 tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
7049 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7050 ftype = build_function_type (ptr_type_node, tmp);
7052 if (built_in_decls[BUILT_IN_MEMCPY] == NULL)
7053 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
7054 "memcpy", ECF_NOTHROW);
7055 if (built_in_decls[BUILT_IN_MEMMOVE] == NULL)
7056 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
7057 "memmove", ECF_NOTHROW);
7060 if (built_in_decls[BUILT_IN_MEMCMP] == NULL)
7062 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
7063 tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
7064 tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
7065 ftype = build_function_type (integer_type_node, tmp);
7066 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
7067 "memcmp", ECF_PURE | ECF_NOTHROW);
7070 if (built_in_decls[BUILT_IN_MEMSET] == NULL)
7072 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
7073 tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
7074 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7075 ftype = build_function_type (ptr_type_node, tmp);
7076 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
7077 "memset", ECF_NOTHROW);
7080 if (built_in_decls[BUILT_IN_ALLOCA] == NULL)
7082 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
7083 ftype = build_function_type (ptr_type_node, tmp);
7084 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
7085 "alloca", ECF_NOTHROW | ECF_MALLOC);
7088 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7089 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7090 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7091 ftype = build_function_type (void_type_node, tmp);
7092 local_define_builtin ("__builtin_init_trampoline", ftype,
7093 BUILT_IN_INIT_TRAMPOLINE,
7094 "__builtin_init_trampoline", ECF_NOTHROW);
7096 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7097 ftype = build_function_type (ptr_type_node, tmp);
7098 local_define_builtin ("__builtin_adjust_trampoline", ftype,
7099 BUILT_IN_ADJUST_TRAMPOLINE,
7100 "__builtin_adjust_trampoline",
7101 ECF_CONST | ECF_NOTHROW);
7103 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7104 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7105 ftype = build_function_type (void_type_node, tmp);
7106 local_define_builtin ("__builtin_nonlocal_goto", ftype,
7107 BUILT_IN_NONLOCAL_GOTO,
7108 "__builtin_nonlocal_goto",
7109 ECF_NORETURN | ECF_NOTHROW);
7111 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7112 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7113 ftype = build_function_type (void_type_node, tmp);
7114 local_define_builtin ("__builtin_setjmp_setup", ftype,
7115 BUILT_IN_SETJMP_SETUP,
7116 "__builtin_setjmp_setup", ECF_NOTHROW);
7118 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7119 ftype = build_function_type (ptr_type_node, tmp);
7120 local_define_builtin ("__builtin_setjmp_dispatcher", ftype,
7121 BUILT_IN_SETJMP_DISPATCHER,
7122 "__builtin_setjmp_dispatcher",
7123 ECF_PURE | ECF_NOTHROW);
7125 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7126 ftype = build_function_type (void_type_node, tmp);
7127 local_define_builtin ("__builtin_setjmp_receiver", ftype,
7128 BUILT_IN_SETJMP_RECEIVER,
7129 "__builtin_setjmp_receiver", ECF_NOTHROW);
7131 ftype = build_function_type (ptr_type_node, void_list_node);
7132 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
7133 "__builtin_stack_save", ECF_NOTHROW);
7135 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7136 ftype = build_function_type (void_type_node, tmp);
7137 local_define_builtin ("__builtin_stack_restore", ftype,
7138 BUILT_IN_STACK_RESTORE,
7139 "__builtin_stack_restore", ECF_NOTHROW);
7141 ftype = build_function_type (void_type_node, void_list_node);
7142 local_define_builtin ("__builtin_profile_func_enter", ftype,
7143 BUILT_IN_PROFILE_FUNC_ENTER, "profile_func_enter", 0);
7144 local_define_builtin ("__builtin_profile_func_exit", ftype,
7145 BUILT_IN_PROFILE_FUNC_EXIT, "profile_func_exit", 0);
7147 /* Complex multiplication and division. These are handled as builtins
7148 rather than optabs because emit_library_call_value doesn't support
7149 complex. Further, we can do slightly better with folding these
7150 beasties if the real and complex parts of the arguments are separate. */
7152 enum machine_mode mode;
7154 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
7156 char mode_name_buf[4], *q;
7157 const char *p;
7158 enum built_in_function mcode, dcode;
7159 tree type, inner_type;
7161 type = lang_hooks.types.type_for_mode (mode, 0);
7162 if (type == NULL)
7163 continue;
7164 inner_type = TREE_TYPE (type);
7166 tmp = tree_cons (NULL_TREE, inner_type, void_list_node);
7167 tmp = tree_cons (NULL_TREE, inner_type, tmp);
7168 tmp = tree_cons (NULL_TREE, inner_type, tmp);
7169 tmp = tree_cons (NULL_TREE, inner_type, tmp);
7170 ftype = build_function_type (type, tmp);
7172 mcode = BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT;
7173 dcode = BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT;
7175 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
7176 *q = TOLOWER (*p);
7177 *q = '\0';
7179 built_in_names[mcode] = concat ("__mul", mode_name_buf, "3", NULL);
7180 local_define_builtin (built_in_names[mcode], ftype, mcode,
7181 built_in_names[mcode], ECF_CONST | ECF_NOTHROW);
7183 built_in_names[dcode] = concat ("__div", mode_name_buf, "3", NULL);
7184 local_define_builtin (built_in_names[dcode], ftype, dcode,
7185 built_in_names[dcode], ECF_CONST | ECF_NOTHROW);
7190 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
7191 better way.
7193 If we requested a pointer to a vector, build up the pointers that
7194 we stripped off while looking for the inner type. Similarly for
7195 return values from functions.
7197 The argument TYPE is the top of the chain, and BOTTOM is the
7198 new type which we will point to. */
7200 tree
7201 reconstruct_complex_type (tree type, tree bottom)
7203 tree inner, outer;
7205 if (POINTER_TYPE_P (type))
7207 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
7208 outer = build_pointer_type (inner);
7210 else if (TREE_CODE (type) == ARRAY_TYPE)
7212 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
7213 outer = build_array_type (inner, TYPE_DOMAIN (type));
7215 else if (TREE_CODE (type) == FUNCTION_TYPE)
7217 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
7218 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
7220 else if (TREE_CODE (type) == METHOD_TYPE)
7222 tree argtypes;
7223 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
7224 /* The build_method_type_directly() routine prepends 'this' to argument list,
7225 so we must compensate by getting rid of it. */
7226 argtypes = TYPE_ARG_TYPES (type);
7227 outer = build_method_type_directly (TYPE_METHOD_BASETYPE (type),
7228 inner,
7229 TYPE_ARG_TYPES (type));
7230 TYPE_ARG_TYPES (outer) = argtypes;
7232 else
7233 return bottom;
7235 TYPE_READONLY (outer) = TYPE_READONLY (type);
7236 TYPE_VOLATILE (outer) = TYPE_VOLATILE (type);
7238 return outer;
7241 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
7242 the inner type. */
7243 tree
7244 build_vector_type_for_mode (tree innertype, enum machine_mode mode)
7246 int nunits;
7248 switch (GET_MODE_CLASS (mode))
7250 case MODE_VECTOR_INT:
7251 case MODE_VECTOR_FLOAT:
7252 nunits = GET_MODE_NUNITS (mode);
7253 break;
7255 case MODE_INT:
7256 /* Check that there are no leftover bits. */
7257 gcc_assert (GET_MODE_BITSIZE (mode)
7258 % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
7260 nunits = GET_MODE_BITSIZE (mode)
7261 / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
7262 break;
7264 default:
7265 gcc_unreachable ();
7268 return make_vector_type (innertype, nunits, mode);
7271 /* Similarly, but takes the inner type and number of units, which must be
7272 a power of two. */
7274 tree
7275 build_vector_type (tree innertype, int nunits)
7277 return make_vector_type (innertype, nunits, VOIDmode);
7281 /* Build RESX_EXPR with given REGION_NUMBER. */
7282 tree
7283 build_resx (int region_number)
7285 tree t;
7286 t = build1 (RESX_EXPR, void_type_node,
7287 build_int_cst (NULL_TREE, region_number));
7288 return t;
7291 /* Given an initializer INIT, return TRUE if INIT is zero or some
7292 aggregate of zeros. Otherwise return FALSE. */
7293 bool
7294 initializer_zerop (tree init)
7296 tree elt;
7298 STRIP_NOPS (init);
7300 switch (TREE_CODE (init))
7302 case INTEGER_CST:
7303 return integer_zerop (init);
7305 case REAL_CST:
7306 /* ??? Note that this is not correct for C4X float formats. There,
7307 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
7308 negative exponent. */
7309 return real_zerop (init)
7310 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
7312 case COMPLEX_CST:
7313 return integer_zerop (init)
7314 || (real_zerop (init)
7315 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
7316 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
7318 case VECTOR_CST:
7319 for (elt = TREE_VECTOR_CST_ELTS (init); elt; elt = TREE_CHAIN (elt))
7320 if (!initializer_zerop (TREE_VALUE (elt)))
7321 return false;
7322 return true;
7324 case CONSTRUCTOR:
7326 unsigned HOST_WIDE_INT idx;
7328 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
7329 if (!initializer_zerop (elt))
7330 return false;
7331 return true;
7334 default:
7335 return false;
7339 /* Build an empty statement. */
7341 tree
7342 build_empty_stmt (void)
7344 return build1 (NOP_EXPR, void_type_node, size_zero_node);
7348 /* Build an OpenMP clause with code CODE. */
7350 tree
7351 build_omp_clause (enum omp_clause_code code)
7353 tree t;
7354 int size, length;
7356 length = omp_clause_num_ops[code];
7357 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
7359 t = ggc_alloc (size);
7360 memset (t, 0, size);
7361 TREE_SET_CODE (t, OMP_CLAUSE);
7362 OMP_CLAUSE_SET_CODE (t, code);
7364 #ifdef GATHER_STATISTICS
7365 tree_node_counts[(int) omp_clause_kind]++;
7366 tree_node_sizes[(int) omp_clause_kind] += size;
7367 #endif
7369 return t;
7372 /* Set various status flags when building a CALL_EXPR object T. */
7374 static void
7375 process_call_operands (tree t)
7377 bool side_effects;
7379 side_effects = TREE_SIDE_EFFECTS (t);
7380 if (!side_effects)
7382 int i, n;
7383 n = TREE_OPERAND_LENGTH (t);
7384 for (i = 1; i < n; i++)
7386 tree op = TREE_OPERAND (t, i);
7387 if (op && TREE_SIDE_EFFECTS (op))
7389 side_effects = 1;
7390 break;
7394 if (!side_effects)
7396 int i;
7398 /* Calls have side-effects, except those to const or
7399 pure functions. */
7400 i = call_expr_flags (t);
7401 if (!(i & (ECF_CONST | ECF_PURE)))
7402 side_effects = 1;
7404 TREE_SIDE_EFFECTS (t) = side_effects;
7407 /* Build a tcc_vl_exp object with code CODE and room for LEN operands. LEN
7408 includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
7409 Except for the CODE and operand count field, other storage for the
7410 object is initialized to zeros. */
7412 tree
7413 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
7415 tree t;
7416 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
7418 gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
7419 gcc_assert (len >= 1);
7421 #ifdef GATHER_STATISTICS
7422 tree_node_counts[(int) e_kind]++;
7423 tree_node_sizes[(int) e_kind] += length;
7424 #endif
7426 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
7428 memset (t, 0, length);
7430 TREE_SET_CODE (t, code);
7432 /* Can't use TREE_OPERAND to store the length because if checking is
7433 enabled, it will try to check the length before we store it. :-P */
7434 t->exp.operands[0] = build_int_cst (sizetype, len);
7436 return t;
7440 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE
7441 and FN and a null static chain slot. ARGLIST is a TREE_LIST of the
7442 arguments. */
7444 tree
7445 build_call_list (tree return_type, tree fn, tree arglist)
7447 tree t;
7448 int i;
7450 t = build_vl_exp (CALL_EXPR, list_length (arglist) + 3);
7451 TREE_TYPE (t) = return_type;
7452 CALL_EXPR_FN (t) = fn;
7453 CALL_EXPR_STATIC_CHAIN (t) = NULL_TREE;
7454 for (i = 0; arglist; arglist = TREE_CHAIN (arglist), i++)
7455 CALL_EXPR_ARG (t, i) = TREE_VALUE (arglist);
7456 process_call_operands (t);
7457 return t;
7460 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
7461 FN and a null static chain slot. NARGS is the number of call arguments
7462 which are specified as "..." arguments. */
7464 tree
7465 build_call_nary (tree return_type, tree fn, int nargs, ...)
7467 tree ret;
7468 va_list args;
7469 va_start (args, nargs);
7470 ret = build_call_valist (return_type, fn, nargs, args);
7471 va_end (args);
7472 return ret;
7475 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
7476 FN and a null static chain slot. NARGS is the number of call arguments
7477 which are specified as a va_list ARGS. */
7479 tree
7480 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
7482 tree t;
7483 int i;
7485 t = build_vl_exp (CALL_EXPR, nargs + 3);
7486 TREE_TYPE (t) = return_type;
7487 CALL_EXPR_FN (t) = fn;
7488 CALL_EXPR_STATIC_CHAIN (t) = NULL_TREE;
7489 for (i = 0; i < nargs; i++)
7490 CALL_EXPR_ARG (t, i) = va_arg (args, tree);
7491 process_call_operands (t);
7492 return t;
7495 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
7496 FN and a null static chain slot. NARGS is the number of call arguments
7497 which are specified as a tree array ARGS. */
7499 tree
7500 build_call_array (tree return_type, tree fn, int nargs, tree *args)
7502 tree t;
7503 int i;
7505 t = build_vl_exp (CALL_EXPR, nargs + 3);
7506 TREE_TYPE (t) = return_type;
7507 CALL_EXPR_FN (t) = fn;
7508 CALL_EXPR_STATIC_CHAIN (t) = NULL_TREE;
7509 for (i = 0; i < nargs; i++)
7510 CALL_EXPR_ARG (t, i) = args[i];
7511 process_call_operands (t);
7512 return t;
7516 /* Returns true if it is possible to prove that the index of
7517 an array access REF (an ARRAY_REF expression) falls into the
7518 array bounds. */
7520 bool
7521 in_array_bounds_p (tree ref)
7523 tree idx = TREE_OPERAND (ref, 1);
7524 tree min, max;
7526 if (TREE_CODE (idx) != INTEGER_CST)
7527 return false;
7529 min = array_ref_low_bound (ref);
7530 max = array_ref_up_bound (ref);
7531 if (!min
7532 || !max
7533 || TREE_CODE (min) != INTEGER_CST
7534 || TREE_CODE (max) != INTEGER_CST)
7535 return false;
7537 if (tree_int_cst_lt (idx, min)
7538 || tree_int_cst_lt (max, idx))
7539 return false;
7541 return true;
7544 /* Returns true if it is possible to prove that the range of
7545 an array access REF (an ARRAY_RANGE_REF expression) falls
7546 into the array bounds. */
7548 bool
7549 range_in_array_bounds_p (tree ref)
7551 tree domain_type = TYPE_DOMAIN (TREE_TYPE (ref));
7552 tree range_min, range_max, min, max;
7554 range_min = TYPE_MIN_VALUE (domain_type);
7555 range_max = TYPE_MAX_VALUE (domain_type);
7556 if (!range_min
7557 || !range_max
7558 || TREE_CODE (range_min) != INTEGER_CST
7559 || TREE_CODE (range_max) != INTEGER_CST)
7560 return false;
7562 min = array_ref_low_bound (ref);
7563 max = array_ref_up_bound (ref);
7564 if (!min
7565 || !max
7566 || TREE_CODE (min) != INTEGER_CST
7567 || TREE_CODE (max) != INTEGER_CST)
7568 return false;
7570 if (tree_int_cst_lt (range_min, min)
7571 || tree_int_cst_lt (max, range_max))
7572 return false;
7574 return true;
7577 /* Return true if T (assumed to be a DECL) is a global variable. */
7579 bool
7580 is_global_var (tree t)
7582 if (MTAG_P (t))
7583 return (TREE_STATIC (t) || MTAG_GLOBAL (t));
7584 else
7585 return (TREE_STATIC (t) || DECL_EXTERNAL (t));
7588 /* Return true if T (assumed to be a DECL) must be assigned a memory
7589 location. */
7591 bool
7592 needs_to_live_in_memory (tree t)
7594 if (TREE_CODE (t) == SSA_NAME)
7595 t = SSA_NAME_VAR (t);
7597 return (TREE_ADDRESSABLE (t)
7598 || is_global_var (t)
7599 || (TREE_CODE (t) == RESULT_DECL
7600 && aggregate_value_p (t, current_function_decl)));
7603 /* There are situations in which a language considers record types
7604 compatible which have different field lists. Decide if two fields
7605 are compatible. It is assumed that the parent records are compatible. */
7607 bool
7608 fields_compatible_p (tree f1, tree f2)
7610 if (!operand_equal_p (DECL_FIELD_BIT_OFFSET (f1),
7611 DECL_FIELD_BIT_OFFSET (f2), OEP_ONLY_CONST))
7612 return false;
7614 if (!operand_equal_p (DECL_FIELD_OFFSET (f1),
7615 DECL_FIELD_OFFSET (f2), OEP_ONLY_CONST))
7616 return false;
7618 if (!lang_hooks.types_compatible_p (TREE_TYPE (f1), TREE_TYPE (f2)))
7619 return false;
7621 return true;
7624 /* Locate within RECORD a field that is compatible with ORIG_FIELD. */
7626 tree
7627 find_compatible_field (tree record, tree orig_field)
7629 tree f;
7631 for (f = TYPE_FIELDS (record); f ; f = TREE_CHAIN (f))
7632 if (TREE_CODE (f) == FIELD_DECL
7633 && fields_compatible_p (f, orig_field))
7634 return f;
7636 /* ??? Why isn't this on the main fields list? */
7637 f = TYPE_VFIELD (record);
7638 if (f && TREE_CODE (f) == FIELD_DECL
7639 && fields_compatible_p (f, orig_field))
7640 return f;
7642 /* ??? We should abort here, but Java appears to do Bad Things
7643 with inherited fields. */
7644 return orig_field;
7647 /* Return value of a constant X. */
7649 HOST_WIDE_INT
7650 int_cst_value (tree x)
7652 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
7653 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
7654 bool negative = ((val >> (bits - 1)) & 1) != 0;
7656 gcc_assert (bits <= HOST_BITS_PER_WIDE_INT);
7658 if (negative)
7659 val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
7660 else
7661 val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
7663 return val;
7667 /* Returns unsigned variant of TYPE. */
7669 tree
7670 unsigned_type_for (tree type)
7672 if (POINTER_TYPE_P (type))
7673 return lang_hooks.types.unsigned_type (size_type_node);
7674 return lang_hooks.types.unsigned_type (type);
7677 /* Returns signed variant of TYPE. */
7679 tree
7680 signed_type_for (tree type)
7682 if (POINTER_TYPE_P (type))
7683 return lang_hooks.types.signed_type (size_type_node);
7684 return lang_hooks.types.signed_type (type);
7687 /* Returns the largest value obtainable by casting something in INNER type to
7688 OUTER type. */
7690 tree
7691 upper_bound_in_type (tree outer, tree inner)
7693 unsigned HOST_WIDE_INT lo, hi;
7694 unsigned int det = 0;
7695 unsigned oprec = TYPE_PRECISION (outer);
7696 unsigned iprec = TYPE_PRECISION (inner);
7697 unsigned prec;
7699 /* Compute a unique number for every combination. */
7700 det |= (oprec > iprec) ? 4 : 0;
7701 det |= TYPE_UNSIGNED (outer) ? 2 : 0;
7702 det |= TYPE_UNSIGNED (inner) ? 1 : 0;
7704 /* Determine the exponent to use. */
7705 switch (det)
7707 case 0:
7708 case 1:
7709 /* oprec <= iprec, outer: signed, inner: don't care. */
7710 prec = oprec - 1;
7711 break;
7712 case 2:
7713 case 3:
7714 /* oprec <= iprec, outer: unsigned, inner: don't care. */
7715 prec = oprec;
7716 break;
7717 case 4:
7718 /* oprec > iprec, outer: signed, inner: signed. */
7719 prec = iprec - 1;
7720 break;
7721 case 5:
7722 /* oprec > iprec, outer: signed, inner: unsigned. */
7723 prec = iprec;
7724 break;
7725 case 6:
7726 /* oprec > iprec, outer: unsigned, inner: signed. */
7727 prec = oprec;
7728 break;
7729 case 7:
7730 /* oprec > iprec, outer: unsigned, inner: unsigned. */
7731 prec = iprec;
7732 break;
7733 default:
7734 gcc_unreachable ();
7737 /* Compute 2^^prec - 1. */
7738 if (prec <= HOST_BITS_PER_WIDE_INT)
7740 hi = 0;
7741 lo = ((~(unsigned HOST_WIDE_INT) 0)
7742 >> (HOST_BITS_PER_WIDE_INT - prec));
7744 else
7746 hi = ((~(unsigned HOST_WIDE_INT) 0)
7747 >> (2 * HOST_BITS_PER_WIDE_INT - prec));
7748 lo = ~(unsigned HOST_WIDE_INT) 0;
7751 return build_int_cst_wide (outer, lo, hi);
7754 /* Returns the smallest value obtainable by casting something in INNER type to
7755 OUTER type. */
7757 tree
7758 lower_bound_in_type (tree outer, tree inner)
7760 unsigned HOST_WIDE_INT lo, hi;
7761 unsigned oprec = TYPE_PRECISION (outer);
7762 unsigned iprec = TYPE_PRECISION (inner);
7764 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
7765 and obtain 0. */
7766 if (TYPE_UNSIGNED (outer)
7767 /* If we are widening something of an unsigned type, OUTER type
7768 contains all values of INNER type. In particular, both INNER
7769 and OUTER types have zero in common. */
7770 || (oprec > iprec && TYPE_UNSIGNED (inner)))
7771 lo = hi = 0;
7772 else
7774 /* If we are widening a signed type to another signed type, we
7775 want to obtain -2^^(iprec-1). If we are keeping the
7776 precision or narrowing to a signed type, we want to obtain
7777 -2^(oprec-1). */
7778 unsigned prec = oprec > iprec ? iprec : oprec;
7780 if (prec <= HOST_BITS_PER_WIDE_INT)
7782 hi = ~(unsigned HOST_WIDE_INT) 0;
7783 lo = (~(unsigned HOST_WIDE_INT) 0) << (prec - 1);
7785 else
7787 hi = ((~(unsigned HOST_WIDE_INT) 0)
7788 << (prec - HOST_BITS_PER_WIDE_INT - 1));
7789 lo = 0;
7793 return build_int_cst_wide (outer, lo, hi);
7796 /* Return nonzero if two operands that are suitable for PHI nodes are
7797 necessarily equal. Specifically, both ARG0 and ARG1 must be either
7798 SSA_NAME or invariant. Note that this is strictly an optimization.
7799 That is, callers of this function can directly call operand_equal_p
7800 and get the same result, only slower. */
7803 operand_equal_for_phi_arg_p (tree arg0, tree arg1)
7805 if (arg0 == arg1)
7806 return 1;
7807 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
7808 return 0;
7809 return operand_equal_p (arg0, arg1, 0);
7812 /* Returns number of zeros at the end of binary representation of X.
7814 ??? Use ffs if available? */
7816 tree
7817 num_ending_zeros (tree x)
7819 unsigned HOST_WIDE_INT fr, nfr;
7820 unsigned num, abits;
7821 tree type = TREE_TYPE (x);
7823 if (TREE_INT_CST_LOW (x) == 0)
7825 num = HOST_BITS_PER_WIDE_INT;
7826 fr = TREE_INT_CST_HIGH (x);
7828 else
7830 num = 0;
7831 fr = TREE_INT_CST_LOW (x);
7834 for (abits = HOST_BITS_PER_WIDE_INT / 2; abits; abits /= 2)
7836 nfr = fr >> abits;
7837 if (nfr << abits == fr)
7839 num += abits;
7840 fr = nfr;
7844 if (num > TYPE_PRECISION (type))
7845 num = TYPE_PRECISION (type);
7847 return build_int_cst_type (type, num);
7851 #define WALK_SUBTREE(NODE) \
7852 do \
7854 result = walk_tree (&(NODE), func, data, pset); \
7855 if (result) \
7856 return result; \
7858 while (0)
7860 /* This is a subroutine of walk_tree that walks field of TYPE that are to
7861 be walked whenever a type is seen in the tree. Rest of operands and return
7862 value are as for walk_tree. */
7864 static tree
7865 walk_type_fields (tree type, walk_tree_fn func, void *data,
7866 struct pointer_set_t *pset)
7868 tree result = NULL_TREE;
7870 switch (TREE_CODE (type))
7872 case POINTER_TYPE:
7873 case REFERENCE_TYPE:
7874 /* We have to worry about mutually recursive pointers. These can't
7875 be written in C. They can in Ada. It's pathological, but
7876 there's an ACATS test (c38102a) that checks it. Deal with this
7877 by checking if we're pointing to another pointer, that one
7878 points to another pointer, that one does too, and we have no htab.
7879 If so, get a hash table. We check three levels deep to avoid
7880 the cost of the hash table if we don't need one. */
7881 if (POINTER_TYPE_P (TREE_TYPE (type))
7882 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
7883 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
7884 && !pset)
7886 result = walk_tree_without_duplicates (&TREE_TYPE (type),
7887 func, data);
7888 if (result)
7889 return result;
7891 break;
7894 /* ... fall through ... */
7896 case COMPLEX_TYPE:
7897 WALK_SUBTREE (TREE_TYPE (type));
7898 break;
7900 case METHOD_TYPE:
7901 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
7903 /* Fall through. */
7905 case FUNCTION_TYPE:
7906 WALK_SUBTREE (TREE_TYPE (type));
7908 tree arg;
7910 /* We never want to walk into default arguments. */
7911 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
7912 WALK_SUBTREE (TREE_VALUE (arg));
7914 break;
7916 case ARRAY_TYPE:
7917 /* Don't follow this nodes's type if a pointer for fear that we'll
7918 have infinite recursion. Those types are uninteresting anyway. */
7919 if (!POINTER_TYPE_P (TREE_TYPE (type))
7920 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE)
7921 WALK_SUBTREE (TREE_TYPE (type));
7922 WALK_SUBTREE (TYPE_DOMAIN (type));
7923 break;
7925 case OFFSET_TYPE:
7926 WALK_SUBTREE (TREE_TYPE (type));
7927 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
7928 break;
7930 default:
7931 break;
7934 return NULL_TREE;
7937 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is
7938 called with the DATA and the address of each sub-tree. If FUNC returns a
7939 non-NULL value, the traversal is stopped, and the value returned by FUNC
7940 is returned. If PSET is non-NULL it is used to record the nodes visited,
7941 and to avoid visiting a node more than once. */
7943 tree
7944 walk_tree (tree *tp, walk_tree_fn func, void *data, struct pointer_set_t *pset)
7946 enum tree_code code;
7947 int walk_subtrees;
7948 tree result;
7950 #define WALK_SUBTREE_TAIL(NODE) \
7951 do \
7953 tp = & (NODE); \
7954 goto tail_recurse; \
7956 while (0)
7958 tail_recurse:
7959 /* Skip empty subtrees. */
7960 if (!*tp)
7961 return NULL_TREE;
7963 /* Don't walk the same tree twice, if the user has requested
7964 that we avoid doing so. */
7965 if (pset && pointer_set_insert (pset, *tp))
7966 return NULL_TREE;
7968 /* Call the function. */
7969 walk_subtrees = 1;
7970 result = (*func) (tp, &walk_subtrees, data);
7972 /* If we found something, return it. */
7973 if (result)
7974 return result;
7976 code = TREE_CODE (*tp);
7978 /* Even if we didn't, FUNC may have decided that there was nothing
7979 interesting below this point in the tree. */
7980 if (!walk_subtrees)
7982 /* But we still need to check our siblings. */
7983 if (code == TREE_LIST)
7984 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
7985 else if (code == OMP_CLAUSE)
7986 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
7987 else
7988 return NULL_TREE;
7991 result = lang_hooks.tree_inlining.walk_subtrees (tp, &walk_subtrees, func,
7992 data, pset);
7993 if (result || !walk_subtrees)
7994 return result;
7996 switch (code)
7998 case ERROR_MARK:
7999 case IDENTIFIER_NODE:
8000 case INTEGER_CST:
8001 case REAL_CST:
8002 case VECTOR_CST:
8003 case STRING_CST:
8004 case BLOCK:
8005 case PLACEHOLDER_EXPR:
8006 case SSA_NAME:
8007 case FIELD_DECL:
8008 case RESULT_DECL:
8009 /* None of these have subtrees other than those already walked
8010 above. */
8011 break;
8013 case TREE_LIST:
8014 WALK_SUBTREE (TREE_VALUE (*tp));
8015 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
8016 break;
8018 case TREE_VEC:
8020 int len = TREE_VEC_LENGTH (*tp);
8022 if (len == 0)
8023 break;
8025 /* Walk all elements but the first. */
8026 while (--len)
8027 WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
8029 /* Now walk the first one as a tail call. */
8030 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
8033 case COMPLEX_CST:
8034 WALK_SUBTREE (TREE_REALPART (*tp));
8035 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
8037 case CONSTRUCTOR:
8039 unsigned HOST_WIDE_INT idx;
8040 constructor_elt *ce;
8042 for (idx = 0;
8043 VEC_iterate(constructor_elt, CONSTRUCTOR_ELTS (*tp), idx, ce);
8044 idx++)
8045 WALK_SUBTREE (ce->value);
8047 break;
8049 case SAVE_EXPR:
8050 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
8052 case BIND_EXPR:
8054 tree decl;
8055 for (decl = BIND_EXPR_VARS (*tp); decl; decl = TREE_CHAIN (decl))
8057 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk
8058 into declarations that are just mentioned, rather than
8059 declared; they don't really belong to this part of the tree.
8060 And, we can see cycles: the initializer for a declaration
8061 can refer to the declaration itself. */
8062 WALK_SUBTREE (DECL_INITIAL (decl));
8063 WALK_SUBTREE (DECL_SIZE (decl));
8064 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
8066 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
8069 case STATEMENT_LIST:
8071 tree_stmt_iterator i;
8072 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
8073 WALK_SUBTREE (*tsi_stmt_ptr (i));
8075 break;
8077 case OMP_CLAUSE:
8078 switch (OMP_CLAUSE_CODE (*tp))
8080 case OMP_CLAUSE_PRIVATE:
8081 case OMP_CLAUSE_SHARED:
8082 case OMP_CLAUSE_FIRSTPRIVATE:
8083 case OMP_CLAUSE_LASTPRIVATE:
8084 case OMP_CLAUSE_COPYIN:
8085 case OMP_CLAUSE_COPYPRIVATE:
8086 case OMP_CLAUSE_IF:
8087 case OMP_CLAUSE_NUM_THREADS:
8088 case OMP_CLAUSE_SCHEDULE:
8089 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
8090 /* FALLTHRU */
8092 case OMP_CLAUSE_NOWAIT:
8093 case OMP_CLAUSE_ORDERED:
8094 case OMP_CLAUSE_DEFAULT:
8095 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
8097 case OMP_CLAUSE_REDUCTION:
8099 int i;
8100 for (i = 0; i < 4; i++)
8101 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
8102 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
8105 default:
8106 gcc_unreachable ();
8108 break;
8110 case TARGET_EXPR:
8112 int i, len;
8114 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
8115 But, we only want to walk once. */
8116 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
8117 for (i = 0; i < len; ++i)
8118 WALK_SUBTREE (TREE_OPERAND (*tp, i));
8119 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
8122 case DECL_EXPR:
8123 /* If this is a TYPE_DECL, walk into the fields of the type that it's
8124 defining. We only want to walk into these fields of a type in this
8125 case and not in the general case of a mere reference to the type.
8127 The criterion is as follows: if the field can be an expression, it
8128 must be walked only here. This should be in keeping with the fields
8129 that are directly gimplified in gimplify_type_sizes in order for the
8130 mark/copy-if-shared/unmark machinery of the gimplifier to work with
8131 variable-sized types.
8133 Note that DECLs get walked as part of processing the BIND_EXPR. */
8134 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
8136 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
8137 if (TREE_CODE (*type_p) == ERROR_MARK)
8138 return NULL_TREE;
8140 /* Call the function for the type. See if it returns anything or
8141 doesn't want us to continue. If we are to continue, walk both
8142 the normal fields and those for the declaration case. */
8143 result = (*func) (type_p, &walk_subtrees, data);
8144 if (result || !walk_subtrees)
8145 return result;
8147 result = walk_type_fields (*type_p, func, data, pset);
8148 if (result)
8149 return result;
8151 /* If this is a record type, also walk the fields. */
8152 if (TREE_CODE (*type_p) == RECORD_TYPE
8153 || TREE_CODE (*type_p) == UNION_TYPE
8154 || TREE_CODE (*type_p) == QUAL_UNION_TYPE)
8156 tree field;
8158 for (field = TYPE_FIELDS (*type_p); field;
8159 field = TREE_CHAIN (field))
8161 /* We'd like to look at the type of the field, but we can
8162 easily get infinite recursion. So assume it's pointed
8163 to elsewhere in the tree. Also, ignore things that
8164 aren't fields. */
8165 if (TREE_CODE (field) != FIELD_DECL)
8166 continue;
8168 WALK_SUBTREE (DECL_FIELD_OFFSET (field));
8169 WALK_SUBTREE (DECL_SIZE (field));
8170 WALK_SUBTREE (DECL_SIZE_UNIT (field));
8171 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
8172 WALK_SUBTREE (DECL_QUALIFIER (field));
8176 /* Same for scalar types. */
8177 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
8178 || TREE_CODE (*type_p) == ENUMERAL_TYPE
8179 || TREE_CODE (*type_p) == INTEGER_TYPE
8180 || TREE_CODE (*type_p) == REAL_TYPE)
8182 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
8183 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
8186 WALK_SUBTREE (TYPE_SIZE (*type_p));
8187 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
8189 /* FALLTHRU */
8191 default:
8192 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code))
8193 || IS_GIMPLE_STMT_CODE_CLASS (TREE_CODE_CLASS (code)))
8195 int i, len;
8197 /* Walk over all the sub-trees of this operand. */
8198 len = TREE_OPERAND_LENGTH (*tp);
8200 /* Go through the subtrees. We need to do this in forward order so
8201 that the scope of a FOR_EXPR is handled properly. */
8202 if (len)
8204 for (i = 0; i < len - 1; ++i)
8205 WALK_SUBTREE (GENERIC_TREE_OPERAND (*tp, i));
8206 WALK_SUBTREE_TAIL (GENERIC_TREE_OPERAND (*tp, len - 1));
8209 /* If this is a type, walk the needed fields in the type. */
8210 else if (TYPE_P (*tp))
8211 return walk_type_fields (*tp, func, data, pset);
8212 break;
8215 /* We didn't find what we were looking for. */
8216 return NULL_TREE;
8218 #undef WALK_SUBTREE_TAIL
8220 #undef WALK_SUBTREE
8222 /* Like walk_tree, but does not walk duplicate nodes more than once. */
8224 tree
8225 walk_tree_without_duplicates (tree *tp, walk_tree_fn func, void *data)
8227 tree result;
8228 struct pointer_set_t *pset;
8230 pset = pointer_set_create ();
8231 result = walk_tree (tp, func, data, pset);
8232 pointer_set_destroy (pset);
8233 return result;
8237 /* Return true if STMT is an empty statement or contains nothing but
8238 empty statements. */
8240 bool
8241 empty_body_p (tree stmt)
8243 tree_stmt_iterator i;
8244 tree body;
8246 if (IS_EMPTY_STMT (stmt))
8247 return true;
8248 else if (TREE_CODE (stmt) == BIND_EXPR)
8249 body = BIND_EXPR_BODY (stmt);
8250 else if (TREE_CODE (stmt) == STATEMENT_LIST)
8251 body = stmt;
8252 else
8253 return false;
8255 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
8256 if (!empty_body_p (tsi_stmt (i)))
8257 return false;
8259 return true;
8262 tree *
8263 tree_block (tree t)
8265 char const c = TREE_CODE_CLASS (TREE_CODE (t));
8267 if (IS_EXPR_CODE_CLASS (c))
8268 return &t->exp.block;
8269 else if (IS_GIMPLE_STMT_CODE_CLASS (c))
8270 return &GIMPLE_STMT_BLOCK (t);
8271 gcc_unreachable ();
8272 return NULL;
8275 tree *
8276 generic_tree_operand (tree node, int i)
8278 if (GIMPLE_STMT_P (node))
8279 return &GIMPLE_STMT_OPERAND (node, i);
8280 return &TREE_OPERAND (node, i);
8283 tree *
8284 generic_tree_type (tree node)
8286 if (GIMPLE_STMT_P (node))
8287 return &void_type_node;
8288 return &TREE_TYPE (node);
8291 /* Build and return a TREE_LIST of arguments in the CALL_EXPR exp.
8292 FIXME: don't use this function. It exists for compatibility with
8293 the old representation of CALL_EXPRs where a list was used to hold the
8294 arguments. Places that currently extract the arglist from a CALL_EXPR
8295 ought to be rewritten to use the CALL_EXPR itself. */
8296 tree
8297 call_expr_arglist (tree exp)
8299 tree arglist = NULL_TREE;
8300 int i;
8301 for (i = call_expr_nargs (exp) - 1; i >= 0; i--)
8302 arglist = tree_cons (NULL_TREE, CALL_EXPR_ARG (exp, i), arglist);
8303 return arglist;
8306 #include "gt-tree.h"