re PR tree-optimization/19831 (Missing DSE/malloc/free optimization)
[official-gcc.git] / gcc / tree.c
blob0a42109065c2f71e394b1399c6dcaf9785babacb
1 /* Language-independent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2013 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 /* This file contains the low level primitives for operating on tree nodes,
21 including allocation, list operations, interning of identifiers,
22 construction of data type nodes and statement nodes,
23 and construction of type conversion nodes. It also contains
24 tables index by tree code that describe how to take apart
25 nodes of that code.
27 It is intended to be language-independent, but occasionally
28 calls language-dependent routines defined (for C) in typecheck.c. */
30 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "tm.h"
34 #include "flags.h"
35 #include "tree.h"
36 #include "tm_p.h"
37 #include "function.h"
38 #include "obstack.h"
39 #include "toplev.h" /* get_random_seed */
40 #include "ggc.h"
41 #include "hashtab.h"
42 #include "filenames.h"
43 #include "output.h"
44 #include "target.h"
45 #include "common/common-target.h"
46 #include "langhooks.h"
47 #include "tree-inline.h"
48 #include "tree-iterator.h"
49 #include "basic-block.h"
50 #include "bitmap.h"
51 #include "gimple.h"
52 #include "gimple-ssa.h"
53 #include "cgraph.h"
54 #include "tree-phinodes.h"
55 #include "tree-ssanames.h"
56 #include "tree-dfa.h"
57 #include "params.h"
58 #include "pointer-set.h"
59 #include "tree-pass.h"
60 #include "langhooks-def.h"
61 #include "diagnostic.h"
62 #include "tree-diagnostic.h"
63 #include "tree-pretty-print.h"
64 #include "except.h"
65 #include "debug.h"
66 #include "intl.h"
68 /* Tree code classes. */
70 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
71 #define END_OF_BASE_TREE_CODES tcc_exceptional,
73 const enum tree_code_class tree_code_type[] = {
74 #include "all-tree.def"
77 #undef DEFTREECODE
78 #undef END_OF_BASE_TREE_CODES
80 /* Table indexed by tree code giving number of expression
81 operands beyond the fixed part of the node structure.
82 Not used for types or decls. */
84 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
85 #define END_OF_BASE_TREE_CODES 0,
87 const unsigned char tree_code_length[] = {
88 #include "all-tree.def"
91 #undef DEFTREECODE
92 #undef END_OF_BASE_TREE_CODES
94 /* Names of tree components.
95 Used for printing out the tree and error messages. */
96 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
97 #define END_OF_BASE_TREE_CODES "@dummy",
99 static const char *const tree_code_name[] = {
100 #include "all-tree.def"
103 #undef DEFTREECODE
104 #undef END_OF_BASE_TREE_CODES
106 /* Each tree code class has an associated string representation.
107 These must correspond to the tree_code_class entries. */
109 const char *const tree_code_class_strings[] =
111 "exceptional",
112 "constant",
113 "type",
114 "declaration",
115 "reference",
116 "comparison",
117 "unary",
118 "binary",
119 "statement",
120 "vl_exp",
121 "expression"
124 /* obstack.[ch] explicitly declined to prototype this. */
125 extern int _obstack_allocated_p (struct obstack *h, void *obj);
127 /* Statistics-gathering stuff. */
129 static int tree_code_counts[MAX_TREE_CODES];
130 int tree_node_counts[(int) all_kinds];
131 int tree_node_sizes[(int) all_kinds];
133 /* Keep in sync with tree.h:enum tree_node_kind. */
134 static const char * const tree_node_kind_names[] = {
135 "decls",
136 "types",
137 "blocks",
138 "stmts",
139 "refs",
140 "exprs",
141 "constants",
142 "identifiers",
143 "vecs",
144 "binfos",
145 "ssa names",
146 "constructors",
147 "random kinds",
148 "lang_decl kinds",
149 "lang_type kinds",
150 "omp clauses",
153 /* Unique id for next decl created. */
154 static GTY(()) int next_decl_uid;
155 /* Unique id for next type created. */
156 static GTY(()) int next_type_uid = 1;
157 /* Unique id for next debug decl created. Use negative numbers,
158 to catch erroneous uses. */
159 static GTY(()) int next_debug_decl_uid;
161 /* Since we cannot rehash a type after it is in the table, we have to
162 keep the hash code. */
164 struct GTY(()) type_hash {
165 unsigned long hash;
166 tree type;
169 /* Initial size of the hash table (rounded to next prime). */
170 #define TYPE_HASH_INITIAL_SIZE 1000
172 /* Now here is the hash table. When recording a type, it is added to
173 the slot whose index is the hash code. Note that the hash table is
174 used for several kinds of types (function types, array types and
175 array index range types, for now). While all these live in the
176 same table, they are completely independent, and the hash code is
177 computed differently for each of these. */
179 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
180 htab_t type_hash_table;
182 /* Hash table and temporary node for larger integer const values. */
183 static GTY (()) tree int_cst_node;
184 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
185 htab_t int_cst_hash_table;
187 /* Hash table for optimization flags and target option flags. Use the same
188 hash table for both sets of options. Nodes for building the current
189 optimization and target option nodes. The assumption is most of the time
190 the options created will already be in the hash table, so we avoid
191 allocating and freeing up a node repeatably. */
192 static GTY (()) tree cl_optimization_node;
193 static GTY (()) tree cl_target_option_node;
194 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
195 htab_t cl_option_hash_table;
197 /* General tree->tree mapping structure for use in hash tables. */
200 static GTY ((if_marked ("tree_decl_map_marked_p"), param_is (struct tree_decl_map)))
201 htab_t debug_expr_for_decl;
203 static GTY ((if_marked ("tree_decl_map_marked_p"), param_is (struct tree_decl_map)))
204 htab_t value_expr_for_decl;
206 static GTY ((if_marked ("tree_vec_map_marked_p"), param_is (struct tree_vec_map)))
207 htab_t debug_args_for_decl;
209 static GTY ((if_marked ("tree_priority_map_marked_p"),
210 param_is (struct tree_priority_map)))
211 htab_t init_priority_for_decl;
213 static void set_type_quals (tree, int);
214 static int type_hash_eq (const void *, const void *);
215 static hashval_t type_hash_hash (const void *);
216 static hashval_t int_cst_hash_hash (const void *);
217 static int int_cst_hash_eq (const void *, const void *);
218 static hashval_t cl_option_hash_hash (const void *);
219 static int cl_option_hash_eq (const void *, const void *);
220 static void print_type_hash_statistics (void);
221 static void print_debug_expr_statistics (void);
222 static void print_value_expr_statistics (void);
223 static int type_hash_marked_p (const void *);
224 static unsigned int type_hash_list (const_tree, hashval_t);
225 static unsigned int attribute_hash_list (const_tree, hashval_t);
226 static bool decls_same_for_odr (tree decl1, tree decl2);
228 tree global_trees[TI_MAX];
229 tree integer_types[itk_none];
231 unsigned char tree_contains_struct[MAX_TREE_CODES][64];
233 /* Number of operands for each OpenMP clause. */
234 unsigned const char omp_clause_num_ops[] =
236 0, /* OMP_CLAUSE_ERROR */
237 1, /* OMP_CLAUSE_PRIVATE */
238 1, /* OMP_CLAUSE_SHARED */
239 1, /* OMP_CLAUSE_FIRSTPRIVATE */
240 2, /* OMP_CLAUSE_LASTPRIVATE */
241 4, /* OMP_CLAUSE_REDUCTION */
242 1, /* OMP_CLAUSE_COPYIN */
243 1, /* OMP_CLAUSE_COPYPRIVATE */
244 2, /* OMP_CLAUSE_LINEAR */
245 2, /* OMP_CLAUSE_ALIGNED */
246 1, /* OMP_CLAUSE_DEPEND */
247 1, /* OMP_CLAUSE_UNIFORM */
248 2, /* OMP_CLAUSE_FROM */
249 2, /* OMP_CLAUSE_TO */
250 2, /* OMP_CLAUSE_MAP */
251 1, /* OMP_CLAUSE__LOOPTEMP_ */
252 1, /* OMP_CLAUSE_IF */
253 1, /* OMP_CLAUSE_NUM_THREADS */
254 1, /* OMP_CLAUSE_SCHEDULE */
255 0, /* OMP_CLAUSE_NOWAIT */
256 0, /* OMP_CLAUSE_ORDERED */
257 0, /* OMP_CLAUSE_DEFAULT */
258 3, /* OMP_CLAUSE_COLLAPSE */
259 0, /* OMP_CLAUSE_UNTIED */
260 1, /* OMP_CLAUSE_FINAL */
261 0, /* OMP_CLAUSE_MERGEABLE */
262 1, /* OMP_CLAUSE_DEVICE */
263 1, /* OMP_CLAUSE_DIST_SCHEDULE */
264 0, /* OMP_CLAUSE_INBRANCH */
265 0, /* OMP_CLAUSE_NOTINBRANCH */
266 1, /* OMP_CLAUSE_NUM_TEAMS */
267 1, /* OMP_CLAUSE_THREAD_LIMIT */
268 0, /* OMP_CLAUSE_PROC_BIND */
269 1, /* OMP_CLAUSE_SAFELEN */
270 1, /* OMP_CLAUSE_SIMDLEN */
271 0, /* OMP_CLAUSE_FOR */
272 0, /* OMP_CLAUSE_PARALLEL */
273 0, /* OMP_CLAUSE_SECTIONS */
274 0, /* OMP_CLAUSE_TASKGROUP */
275 1, /* OMP_CLAUSE__SIMDUID_ */
278 const char * const omp_clause_code_name[] =
280 "error_clause",
281 "private",
282 "shared",
283 "firstprivate",
284 "lastprivate",
285 "reduction",
286 "copyin",
287 "copyprivate",
288 "linear",
289 "aligned",
290 "depend",
291 "uniform",
292 "from",
293 "to",
294 "map",
295 "_looptemp_",
296 "if",
297 "num_threads",
298 "schedule",
299 "nowait",
300 "ordered",
301 "default",
302 "collapse",
303 "untied",
304 "final",
305 "mergeable",
306 "device",
307 "dist_schedule",
308 "inbranch",
309 "notinbranch",
310 "num_teams",
311 "thread_limit",
312 "proc_bind",
313 "safelen",
314 "simdlen",
315 "for",
316 "parallel",
317 "sections",
318 "taskgroup",
319 "_simduid_"
323 /* Return the tree node structure used by tree code CODE. */
325 static inline enum tree_node_structure_enum
326 tree_node_structure_for_code (enum tree_code code)
328 switch (TREE_CODE_CLASS (code))
330 case tcc_declaration:
332 switch (code)
334 case FIELD_DECL:
335 return TS_FIELD_DECL;
336 case PARM_DECL:
337 return TS_PARM_DECL;
338 case VAR_DECL:
339 return TS_VAR_DECL;
340 case LABEL_DECL:
341 return TS_LABEL_DECL;
342 case RESULT_DECL:
343 return TS_RESULT_DECL;
344 case DEBUG_EXPR_DECL:
345 return TS_DECL_WRTL;
346 case CONST_DECL:
347 return TS_CONST_DECL;
348 case TYPE_DECL:
349 return TS_TYPE_DECL;
350 case FUNCTION_DECL:
351 return TS_FUNCTION_DECL;
352 case TRANSLATION_UNIT_DECL:
353 return TS_TRANSLATION_UNIT_DECL;
354 default:
355 return TS_DECL_NON_COMMON;
358 case tcc_type:
359 return TS_TYPE_NON_COMMON;
360 case tcc_reference:
361 case tcc_comparison:
362 case tcc_unary:
363 case tcc_binary:
364 case tcc_expression:
365 case tcc_statement:
366 case tcc_vl_exp:
367 return TS_EXP;
368 default: /* tcc_constant and tcc_exceptional */
369 break;
371 switch (code)
373 /* tcc_constant cases. */
374 case INTEGER_CST: return TS_INT_CST;
375 case REAL_CST: return TS_REAL_CST;
376 case FIXED_CST: return TS_FIXED_CST;
377 case COMPLEX_CST: return TS_COMPLEX;
378 case VECTOR_CST: return TS_VECTOR;
379 case STRING_CST: return TS_STRING;
380 /* tcc_exceptional cases. */
381 case ERROR_MARK: return TS_COMMON;
382 case IDENTIFIER_NODE: return TS_IDENTIFIER;
383 case TREE_LIST: return TS_LIST;
384 case TREE_VEC: return TS_VEC;
385 case SSA_NAME: return TS_SSA_NAME;
386 case PLACEHOLDER_EXPR: return TS_COMMON;
387 case STATEMENT_LIST: return TS_STATEMENT_LIST;
388 case BLOCK: return TS_BLOCK;
389 case CONSTRUCTOR: return TS_CONSTRUCTOR;
390 case TREE_BINFO: return TS_BINFO;
391 case OMP_CLAUSE: return TS_OMP_CLAUSE;
392 case OPTIMIZATION_NODE: return TS_OPTIMIZATION;
393 case TARGET_OPTION_NODE: return TS_TARGET_OPTION;
395 default:
396 gcc_unreachable ();
401 /* Initialize tree_contains_struct to describe the hierarchy of tree
402 nodes. */
404 static void
405 initialize_tree_contains_struct (void)
407 unsigned i;
409 for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
411 enum tree_code code;
412 enum tree_node_structure_enum ts_code;
414 code = (enum tree_code) i;
415 ts_code = tree_node_structure_for_code (code);
417 /* Mark the TS structure itself. */
418 tree_contains_struct[code][ts_code] = 1;
420 /* Mark all the structures that TS is derived from. */
421 switch (ts_code)
423 case TS_TYPED:
424 case TS_BLOCK:
425 MARK_TS_BASE (code);
426 break;
428 case TS_COMMON:
429 case TS_INT_CST:
430 case TS_REAL_CST:
431 case TS_FIXED_CST:
432 case TS_VECTOR:
433 case TS_STRING:
434 case TS_COMPLEX:
435 case TS_SSA_NAME:
436 case TS_CONSTRUCTOR:
437 case TS_EXP:
438 case TS_STATEMENT_LIST:
439 MARK_TS_TYPED (code);
440 break;
442 case TS_IDENTIFIER:
443 case TS_DECL_MINIMAL:
444 case TS_TYPE_COMMON:
445 case TS_LIST:
446 case TS_VEC:
447 case TS_BINFO:
448 case TS_OMP_CLAUSE:
449 case TS_OPTIMIZATION:
450 case TS_TARGET_OPTION:
451 MARK_TS_COMMON (code);
452 break;
454 case TS_TYPE_WITH_LANG_SPECIFIC:
455 MARK_TS_TYPE_COMMON (code);
456 break;
458 case TS_TYPE_NON_COMMON:
459 MARK_TS_TYPE_WITH_LANG_SPECIFIC (code);
460 break;
462 case TS_DECL_COMMON:
463 MARK_TS_DECL_MINIMAL (code);
464 break;
466 case TS_DECL_WRTL:
467 case TS_CONST_DECL:
468 MARK_TS_DECL_COMMON (code);
469 break;
471 case TS_DECL_NON_COMMON:
472 MARK_TS_DECL_WITH_VIS (code);
473 break;
475 case TS_DECL_WITH_VIS:
476 case TS_PARM_DECL:
477 case TS_LABEL_DECL:
478 case TS_RESULT_DECL:
479 MARK_TS_DECL_WRTL (code);
480 break;
482 case TS_FIELD_DECL:
483 MARK_TS_DECL_COMMON (code);
484 break;
486 case TS_VAR_DECL:
487 MARK_TS_DECL_WITH_VIS (code);
488 break;
490 case TS_TYPE_DECL:
491 case TS_FUNCTION_DECL:
492 MARK_TS_DECL_NON_COMMON (code);
493 break;
495 case TS_TRANSLATION_UNIT_DECL:
496 MARK_TS_DECL_COMMON (code);
497 break;
499 default:
500 gcc_unreachable ();
504 /* Basic consistency checks for attributes used in fold. */
505 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
506 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
507 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
508 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
509 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
510 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
511 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
512 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
513 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
514 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
515 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
516 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
517 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
518 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
519 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
520 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
521 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
522 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
523 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
524 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
525 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
526 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
527 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
528 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
529 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
530 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
531 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
532 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
533 gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
534 gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
535 gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
536 gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
537 gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
538 gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
539 gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
540 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
541 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
542 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
546 /* Init tree.c. */
548 void
549 init_ttree (void)
551 /* Initialize the hash table of types. */
552 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
553 type_hash_eq, 0);
555 debug_expr_for_decl = htab_create_ggc (512, tree_decl_map_hash,
556 tree_decl_map_eq, 0);
558 value_expr_for_decl = htab_create_ggc (512, tree_decl_map_hash,
559 tree_decl_map_eq, 0);
560 init_priority_for_decl = htab_create_ggc (512, tree_priority_map_hash,
561 tree_priority_map_eq, 0);
563 int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
564 int_cst_hash_eq, NULL);
566 int_cst_node = make_node (INTEGER_CST);
568 cl_option_hash_table = htab_create_ggc (64, cl_option_hash_hash,
569 cl_option_hash_eq, NULL);
571 cl_optimization_node = make_node (OPTIMIZATION_NODE);
572 cl_target_option_node = make_node (TARGET_OPTION_NODE);
574 /* Initialize the tree_contains_struct array. */
575 initialize_tree_contains_struct ();
576 lang_hooks.init_ts ();
580 /* The name of the object as the assembler will see it (but before any
581 translations made by ASM_OUTPUT_LABELREF). Often this is the same
582 as DECL_NAME. It is an IDENTIFIER_NODE. */
583 tree
584 decl_assembler_name (tree decl)
586 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
587 lang_hooks.set_decl_assembler_name (decl);
588 return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
591 /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL. */
593 bool
594 decl_assembler_name_equal (tree decl, const_tree asmname)
596 tree decl_asmname = DECL_ASSEMBLER_NAME (decl);
597 const char *decl_str;
598 const char *asmname_str;
599 bool test = false;
601 if (decl_asmname == asmname)
602 return true;
604 decl_str = IDENTIFIER_POINTER (decl_asmname);
605 asmname_str = IDENTIFIER_POINTER (asmname);
608 /* If the target assembler name was set by the user, things are trickier.
609 We have a leading '*' to begin with. After that, it's arguable what
610 is the correct thing to do with -fleading-underscore. Arguably, we've
611 historically been doing the wrong thing in assemble_alias by always
612 printing the leading underscore. Since we're not changing that, make
613 sure user_label_prefix follows the '*' before matching. */
614 if (decl_str[0] == '*')
616 size_t ulp_len = strlen (user_label_prefix);
618 decl_str ++;
620 if (ulp_len == 0)
621 test = true;
622 else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
623 decl_str += ulp_len, test=true;
624 else
625 decl_str --;
627 if (asmname_str[0] == '*')
629 size_t ulp_len = strlen (user_label_prefix);
631 asmname_str ++;
633 if (ulp_len == 0)
634 test = true;
635 else if (strncmp (asmname_str, user_label_prefix, ulp_len) == 0)
636 asmname_str += ulp_len, test=true;
637 else
638 asmname_str --;
641 if (!test)
642 return false;
643 return strcmp (decl_str, asmname_str) == 0;
646 /* Hash asmnames ignoring the user specified marks. */
648 hashval_t
649 decl_assembler_name_hash (const_tree asmname)
651 if (IDENTIFIER_POINTER (asmname)[0] == '*')
653 const char *decl_str = IDENTIFIER_POINTER (asmname) + 1;
654 size_t ulp_len = strlen (user_label_prefix);
656 if (ulp_len == 0)
658 else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
659 decl_str += ulp_len;
661 return htab_hash_string (decl_str);
664 return htab_hash_string (IDENTIFIER_POINTER (asmname));
667 /* Compute the number of bytes occupied by a tree with code CODE.
668 This function cannot be used for nodes that have variable sizes,
669 including TREE_VEC, STRING_CST, and CALL_EXPR. */
670 size_t
671 tree_code_size (enum tree_code code)
673 switch (TREE_CODE_CLASS (code))
675 case tcc_declaration: /* A decl node */
677 switch (code)
679 case FIELD_DECL:
680 return sizeof (struct tree_field_decl);
681 case PARM_DECL:
682 return sizeof (struct tree_parm_decl);
683 case VAR_DECL:
684 return sizeof (struct tree_var_decl);
685 case LABEL_DECL:
686 return sizeof (struct tree_label_decl);
687 case RESULT_DECL:
688 return sizeof (struct tree_result_decl);
689 case CONST_DECL:
690 return sizeof (struct tree_const_decl);
691 case TYPE_DECL:
692 return sizeof (struct tree_type_decl);
693 case FUNCTION_DECL:
694 return sizeof (struct tree_function_decl);
695 case DEBUG_EXPR_DECL:
696 return sizeof (struct tree_decl_with_rtl);
697 default:
698 return sizeof (struct tree_decl_non_common);
702 case tcc_type: /* a type node */
703 return sizeof (struct tree_type_non_common);
705 case tcc_reference: /* a reference */
706 case tcc_expression: /* an expression */
707 case tcc_statement: /* an expression with side effects */
708 case tcc_comparison: /* a comparison expression */
709 case tcc_unary: /* a unary arithmetic expression */
710 case tcc_binary: /* a binary arithmetic expression */
711 return (sizeof (struct tree_exp)
712 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
714 case tcc_constant: /* a constant */
715 switch (code)
717 case INTEGER_CST: return sizeof (struct tree_int_cst);
718 case REAL_CST: return sizeof (struct tree_real_cst);
719 case FIXED_CST: return sizeof (struct tree_fixed_cst);
720 case COMPLEX_CST: return sizeof (struct tree_complex);
721 case VECTOR_CST: return sizeof (struct tree_vector);
722 case STRING_CST: gcc_unreachable ();
723 default:
724 return lang_hooks.tree_size (code);
727 case tcc_exceptional: /* something random, like an identifier. */
728 switch (code)
730 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
731 case TREE_LIST: return sizeof (struct tree_list);
733 case ERROR_MARK:
734 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
736 case TREE_VEC:
737 case OMP_CLAUSE: gcc_unreachable ();
739 case SSA_NAME: return sizeof (struct tree_ssa_name);
741 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
742 case BLOCK: return sizeof (struct tree_block);
743 case CONSTRUCTOR: return sizeof (struct tree_constructor);
744 case OPTIMIZATION_NODE: return sizeof (struct tree_optimization_option);
745 case TARGET_OPTION_NODE: return sizeof (struct tree_target_option);
747 default:
748 return lang_hooks.tree_size (code);
751 default:
752 gcc_unreachable ();
756 /* Compute the number of bytes occupied by NODE. This routine only
757 looks at TREE_CODE, except for those nodes that have variable sizes. */
758 size_t
759 tree_size (const_tree node)
761 const enum tree_code code = TREE_CODE (node);
762 switch (code)
764 case TREE_BINFO:
765 return (offsetof (struct tree_binfo, base_binfos)
766 + vec<tree, va_gc>
767 ::embedded_size (BINFO_N_BASE_BINFOS (node)));
769 case TREE_VEC:
770 return (sizeof (struct tree_vec)
771 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
773 case VECTOR_CST:
774 return (sizeof (struct tree_vector)
775 + (TYPE_VECTOR_SUBPARTS (TREE_TYPE (node)) - 1) * sizeof (tree));
777 case STRING_CST:
778 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
780 case OMP_CLAUSE:
781 return (sizeof (struct tree_omp_clause)
782 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
783 * sizeof (tree));
785 default:
786 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
787 return (sizeof (struct tree_exp)
788 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
789 else
790 return tree_code_size (code);
794 /* Record interesting allocation statistics for a tree node with CODE
795 and LENGTH. */
797 static void
798 record_node_allocation_statistics (enum tree_code code ATTRIBUTE_UNUSED,
799 size_t length ATTRIBUTE_UNUSED)
801 enum tree_code_class type = TREE_CODE_CLASS (code);
802 tree_node_kind kind;
804 if (!GATHER_STATISTICS)
805 return;
807 switch (type)
809 case tcc_declaration: /* A decl node */
810 kind = d_kind;
811 break;
813 case tcc_type: /* a type node */
814 kind = t_kind;
815 break;
817 case tcc_statement: /* an expression with side effects */
818 kind = s_kind;
819 break;
821 case tcc_reference: /* a reference */
822 kind = r_kind;
823 break;
825 case tcc_expression: /* an expression */
826 case tcc_comparison: /* a comparison expression */
827 case tcc_unary: /* a unary arithmetic expression */
828 case tcc_binary: /* a binary arithmetic expression */
829 kind = e_kind;
830 break;
832 case tcc_constant: /* a constant */
833 kind = c_kind;
834 break;
836 case tcc_exceptional: /* something random, like an identifier. */
837 switch (code)
839 case IDENTIFIER_NODE:
840 kind = id_kind;
841 break;
843 case TREE_VEC:
844 kind = vec_kind;
845 break;
847 case TREE_BINFO:
848 kind = binfo_kind;
849 break;
851 case SSA_NAME:
852 kind = ssa_name_kind;
853 break;
855 case BLOCK:
856 kind = b_kind;
857 break;
859 case CONSTRUCTOR:
860 kind = constr_kind;
861 break;
863 case OMP_CLAUSE:
864 kind = omp_clause_kind;
865 break;
867 default:
868 kind = x_kind;
869 break;
871 break;
873 case tcc_vl_exp:
874 kind = e_kind;
875 break;
877 default:
878 gcc_unreachable ();
881 tree_code_counts[(int) code]++;
882 tree_node_counts[(int) kind]++;
883 tree_node_sizes[(int) kind] += length;
886 /* Allocate and return a new UID from the DECL_UID namespace. */
889 allocate_decl_uid (void)
891 return next_decl_uid++;
894 /* Return a newly allocated node of code CODE. For decl and type
895 nodes, some other fields are initialized. The rest of the node is
896 initialized to zero. This function cannot be used for TREE_VEC or
897 OMP_CLAUSE nodes, which is enforced by asserts in tree_code_size.
899 Achoo! I got a code in the node. */
901 tree
902 make_node_stat (enum tree_code code MEM_STAT_DECL)
904 tree t;
905 enum tree_code_class type = TREE_CODE_CLASS (code);
906 size_t length = tree_code_size (code);
908 record_node_allocation_statistics (code, length);
910 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
911 TREE_SET_CODE (t, code);
913 switch (type)
915 case tcc_statement:
916 TREE_SIDE_EFFECTS (t) = 1;
917 break;
919 case tcc_declaration:
920 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
922 if (code == FUNCTION_DECL)
924 DECL_ALIGN (t) = FUNCTION_BOUNDARY;
925 DECL_MODE (t) = FUNCTION_MODE;
927 else
928 DECL_ALIGN (t) = 1;
930 DECL_SOURCE_LOCATION (t) = input_location;
931 if (TREE_CODE (t) == DEBUG_EXPR_DECL)
932 DECL_UID (t) = --next_debug_decl_uid;
933 else
935 DECL_UID (t) = allocate_decl_uid ();
936 SET_DECL_PT_UID (t, -1);
938 if (TREE_CODE (t) == LABEL_DECL)
939 LABEL_DECL_UID (t) = -1;
941 break;
943 case tcc_type:
944 TYPE_UID (t) = next_type_uid++;
945 TYPE_ALIGN (t) = BITS_PER_UNIT;
946 TYPE_USER_ALIGN (t) = 0;
947 TYPE_MAIN_VARIANT (t) = t;
948 TYPE_CANONICAL (t) = t;
950 /* Default to no attributes for type, but let target change that. */
951 TYPE_ATTRIBUTES (t) = NULL_TREE;
952 targetm.set_default_type_attributes (t);
954 /* We have not yet computed the alias set for this type. */
955 TYPE_ALIAS_SET (t) = -1;
956 break;
958 case tcc_constant:
959 TREE_CONSTANT (t) = 1;
960 break;
962 case tcc_expression:
963 switch (code)
965 case INIT_EXPR:
966 case MODIFY_EXPR:
967 case VA_ARG_EXPR:
968 case PREDECREMENT_EXPR:
969 case PREINCREMENT_EXPR:
970 case POSTDECREMENT_EXPR:
971 case POSTINCREMENT_EXPR:
972 /* All of these have side-effects, no matter what their
973 operands are. */
974 TREE_SIDE_EFFECTS (t) = 1;
975 break;
977 default:
978 break;
980 break;
982 default:
983 /* Other classes need no special treatment. */
984 break;
987 return t;
990 /* Return a new node with the same contents as NODE except that its
991 TREE_CHAIN, if it has one, is zero and it has a fresh uid. */
993 tree
994 copy_node_stat (tree node MEM_STAT_DECL)
996 tree t;
997 enum tree_code code = TREE_CODE (node);
998 size_t length;
1000 gcc_assert (code != STATEMENT_LIST);
1002 length = tree_size (node);
1003 record_node_allocation_statistics (code, length);
1004 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1005 memcpy (t, node, length);
1007 if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
1008 TREE_CHAIN (t) = 0;
1009 TREE_ASM_WRITTEN (t) = 0;
1010 TREE_VISITED (t) = 0;
1012 if (TREE_CODE_CLASS (code) == tcc_declaration)
1014 if (code == DEBUG_EXPR_DECL)
1015 DECL_UID (t) = --next_debug_decl_uid;
1016 else
1018 DECL_UID (t) = allocate_decl_uid ();
1019 if (DECL_PT_UID_SET_P (node))
1020 SET_DECL_PT_UID (t, DECL_PT_UID (node));
1022 if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
1023 && DECL_HAS_VALUE_EXPR_P (node))
1025 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
1026 DECL_HAS_VALUE_EXPR_P (t) = 1;
1028 /* DECL_DEBUG_EXPR is copied explicitely by callers. */
1029 if (TREE_CODE (node) == VAR_DECL)
1030 DECL_HAS_DEBUG_EXPR_P (t) = 0;
1031 if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
1033 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
1034 DECL_HAS_INIT_PRIORITY_P (t) = 1;
1036 if (TREE_CODE (node) == FUNCTION_DECL)
1037 DECL_STRUCT_FUNCTION (t) = NULL;
1039 else if (TREE_CODE_CLASS (code) == tcc_type)
1041 TYPE_UID (t) = next_type_uid++;
1042 /* The following is so that the debug code for
1043 the copy is different from the original type.
1044 The two statements usually duplicate each other
1045 (because they clear fields of the same union),
1046 but the optimizer should catch that. */
1047 TYPE_SYMTAB_POINTER (t) = 0;
1048 TYPE_SYMTAB_ADDRESS (t) = 0;
1050 /* Do not copy the values cache. */
1051 if (TYPE_CACHED_VALUES_P (t))
1053 TYPE_CACHED_VALUES_P (t) = 0;
1054 TYPE_CACHED_VALUES (t) = NULL_TREE;
1058 return t;
1061 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1062 For example, this can copy a list made of TREE_LIST nodes. */
1064 tree
1065 copy_list (tree list)
1067 tree head;
1068 tree prev, next;
1070 if (list == 0)
1071 return 0;
1073 head = prev = copy_node (list);
1074 next = TREE_CHAIN (list);
1075 while (next)
1077 TREE_CHAIN (prev) = copy_node (next);
1078 prev = TREE_CHAIN (prev);
1079 next = TREE_CHAIN (next);
1081 return head;
1085 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1087 tree
1088 build_int_cst (tree type, HOST_WIDE_INT low)
1090 /* Support legacy code. */
1091 if (!type)
1092 type = integer_type_node;
1094 return double_int_to_tree (type, double_int::from_shwi (low));
1097 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1099 tree
1100 build_int_cst_type (tree type, HOST_WIDE_INT low)
1102 gcc_assert (type);
1104 return double_int_to_tree (type, double_int::from_shwi (low));
1107 /* Constructs tree in type TYPE from with value given by CST. Signedness
1108 of CST is assumed to be the same as the signedness of TYPE. */
1110 tree
1111 double_int_to_tree (tree type, double_int cst)
1113 bool sign_extended_type = !TYPE_UNSIGNED (type);
1115 cst = cst.ext (TYPE_PRECISION (type), !sign_extended_type);
1117 return build_int_cst_wide (type, cst.low, cst.high);
1120 /* Returns true if CST fits into range of TYPE. Signedness of CST is assumed
1121 to be the same as the signedness of TYPE. */
1123 bool
1124 double_int_fits_to_tree_p (const_tree type, double_int cst)
1126 bool sign_extended_type = !TYPE_UNSIGNED (type);
1128 double_int ext
1129 = cst.ext (TYPE_PRECISION (type), !sign_extended_type);
1131 return cst == ext;
1134 /* We force the double_int CST to the range of the type TYPE by sign or
1135 zero extending it. OVERFLOWABLE indicates if we are interested in
1136 overflow of the value, when >0 we are only interested in signed
1137 overflow, for <0 we are interested in any overflow. OVERFLOWED
1138 indicates whether overflow has already occurred. CONST_OVERFLOWED
1139 indicates whether constant overflow has already occurred. We force
1140 T's value to be within range of T's type (by setting to 0 or 1 all
1141 the bits outside the type's range). We set TREE_OVERFLOWED if,
1142 OVERFLOWED is nonzero,
1143 or OVERFLOWABLE is >0 and signed overflow occurs
1144 or OVERFLOWABLE is <0 and any overflow occurs
1145 We return a new tree node for the extended double_int. The node
1146 is shared if no overflow flags are set. */
1149 tree
1150 force_fit_type_double (tree type, double_int cst, int overflowable,
1151 bool overflowed)
1153 bool sign_extended_type = !TYPE_UNSIGNED (type);
1155 /* If we need to set overflow flags, return a new unshared node. */
1156 if (overflowed || !double_int_fits_to_tree_p (type, cst))
1158 if (overflowed
1159 || overflowable < 0
1160 || (overflowable > 0 && sign_extended_type))
1162 tree t = make_node (INTEGER_CST);
1163 TREE_INT_CST (t)
1164 = cst.ext (TYPE_PRECISION (type), !sign_extended_type);
1165 TREE_TYPE (t) = type;
1166 TREE_OVERFLOW (t) = 1;
1167 return t;
1171 /* Else build a shared node. */
1172 return double_int_to_tree (type, cst);
1175 /* These are the hash table functions for the hash table of INTEGER_CST
1176 nodes of a sizetype. */
1178 /* Return the hash code code X, an INTEGER_CST. */
1180 static hashval_t
1181 int_cst_hash_hash (const void *x)
1183 const_tree const t = (const_tree) x;
1185 return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
1186 ^ htab_hash_pointer (TREE_TYPE (t)));
1189 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1190 is the same as that given by *Y, which is the same. */
1192 static int
1193 int_cst_hash_eq (const void *x, const void *y)
1195 const_tree const xt = (const_tree) x;
1196 const_tree const yt = (const_tree) y;
1198 return (TREE_TYPE (xt) == TREE_TYPE (yt)
1199 && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
1200 && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
1203 /* Create an INT_CST node of TYPE and value HI:LOW.
1204 The returned node is always shared. For small integers we use a
1205 per-type vector cache, for larger ones we use a single hash table. */
1207 tree
1208 build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
1210 tree t;
1211 int ix = -1;
1212 int limit = 0;
1214 gcc_assert (type);
1216 switch (TREE_CODE (type))
1218 case NULLPTR_TYPE:
1219 gcc_assert (hi == 0 && low == 0);
1220 /* Fallthru. */
1222 case POINTER_TYPE:
1223 case REFERENCE_TYPE:
1224 case POINTER_BOUNDS_TYPE:
1225 /* Cache NULL pointer and zero bounds. */
1226 if (!hi && !low)
1228 limit = 1;
1229 ix = 0;
1231 break;
1233 case BOOLEAN_TYPE:
1234 /* Cache false or true. */
1235 limit = 2;
1236 if (!hi && low < 2)
1237 ix = low;
1238 break;
1240 case INTEGER_TYPE:
1241 case OFFSET_TYPE:
1242 if (TYPE_UNSIGNED (type))
1244 /* Cache 0..N */
1245 limit = INTEGER_SHARE_LIMIT;
1246 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1247 ix = low;
1249 else
1251 /* Cache -1..N */
1252 limit = INTEGER_SHARE_LIMIT + 1;
1253 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1254 ix = low + 1;
1255 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
1256 ix = 0;
1258 break;
1260 case ENUMERAL_TYPE:
1261 break;
1263 default:
1264 gcc_unreachable ();
1267 if (ix >= 0)
1269 /* Look for it in the type's vector of small shared ints. */
1270 if (!TYPE_CACHED_VALUES_P (type))
1272 TYPE_CACHED_VALUES_P (type) = 1;
1273 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1276 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1277 if (t)
1279 /* Make sure no one is clobbering the shared constant. */
1280 gcc_assert (TREE_TYPE (t) == type);
1281 gcc_assert (TREE_INT_CST_LOW (t) == low);
1282 gcc_assert (TREE_INT_CST_HIGH (t) == hi);
1284 else
1286 /* Create a new shared int. */
1287 t = make_node (INTEGER_CST);
1289 TREE_INT_CST_LOW (t) = low;
1290 TREE_INT_CST_HIGH (t) = hi;
1291 TREE_TYPE (t) = type;
1293 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1296 else
1298 /* Use the cache of larger shared ints. */
1299 void **slot;
1301 TREE_INT_CST_LOW (int_cst_node) = low;
1302 TREE_INT_CST_HIGH (int_cst_node) = hi;
1303 TREE_TYPE (int_cst_node) = type;
1305 slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
1306 t = (tree) *slot;
1307 if (!t)
1309 /* Insert this one into the hash table. */
1310 t = int_cst_node;
1311 *slot = t;
1312 /* Make a new node for next time round. */
1313 int_cst_node = make_node (INTEGER_CST);
1317 return t;
1320 void
1321 cache_integer_cst (tree t)
1323 tree type = TREE_TYPE (t);
1324 HOST_WIDE_INT hi = TREE_INT_CST_HIGH (t);
1325 unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (t);
1326 int ix = -1;
1327 int limit = 0;
1329 gcc_assert (!TREE_OVERFLOW (t));
1331 switch (TREE_CODE (type))
1333 case NULLPTR_TYPE:
1334 gcc_assert (hi == 0 && low == 0);
1335 /* Fallthru. */
1337 case POINTER_TYPE:
1338 case REFERENCE_TYPE:
1339 /* Cache NULL pointer. */
1340 if (!hi && !low)
1342 limit = 1;
1343 ix = 0;
1345 break;
1347 case BOOLEAN_TYPE:
1348 /* Cache false or true. */
1349 limit = 2;
1350 if (!hi && low < 2)
1351 ix = low;
1352 break;
1354 case INTEGER_TYPE:
1355 case OFFSET_TYPE:
1356 if (TYPE_UNSIGNED (type))
1358 /* Cache 0..N */
1359 limit = INTEGER_SHARE_LIMIT;
1360 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1361 ix = low;
1363 else
1365 /* Cache -1..N */
1366 limit = INTEGER_SHARE_LIMIT + 1;
1367 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1368 ix = low + 1;
1369 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
1370 ix = 0;
1372 break;
1374 case ENUMERAL_TYPE:
1375 break;
1377 default:
1378 gcc_unreachable ();
1381 if (ix >= 0)
1383 /* Look for it in the type's vector of small shared ints. */
1384 if (!TYPE_CACHED_VALUES_P (type))
1386 TYPE_CACHED_VALUES_P (type) = 1;
1387 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1390 gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE);
1391 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1393 else
1395 /* Use the cache of larger shared ints. */
1396 void **slot;
1398 slot = htab_find_slot (int_cst_hash_table, t, INSERT);
1399 /* If there is already an entry for the number verify it's the
1400 same. */
1401 if (*slot)
1403 gcc_assert (TREE_INT_CST_LOW ((tree)*slot) == low
1404 && TREE_INT_CST_HIGH ((tree)*slot) == hi);
1405 return;
1407 /* Otherwise insert this one into the hash table. */
1408 *slot = t;
1413 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1414 and the rest are zeros. */
1416 tree
1417 build_low_bits_mask (tree type, unsigned bits)
1419 double_int mask;
1421 gcc_assert (bits <= TYPE_PRECISION (type));
1423 if (bits == TYPE_PRECISION (type)
1424 && !TYPE_UNSIGNED (type))
1425 /* Sign extended all-ones mask. */
1426 mask = double_int_minus_one;
1427 else
1428 mask = double_int::mask (bits);
1430 return build_int_cst_wide (type, mask.low, mask.high);
1433 /* Checks that X is integer constant that can be expressed in (unsigned)
1434 HOST_WIDE_INT without loss of precision. */
1436 bool
1437 cst_and_fits_in_hwi (const_tree x)
1439 if (TREE_CODE (x) != INTEGER_CST)
1440 return false;
1442 if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
1443 return false;
1445 return (TREE_INT_CST_HIGH (x) == 0
1446 || TREE_INT_CST_HIGH (x) == -1);
1449 /* Build a newly constructed TREE_VEC node of length LEN. */
1451 tree
1452 make_vector_stat (unsigned len MEM_STAT_DECL)
1454 tree t;
1455 unsigned length = (len - 1) * sizeof (tree) + sizeof (struct tree_vector);
1457 record_node_allocation_statistics (VECTOR_CST, length);
1459 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1461 TREE_SET_CODE (t, VECTOR_CST);
1462 TREE_CONSTANT (t) = 1;
1464 return t;
1467 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1468 are in a list pointed to by VALS. */
1470 tree
1471 build_vector_stat (tree type, tree *vals MEM_STAT_DECL)
1473 int over = 0;
1474 unsigned cnt = 0;
1475 tree v = make_vector (TYPE_VECTOR_SUBPARTS (type));
1476 TREE_TYPE (v) = type;
1478 /* Iterate through elements and check for overflow. */
1479 for (cnt = 0; cnt < TYPE_VECTOR_SUBPARTS (type); ++cnt)
1481 tree value = vals[cnt];
1483 VECTOR_CST_ELT (v, cnt) = value;
1485 /* Don't crash if we get an address constant. */
1486 if (!CONSTANT_CLASS_P (value))
1487 continue;
1489 over |= TREE_OVERFLOW (value);
1492 TREE_OVERFLOW (v) = over;
1493 return v;
1496 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1497 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1499 tree
1500 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
1502 tree *vec = XALLOCAVEC (tree, TYPE_VECTOR_SUBPARTS (type));
1503 unsigned HOST_WIDE_INT idx;
1504 tree value;
1506 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1507 vec[idx] = value;
1508 for (; idx < TYPE_VECTOR_SUBPARTS (type); ++idx)
1509 vec[idx] = build_zero_cst (TREE_TYPE (type));
1511 return build_vector (type, vec);
1514 /* Build a vector of type VECTYPE where all the elements are SCs. */
1515 tree
1516 build_vector_from_val (tree vectype, tree sc)
1518 int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
1520 if (sc == error_mark_node)
1521 return sc;
1523 /* Verify that the vector type is suitable for SC. Note that there
1524 is some inconsistency in the type-system with respect to restrict
1525 qualifications of pointers. Vector types always have a main-variant
1526 element type and the qualification is applied to the vector-type.
1527 So TREE_TYPE (vector-type) does not return a properly qualified
1528 vector element-type. */
1529 gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)),
1530 TREE_TYPE (vectype)));
1532 if (CONSTANT_CLASS_P (sc))
1534 tree *v = XALLOCAVEC (tree, nunits);
1535 for (i = 0; i < nunits; ++i)
1536 v[i] = sc;
1537 return build_vector (vectype, v);
1539 else
1541 vec<constructor_elt, va_gc> *v;
1542 vec_alloc (v, nunits);
1543 for (i = 0; i < nunits; ++i)
1544 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc);
1545 return build_constructor (vectype, v);
1549 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1550 are in the vec pointed to by VALS. */
1551 tree
1552 build_constructor (tree type, vec<constructor_elt, va_gc> *vals)
1554 tree c = make_node (CONSTRUCTOR);
1555 unsigned int i;
1556 constructor_elt *elt;
1557 bool constant_p = true;
1558 bool side_effects_p = false;
1560 TREE_TYPE (c) = type;
1561 CONSTRUCTOR_ELTS (c) = vals;
1563 FOR_EACH_VEC_SAFE_ELT (vals, i, elt)
1565 /* Mostly ctors will have elts that don't have side-effects, so
1566 the usual case is to scan all the elements. Hence a single
1567 loop for both const and side effects, rather than one loop
1568 each (with early outs). */
1569 if (!TREE_CONSTANT (elt->value))
1570 constant_p = false;
1571 if (TREE_SIDE_EFFECTS (elt->value))
1572 side_effects_p = true;
1575 TREE_SIDE_EFFECTS (c) = side_effects_p;
1576 TREE_CONSTANT (c) = constant_p;
1578 return c;
1581 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1582 INDEX and VALUE. */
1583 tree
1584 build_constructor_single (tree type, tree index, tree value)
1586 vec<constructor_elt, va_gc> *v;
1587 constructor_elt elt = {index, value};
1589 vec_alloc (v, 1);
1590 v->quick_push (elt);
1592 return build_constructor (type, v);
1596 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1597 are in a list pointed to by VALS. */
1598 tree
1599 build_constructor_from_list (tree type, tree vals)
1601 tree t;
1602 vec<constructor_elt, va_gc> *v = NULL;
1604 if (vals)
1606 vec_alloc (v, list_length (vals));
1607 for (t = vals; t; t = TREE_CHAIN (t))
1608 CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1611 return build_constructor (type, v);
1614 /* Return a new CONSTRUCTOR node whose type is TYPE. NELTS is the number
1615 of elements, provided as index/value pairs. */
1617 tree
1618 build_constructor_va (tree type, int nelts, ...)
1620 vec<constructor_elt, va_gc> *v = NULL;
1621 va_list p;
1623 va_start (p, nelts);
1624 vec_alloc (v, nelts);
1625 while (nelts--)
1627 tree index = va_arg (p, tree);
1628 tree value = va_arg (p, tree);
1629 CONSTRUCTOR_APPEND_ELT (v, index, value);
1631 va_end (p);
1632 return build_constructor (type, v);
1635 /* Return a new FIXED_CST node whose type is TYPE and value is F. */
1637 tree
1638 build_fixed (tree type, FIXED_VALUE_TYPE f)
1640 tree v;
1641 FIXED_VALUE_TYPE *fp;
1643 v = make_node (FIXED_CST);
1644 fp = ggc_alloc_fixed_value ();
1645 memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1647 TREE_TYPE (v) = type;
1648 TREE_FIXED_CST_PTR (v) = fp;
1649 return v;
1652 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1654 tree
1655 build_real (tree type, REAL_VALUE_TYPE d)
1657 tree v;
1658 REAL_VALUE_TYPE *dp;
1659 int overflow = 0;
1661 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1662 Consider doing it via real_convert now. */
1664 v = make_node (REAL_CST);
1665 dp = ggc_alloc_real_value ();
1666 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1668 TREE_TYPE (v) = type;
1669 TREE_REAL_CST_PTR (v) = dp;
1670 TREE_OVERFLOW (v) = overflow;
1671 return v;
1674 /* Return a new REAL_CST node whose type is TYPE
1675 and whose value is the integer value of the INTEGER_CST node I. */
1677 REAL_VALUE_TYPE
1678 real_value_from_int_cst (const_tree type, const_tree i)
1680 REAL_VALUE_TYPE d;
1682 /* Clear all bits of the real value type so that we can later do
1683 bitwise comparisons to see if two values are the same. */
1684 memset (&d, 0, sizeof d);
1686 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
1687 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1688 TYPE_UNSIGNED (TREE_TYPE (i)));
1689 return d;
1692 /* Given a tree representing an integer constant I, return a tree
1693 representing the same value as a floating-point constant of type TYPE. */
1695 tree
1696 build_real_from_int_cst (tree type, const_tree i)
1698 tree v;
1699 int overflow = TREE_OVERFLOW (i);
1701 v = build_real (type, real_value_from_int_cst (type, i));
1703 TREE_OVERFLOW (v) |= overflow;
1704 return v;
1707 /* Return a newly constructed STRING_CST node whose value is
1708 the LEN characters at STR.
1709 Note that for a C string literal, LEN should include the trailing NUL.
1710 The TREE_TYPE is not initialized. */
1712 tree
1713 build_string (int len, const char *str)
1715 tree s;
1716 size_t length;
1718 /* Do not waste bytes provided by padding of struct tree_string. */
1719 length = len + offsetof (struct tree_string, str) + 1;
1721 record_node_allocation_statistics (STRING_CST, length);
1723 s = ggc_alloc_tree_node (length);
1725 memset (s, 0, sizeof (struct tree_typed));
1726 TREE_SET_CODE (s, STRING_CST);
1727 TREE_CONSTANT (s) = 1;
1728 TREE_STRING_LENGTH (s) = len;
1729 memcpy (s->string.str, str, len);
1730 s->string.str[len] = '\0';
1732 return s;
1735 /* Return a newly constructed COMPLEX_CST node whose value is
1736 specified by the real and imaginary parts REAL and IMAG.
1737 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1738 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1740 tree
1741 build_complex (tree type, tree real, tree imag)
1743 tree t = make_node (COMPLEX_CST);
1745 TREE_REALPART (t) = real;
1746 TREE_IMAGPART (t) = imag;
1747 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1748 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1749 return t;
1752 /* Return a constant of arithmetic type TYPE which is the
1753 multiplicative identity of the set TYPE. */
1755 tree
1756 build_one_cst (tree type)
1758 switch (TREE_CODE (type))
1760 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1761 case POINTER_TYPE: case REFERENCE_TYPE:
1762 case OFFSET_TYPE:
1763 return build_int_cst (type, 1);
1765 case REAL_TYPE:
1766 return build_real (type, dconst1);
1768 case FIXED_POINT_TYPE:
1769 /* We can only generate 1 for accum types. */
1770 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
1771 return build_fixed (type, FCONST1 (TYPE_MODE (type)));
1773 case VECTOR_TYPE:
1775 tree scalar = build_one_cst (TREE_TYPE (type));
1777 return build_vector_from_val (type, scalar);
1780 case COMPLEX_TYPE:
1781 return build_complex (type,
1782 build_one_cst (TREE_TYPE (type)),
1783 build_zero_cst (TREE_TYPE (type)));
1785 default:
1786 gcc_unreachable ();
1790 /* Return an integer of type TYPE containing all 1's in as much precision as
1791 it contains, or a complex or vector whose subparts are such integers. */
1793 tree
1794 build_all_ones_cst (tree type)
1796 if (TREE_CODE (type) == COMPLEX_TYPE)
1798 tree scalar = build_all_ones_cst (TREE_TYPE (type));
1799 return build_complex (type, scalar, scalar);
1801 else
1802 return build_minus_one_cst (type);
1805 /* Return a constant of arithmetic type TYPE which is the
1806 opposite of the multiplicative identity of the set TYPE. */
1808 tree
1809 build_minus_one_cst (tree type)
1811 switch (TREE_CODE (type))
1813 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1814 case POINTER_TYPE: case REFERENCE_TYPE:
1815 case OFFSET_TYPE:
1816 return build_int_cst (type, -1);
1818 case REAL_TYPE:
1819 return build_real (type, dconstm1);
1821 case FIXED_POINT_TYPE:
1822 /* We can only generate 1 for accum types. */
1823 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
1824 return build_fixed (type, fixed_from_double_int (double_int_minus_one,
1825 TYPE_MODE (type)));
1827 case VECTOR_TYPE:
1829 tree scalar = build_minus_one_cst (TREE_TYPE (type));
1831 return build_vector_from_val (type, scalar);
1834 case COMPLEX_TYPE:
1835 return build_complex (type,
1836 build_minus_one_cst (TREE_TYPE (type)),
1837 build_zero_cst (TREE_TYPE (type)));
1839 default:
1840 gcc_unreachable ();
1844 /* Build 0 constant of type TYPE. This is used by constructor folding
1845 and thus the constant should be represented in memory by
1846 zero(es). */
1848 tree
1849 build_zero_cst (tree type)
1851 switch (TREE_CODE (type))
1853 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1854 case POINTER_TYPE: case REFERENCE_TYPE:
1855 case OFFSET_TYPE: case NULLPTR_TYPE:
1856 return build_int_cst (type, 0);
1858 case REAL_TYPE:
1859 return build_real (type, dconst0);
1861 case FIXED_POINT_TYPE:
1862 return build_fixed (type, FCONST0 (TYPE_MODE (type)));
1864 case VECTOR_TYPE:
1866 tree scalar = build_zero_cst (TREE_TYPE (type));
1868 return build_vector_from_val (type, scalar);
1871 case COMPLEX_TYPE:
1873 tree zero = build_zero_cst (TREE_TYPE (type));
1875 return build_complex (type, zero, zero);
1878 default:
1879 if (!AGGREGATE_TYPE_P (type))
1880 return fold_convert (type, integer_zero_node);
1881 return build_constructor (type, NULL);
1886 /* Build a BINFO with LEN language slots. */
1888 tree
1889 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
1891 tree t;
1892 size_t length = (offsetof (struct tree_binfo, base_binfos)
1893 + vec<tree, va_gc>::embedded_size (base_binfos));
1895 record_node_allocation_statistics (TREE_BINFO, length);
1897 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1899 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
1901 TREE_SET_CODE (t, TREE_BINFO);
1903 BINFO_BASE_BINFOS (t)->embedded_init (base_binfos);
1905 return t;
1908 /* Create a CASE_LABEL_EXPR tree node and return it. */
1910 tree
1911 build_case_label (tree low_value, tree high_value, tree label_decl)
1913 tree t = make_node (CASE_LABEL_EXPR);
1915 TREE_TYPE (t) = void_type_node;
1916 SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl));
1918 CASE_LOW (t) = low_value;
1919 CASE_HIGH (t) = high_value;
1920 CASE_LABEL (t) = label_decl;
1921 CASE_CHAIN (t) = NULL_TREE;
1923 return t;
1926 /* Build a newly constructed TREE_VEC node of length LEN. */
1928 tree
1929 make_tree_vec_stat (int len MEM_STAT_DECL)
1931 tree t;
1932 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1934 record_node_allocation_statistics (TREE_VEC, length);
1936 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1938 TREE_SET_CODE (t, TREE_VEC);
1939 TREE_VEC_LENGTH (t) = len;
1941 return t;
1944 /* Return 1 if EXPR is the integer constant zero or a complex constant
1945 of zero. */
1948 integer_zerop (const_tree expr)
1950 STRIP_NOPS (expr);
1952 switch (TREE_CODE (expr))
1954 case INTEGER_CST:
1955 return (TREE_INT_CST_LOW (expr) == 0
1956 && TREE_INT_CST_HIGH (expr) == 0);
1957 case COMPLEX_CST:
1958 return (integer_zerop (TREE_REALPART (expr))
1959 && integer_zerop (TREE_IMAGPART (expr)));
1960 case VECTOR_CST:
1962 unsigned i;
1963 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
1964 if (!integer_zerop (VECTOR_CST_ELT (expr, i)))
1965 return false;
1966 return true;
1968 default:
1969 return false;
1973 /* Return 1 if EXPR is the integer constant one or the corresponding
1974 complex constant. */
1977 integer_onep (const_tree expr)
1979 STRIP_NOPS (expr);
1981 switch (TREE_CODE (expr))
1983 case INTEGER_CST:
1984 return (TREE_INT_CST_LOW (expr) == 1
1985 && TREE_INT_CST_HIGH (expr) == 0);
1986 case COMPLEX_CST:
1987 return (integer_onep (TREE_REALPART (expr))
1988 && integer_zerop (TREE_IMAGPART (expr)));
1989 case VECTOR_CST:
1991 unsigned i;
1992 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
1993 if (!integer_onep (VECTOR_CST_ELT (expr, i)))
1994 return false;
1995 return true;
1997 default:
1998 return false;
2002 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
2003 it contains, or a complex or vector whose subparts are such integers. */
2006 integer_all_onesp (const_tree expr)
2008 int prec;
2009 int uns;
2011 STRIP_NOPS (expr);
2013 if (TREE_CODE (expr) == COMPLEX_CST
2014 && integer_all_onesp (TREE_REALPART (expr))
2015 && integer_all_onesp (TREE_IMAGPART (expr)))
2016 return 1;
2018 else if (TREE_CODE (expr) == VECTOR_CST)
2020 unsigned i;
2021 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2022 if (!integer_all_onesp (VECTOR_CST_ELT (expr, i)))
2023 return 0;
2024 return 1;
2027 else if (TREE_CODE (expr) != INTEGER_CST)
2028 return 0;
2030 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
2031 if (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
2032 && TREE_INT_CST_HIGH (expr) == -1)
2033 return 1;
2034 if (!uns)
2035 return 0;
2037 prec = TYPE_PRECISION (TREE_TYPE (expr));
2038 if (prec >= HOST_BITS_PER_WIDE_INT)
2040 HOST_WIDE_INT high_value;
2041 int shift_amount;
2043 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
2045 /* Can not handle precisions greater than twice the host int size. */
2046 gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
2047 if (shift_amount == HOST_BITS_PER_WIDE_INT)
2048 /* Shifting by the host word size is undefined according to the ANSI
2049 standard, so we must handle this as a special case. */
2050 high_value = -1;
2051 else
2052 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
2054 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
2055 && TREE_INT_CST_HIGH (expr) == high_value);
2057 else
2058 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
2061 /* Return 1 if EXPR is the integer constant minus one. */
2064 integer_minus_onep (const_tree expr)
2066 STRIP_NOPS (expr);
2068 if (TREE_CODE (expr) == COMPLEX_CST)
2069 return (integer_all_onesp (TREE_REALPART (expr))
2070 && integer_zerop (TREE_IMAGPART (expr)));
2071 else
2072 return integer_all_onesp (expr);
2075 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
2076 one bit on). */
2079 integer_pow2p (const_tree expr)
2081 int prec;
2082 unsigned HOST_WIDE_INT high, low;
2084 STRIP_NOPS (expr);
2086 if (TREE_CODE (expr) == COMPLEX_CST
2087 && integer_pow2p (TREE_REALPART (expr))
2088 && integer_zerop (TREE_IMAGPART (expr)))
2089 return 1;
2091 if (TREE_CODE (expr) != INTEGER_CST)
2092 return 0;
2094 prec = TYPE_PRECISION (TREE_TYPE (expr));
2095 high = TREE_INT_CST_HIGH (expr);
2096 low = TREE_INT_CST_LOW (expr);
2098 /* First clear all bits that are beyond the type's precision in case
2099 we've been sign extended. */
2101 if (prec == HOST_BITS_PER_DOUBLE_INT)
2103 else if (prec > HOST_BITS_PER_WIDE_INT)
2104 high &= ~(HOST_WIDE_INT_M1U << (prec - HOST_BITS_PER_WIDE_INT));
2105 else
2107 high = 0;
2108 if (prec < HOST_BITS_PER_WIDE_INT)
2109 low &= ~(HOST_WIDE_INT_M1U << prec);
2112 if (high == 0 && low == 0)
2113 return 0;
2115 return ((high == 0 && (low & (low - 1)) == 0)
2116 || (low == 0 && (high & (high - 1)) == 0));
2119 /* Return 1 if EXPR is an integer constant other than zero or a
2120 complex constant other than zero. */
2123 integer_nonzerop (const_tree expr)
2125 STRIP_NOPS (expr);
2127 return ((TREE_CODE (expr) == INTEGER_CST
2128 && (TREE_INT_CST_LOW (expr) != 0
2129 || TREE_INT_CST_HIGH (expr) != 0))
2130 || (TREE_CODE (expr) == COMPLEX_CST
2131 && (integer_nonzerop (TREE_REALPART (expr))
2132 || integer_nonzerop (TREE_IMAGPART (expr)))));
2135 /* Return 1 if EXPR is the fixed-point constant zero. */
2138 fixed_zerop (const_tree expr)
2140 return (TREE_CODE (expr) == FIXED_CST
2141 && TREE_FIXED_CST (expr).data.is_zero ());
2144 /* Return the power of two represented by a tree node known to be a
2145 power of two. */
2148 tree_log2 (const_tree expr)
2150 int prec;
2151 HOST_WIDE_INT high, low;
2153 STRIP_NOPS (expr);
2155 if (TREE_CODE (expr) == COMPLEX_CST)
2156 return tree_log2 (TREE_REALPART (expr));
2158 prec = TYPE_PRECISION (TREE_TYPE (expr));
2159 high = TREE_INT_CST_HIGH (expr);
2160 low = TREE_INT_CST_LOW (expr);
2162 /* First clear all bits that are beyond the type's precision in case
2163 we've been sign extended. */
2165 if (prec == HOST_BITS_PER_DOUBLE_INT)
2167 else if (prec > HOST_BITS_PER_WIDE_INT)
2168 high &= ~(HOST_WIDE_INT_M1U << (prec - HOST_BITS_PER_WIDE_INT));
2169 else
2171 high = 0;
2172 if (prec < HOST_BITS_PER_WIDE_INT)
2173 low &= ~(HOST_WIDE_INT_M1U << prec);
2176 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
2177 : exact_log2 (low));
2180 /* Similar, but return the largest integer Y such that 2 ** Y is less
2181 than or equal to EXPR. */
2184 tree_floor_log2 (const_tree expr)
2186 int prec;
2187 HOST_WIDE_INT high, low;
2189 STRIP_NOPS (expr);
2191 if (TREE_CODE (expr) == COMPLEX_CST)
2192 return tree_log2 (TREE_REALPART (expr));
2194 prec = TYPE_PRECISION (TREE_TYPE (expr));
2195 high = TREE_INT_CST_HIGH (expr);
2196 low = TREE_INT_CST_LOW (expr);
2198 /* First clear all bits that are beyond the type's precision in case
2199 we've been sign extended. Ignore if type's precision hasn't been set
2200 since what we are doing is setting it. */
2202 if (prec == HOST_BITS_PER_DOUBLE_INT || prec == 0)
2204 else if (prec > HOST_BITS_PER_WIDE_INT)
2205 high &= ~(HOST_WIDE_INT_M1U << (prec - HOST_BITS_PER_WIDE_INT));
2206 else
2208 high = 0;
2209 if (prec < HOST_BITS_PER_WIDE_INT)
2210 low &= ~(HOST_WIDE_INT_M1U << prec);
2213 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
2214 : floor_log2 (low));
2217 /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for
2218 decimal float constants, so don't return 1 for them. */
2221 real_zerop (const_tree expr)
2223 STRIP_NOPS (expr);
2225 switch (TREE_CODE (expr))
2227 case REAL_CST:
2228 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0)
2229 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2230 case COMPLEX_CST:
2231 return real_zerop (TREE_REALPART (expr))
2232 && real_zerop (TREE_IMAGPART (expr));
2233 case VECTOR_CST:
2235 unsigned i;
2236 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2237 if (!real_zerop (VECTOR_CST_ELT (expr, i)))
2238 return false;
2239 return true;
2241 default:
2242 return false;
2246 /* Return 1 if EXPR is the real constant one in real or complex form.
2247 Trailing zeroes matter for decimal float constants, so don't return
2248 1 for them. */
2251 real_onep (const_tree expr)
2253 STRIP_NOPS (expr);
2255 switch (TREE_CODE (expr))
2257 case REAL_CST:
2258 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1)
2259 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2260 case COMPLEX_CST:
2261 return real_onep (TREE_REALPART (expr))
2262 && real_zerop (TREE_IMAGPART (expr));
2263 case VECTOR_CST:
2265 unsigned i;
2266 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2267 if (!real_onep (VECTOR_CST_ELT (expr, i)))
2268 return false;
2269 return true;
2271 default:
2272 return false;
2276 /* Return 1 if EXPR is the real constant two. Trailing zeroes matter
2277 for decimal float constants, so don't return 1 for them. */
2280 real_twop (const_tree expr)
2282 STRIP_NOPS (expr);
2284 switch (TREE_CODE (expr))
2286 case REAL_CST:
2287 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2)
2288 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2289 case COMPLEX_CST:
2290 return real_twop (TREE_REALPART (expr))
2291 && real_zerop (TREE_IMAGPART (expr));
2292 case VECTOR_CST:
2294 unsigned i;
2295 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2296 if (!real_twop (VECTOR_CST_ELT (expr, i)))
2297 return false;
2298 return true;
2300 default:
2301 return false;
2305 /* Return 1 if EXPR is the real constant minus one. Trailing zeroes
2306 matter for decimal float constants, so don't return 1 for them. */
2309 real_minus_onep (const_tree expr)
2311 STRIP_NOPS (expr);
2313 switch (TREE_CODE (expr))
2315 case REAL_CST:
2316 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1)
2317 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2318 case COMPLEX_CST:
2319 return real_minus_onep (TREE_REALPART (expr))
2320 && real_zerop (TREE_IMAGPART (expr));
2321 case VECTOR_CST:
2323 unsigned i;
2324 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2325 if (!real_minus_onep (VECTOR_CST_ELT (expr, i)))
2326 return false;
2327 return true;
2329 default:
2330 return false;
2334 /* Nonzero if EXP is a constant or a cast of a constant. */
2337 really_constant_p (const_tree exp)
2339 /* This is not quite the same as STRIP_NOPS. It does more. */
2340 while (CONVERT_EXPR_P (exp)
2341 || TREE_CODE (exp) == NON_LVALUE_EXPR)
2342 exp = TREE_OPERAND (exp, 0);
2343 return TREE_CONSTANT (exp);
2346 /* Return first list element whose TREE_VALUE is ELEM.
2347 Return 0 if ELEM is not in LIST. */
2349 tree
2350 value_member (tree elem, tree list)
2352 while (list)
2354 if (elem == TREE_VALUE (list))
2355 return list;
2356 list = TREE_CHAIN (list);
2358 return NULL_TREE;
2361 /* Return first list element whose TREE_PURPOSE is ELEM.
2362 Return 0 if ELEM is not in LIST. */
2364 tree
2365 purpose_member (const_tree elem, tree list)
2367 while (list)
2369 if (elem == TREE_PURPOSE (list))
2370 return list;
2371 list = TREE_CHAIN (list);
2373 return NULL_TREE;
2376 /* Return true if ELEM is in V. */
2378 bool
2379 vec_member (const_tree elem, vec<tree, va_gc> *v)
2381 unsigned ix;
2382 tree t;
2383 FOR_EACH_VEC_SAFE_ELT (v, ix, t)
2384 if (elem == t)
2385 return true;
2386 return false;
2389 /* Returns element number IDX (zero-origin) of chain CHAIN, or
2390 NULL_TREE. */
2392 tree
2393 chain_index (int idx, tree chain)
2395 for (; chain && idx > 0; --idx)
2396 chain = TREE_CHAIN (chain);
2397 return chain;
2400 /* Return nonzero if ELEM is part of the chain CHAIN. */
2403 chain_member (const_tree elem, const_tree chain)
2405 while (chain)
2407 if (elem == chain)
2408 return 1;
2409 chain = DECL_CHAIN (chain);
2412 return 0;
2415 /* Return the length of a chain of nodes chained through TREE_CHAIN.
2416 We expect a null pointer to mark the end of the chain.
2417 This is the Lisp primitive `length'. */
2420 list_length (const_tree t)
2422 const_tree p = t;
2423 #ifdef ENABLE_TREE_CHECKING
2424 const_tree q = t;
2425 #endif
2426 int len = 0;
2428 while (p)
2430 p = TREE_CHAIN (p);
2431 #ifdef ENABLE_TREE_CHECKING
2432 if (len % 2)
2433 q = TREE_CHAIN (q);
2434 gcc_assert (p != q);
2435 #endif
2436 len++;
2439 return len;
2442 /* Returns the number of FIELD_DECLs in TYPE. */
2445 fields_length (const_tree type)
2447 tree t = TYPE_FIELDS (type);
2448 int count = 0;
2450 for (; t; t = DECL_CHAIN (t))
2451 if (TREE_CODE (t) == FIELD_DECL)
2452 ++count;
2454 return count;
2457 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2458 UNION_TYPE TYPE, or NULL_TREE if none. */
2460 tree
2461 first_field (const_tree type)
2463 tree t = TYPE_FIELDS (type);
2464 while (t && TREE_CODE (t) != FIELD_DECL)
2465 t = TREE_CHAIN (t);
2466 return t;
2469 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2470 by modifying the last node in chain 1 to point to chain 2.
2471 This is the Lisp primitive `nconc'. */
2473 tree
2474 chainon (tree op1, tree op2)
2476 tree t1;
2478 if (!op1)
2479 return op2;
2480 if (!op2)
2481 return op1;
2483 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2484 continue;
2485 TREE_CHAIN (t1) = op2;
2487 #ifdef ENABLE_TREE_CHECKING
2489 tree t2;
2490 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2491 gcc_assert (t2 != t1);
2493 #endif
2495 return op1;
2498 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
2500 tree
2501 tree_last (tree chain)
2503 tree next;
2504 if (chain)
2505 while ((next = TREE_CHAIN (chain)))
2506 chain = next;
2507 return chain;
2510 /* Reverse the order of elements in the chain T,
2511 and return the new head of the chain (old last element). */
2513 tree
2514 nreverse (tree t)
2516 tree prev = 0, decl, next;
2517 for (decl = t; decl; decl = next)
2519 /* We shouldn't be using this function to reverse BLOCK chains; we
2520 have blocks_nreverse for that. */
2521 gcc_checking_assert (TREE_CODE (decl) != BLOCK);
2522 next = TREE_CHAIN (decl);
2523 TREE_CHAIN (decl) = prev;
2524 prev = decl;
2526 return prev;
2529 /* Return a newly created TREE_LIST node whose
2530 purpose and value fields are PARM and VALUE. */
2532 tree
2533 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
2535 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
2536 TREE_PURPOSE (t) = parm;
2537 TREE_VALUE (t) = value;
2538 return t;
2541 /* Build a chain of TREE_LIST nodes from a vector. */
2543 tree
2544 build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
2546 tree ret = NULL_TREE;
2547 tree *pp = &ret;
2548 unsigned int i;
2549 tree t;
2550 FOR_EACH_VEC_SAFE_ELT (vec, i, t)
2552 *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
2553 pp = &TREE_CHAIN (*pp);
2555 return ret;
2558 /* Return a newly created TREE_LIST node whose
2559 purpose and value fields are PURPOSE and VALUE
2560 and whose TREE_CHAIN is CHAIN. */
2562 tree
2563 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
2565 tree node;
2567 node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT);
2568 memset (node, 0, sizeof (struct tree_common));
2570 record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list));
2572 TREE_SET_CODE (node, TREE_LIST);
2573 TREE_CHAIN (node) = chain;
2574 TREE_PURPOSE (node) = purpose;
2575 TREE_VALUE (node) = value;
2576 return node;
2579 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2580 trees. */
2582 vec<tree, va_gc> *
2583 ctor_to_vec (tree ctor)
2585 vec<tree, va_gc> *vec;
2586 vec_alloc (vec, CONSTRUCTOR_NELTS (ctor));
2587 unsigned int ix;
2588 tree val;
2590 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2591 vec->quick_push (val);
2593 return vec;
2596 /* Return the size nominally occupied by an object of type TYPE
2597 when it resides in memory. The value is measured in units of bytes,
2598 and its data type is that normally used for type sizes
2599 (which is the first type created by make_signed_type or
2600 make_unsigned_type). */
2602 tree
2603 size_in_bytes (const_tree type)
2605 tree t;
2607 if (type == error_mark_node)
2608 return integer_zero_node;
2610 type = TYPE_MAIN_VARIANT (type);
2611 t = TYPE_SIZE_UNIT (type);
2613 if (t == 0)
2615 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
2616 return size_zero_node;
2619 return t;
2622 /* Return the size of TYPE (in bytes) as a wide integer
2623 or return -1 if the size can vary or is larger than an integer. */
2625 HOST_WIDE_INT
2626 int_size_in_bytes (const_tree type)
2628 tree t;
2630 if (type == error_mark_node)
2631 return 0;
2633 type = TYPE_MAIN_VARIANT (type);
2634 t = TYPE_SIZE_UNIT (type);
2635 if (t == 0
2636 || TREE_CODE (t) != INTEGER_CST
2637 || TREE_INT_CST_HIGH (t) != 0
2638 /* If the result would appear negative, it's too big to represent. */
2639 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
2640 return -1;
2642 return TREE_INT_CST_LOW (t);
2645 /* Return the maximum size of TYPE (in bytes) as a wide integer
2646 or return -1 if the size can vary or is larger than an integer. */
2648 HOST_WIDE_INT
2649 max_int_size_in_bytes (const_tree type)
2651 HOST_WIDE_INT size = -1;
2652 tree size_tree;
2654 /* If this is an array type, check for a possible MAX_SIZE attached. */
2656 if (TREE_CODE (type) == ARRAY_TYPE)
2658 size_tree = TYPE_ARRAY_MAX_SIZE (type);
2660 if (size_tree && host_integerp (size_tree, 1))
2661 size = tree_low_cst (size_tree, 1);
2664 /* If we still haven't been able to get a size, see if the language
2665 can compute a maximum size. */
2667 if (size == -1)
2669 size_tree = lang_hooks.types.max_size (type);
2671 if (size_tree && host_integerp (size_tree, 1))
2672 size = tree_low_cst (size_tree, 1);
2675 return size;
2678 /* Returns a tree for the size of EXP in bytes. */
2680 tree
2681 tree_expr_size (const_tree exp)
2683 if (DECL_P (exp)
2684 && DECL_SIZE_UNIT (exp) != 0)
2685 return DECL_SIZE_UNIT (exp);
2686 else
2687 return size_in_bytes (TREE_TYPE (exp));
2690 /* Return the bit position of FIELD, in bits from the start of the record.
2691 This is a tree of type bitsizetype. */
2693 tree
2694 bit_position (const_tree field)
2696 return bit_from_pos (DECL_FIELD_OFFSET (field),
2697 DECL_FIELD_BIT_OFFSET (field));
2700 /* Likewise, but return as an integer. It must be representable in
2701 that way (since it could be a signed value, we don't have the
2702 option of returning -1 like int_size_in_byte can. */
2704 HOST_WIDE_INT
2705 int_bit_position (const_tree field)
2707 return tree_low_cst (bit_position (field), 0);
2710 /* Return the byte position of FIELD, in bytes from the start of the record.
2711 This is a tree of type sizetype. */
2713 tree
2714 byte_position (const_tree field)
2716 return byte_from_pos (DECL_FIELD_OFFSET (field),
2717 DECL_FIELD_BIT_OFFSET (field));
2720 /* Likewise, but return as an integer. It must be representable in
2721 that way (since it could be a signed value, we don't have the
2722 option of returning -1 like int_size_in_byte can. */
2724 HOST_WIDE_INT
2725 int_byte_position (const_tree field)
2727 return tree_low_cst (byte_position (field), 0);
2730 /* Return the strictest alignment, in bits, that T is known to have. */
2732 unsigned int
2733 expr_align (const_tree t)
2735 unsigned int align0, align1;
2737 switch (TREE_CODE (t))
2739 CASE_CONVERT: case NON_LVALUE_EXPR:
2740 /* If we have conversions, we know that the alignment of the
2741 object must meet each of the alignments of the types. */
2742 align0 = expr_align (TREE_OPERAND (t, 0));
2743 align1 = TYPE_ALIGN (TREE_TYPE (t));
2744 return MAX (align0, align1);
2746 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
2747 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
2748 case CLEANUP_POINT_EXPR:
2749 /* These don't change the alignment of an object. */
2750 return expr_align (TREE_OPERAND (t, 0));
2752 case COND_EXPR:
2753 /* The best we can do is say that the alignment is the least aligned
2754 of the two arms. */
2755 align0 = expr_align (TREE_OPERAND (t, 1));
2756 align1 = expr_align (TREE_OPERAND (t, 2));
2757 return MIN (align0, align1);
2759 /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
2760 meaningfully, it's always 1. */
2761 case LABEL_DECL: case CONST_DECL:
2762 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
2763 case FUNCTION_DECL:
2764 gcc_assert (DECL_ALIGN (t) != 0);
2765 return DECL_ALIGN (t);
2767 default:
2768 break;
2771 /* Otherwise take the alignment from that of the type. */
2772 return TYPE_ALIGN (TREE_TYPE (t));
2775 /* Return, as a tree node, the number of elements for TYPE (which is an
2776 ARRAY_TYPE) minus one. This counts only elements of the top array. */
2778 tree
2779 array_type_nelts (const_tree type)
2781 tree index_type, min, max;
2783 /* If they did it with unspecified bounds, then we should have already
2784 given an error about it before we got here. */
2785 if (! TYPE_DOMAIN (type))
2786 return error_mark_node;
2788 index_type = TYPE_DOMAIN (type);
2789 min = TYPE_MIN_VALUE (index_type);
2790 max = TYPE_MAX_VALUE (index_type);
2792 /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
2793 if (!max)
2794 return error_mark_node;
2796 return (integer_zerop (min)
2797 ? max
2798 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
2801 /* If arg is static -- a reference to an object in static storage -- then
2802 return the object. This is not the same as the C meaning of `static'.
2803 If arg isn't static, return NULL. */
2805 tree
2806 staticp (tree arg)
2808 switch (TREE_CODE (arg))
2810 case FUNCTION_DECL:
2811 /* Nested functions are static, even though taking their address will
2812 involve a trampoline as we unnest the nested function and create
2813 the trampoline on the tree level. */
2814 return arg;
2816 case VAR_DECL:
2817 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2818 && ! DECL_THREAD_LOCAL_P (arg)
2819 && ! DECL_DLLIMPORT_P (arg)
2820 ? arg : NULL);
2822 case CONST_DECL:
2823 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2824 ? arg : NULL);
2826 case CONSTRUCTOR:
2827 return TREE_STATIC (arg) ? arg : NULL;
2829 case LABEL_DECL:
2830 case STRING_CST:
2831 return arg;
2833 case COMPONENT_REF:
2834 /* If the thing being referenced is not a field, then it is
2835 something language specific. */
2836 gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
2838 /* If we are referencing a bitfield, we can't evaluate an
2839 ADDR_EXPR at compile time and so it isn't a constant. */
2840 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
2841 return NULL;
2843 return staticp (TREE_OPERAND (arg, 0));
2845 case BIT_FIELD_REF:
2846 return NULL;
2848 case INDIRECT_REF:
2849 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
2851 case ARRAY_REF:
2852 case ARRAY_RANGE_REF:
2853 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2854 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2855 return staticp (TREE_OPERAND (arg, 0));
2856 else
2857 return NULL;
2859 case COMPOUND_LITERAL_EXPR:
2860 return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
2862 default:
2863 return NULL;
2870 /* Return whether OP is a DECL whose address is function-invariant. */
2872 bool
2873 decl_address_invariant_p (const_tree op)
2875 /* The conditions below are slightly less strict than the one in
2876 staticp. */
2878 switch (TREE_CODE (op))
2880 case PARM_DECL:
2881 case RESULT_DECL:
2882 case LABEL_DECL:
2883 case FUNCTION_DECL:
2884 return true;
2886 case VAR_DECL:
2887 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
2888 || DECL_THREAD_LOCAL_P (op)
2889 || DECL_CONTEXT (op) == current_function_decl
2890 || decl_function_context (op) == current_function_decl)
2891 return true;
2892 break;
2894 case CONST_DECL:
2895 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
2896 || decl_function_context (op) == current_function_decl)
2897 return true;
2898 break;
2900 default:
2901 break;
2904 return false;
2907 /* Return whether OP is a DECL whose address is interprocedural-invariant. */
2909 bool
2910 decl_address_ip_invariant_p (const_tree op)
2912 /* The conditions below are slightly less strict than the one in
2913 staticp. */
2915 switch (TREE_CODE (op))
2917 case LABEL_DECL:
2918 case FUNCTION_DECL:
2919 case STRING_CST:
2920 return true;
2922 case VAR_DECL:
2923 if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
2924 && !DECL_DLLIMPORT_P (op))
2925 || DECL_THREAD_LOCAL_P (op))
2926 return true;
2927 break;
2929 case CONST_DECL:
2930 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
2931 return true;
2932 break;
2934 default:
2935 break;
2938 return false;
2942 /* Return true if T is function-invariant (internal function, does
2943 not handle arithmetic; that's handled in skip_simple_arithmetic and
2944 tree_invariant_p). */
2946 static bool tree_invariant_p (tree t);
2948 static bool
2949 tree_invariant_p_1 (tree t)
2951 tree op;
2953 if (TREE_CONSTANT (t)
2954 || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
2955 return true;
2957 switch (TREE_CODE (t))
2959 case SAVE_EXPR:
2960 return true;
2962 case ADDR_EXPR:
2963 op = TREE_OPERAND (t, 0);
2964 while (handled_component_p (op))
2966 switch (TREE_CODE (op))
2968 case ARRAY_REF:
2969 case ARRAY_RANGE_REF:
2970 if (!tree_invariant_p (TREE_OPERAND (op, 1))
2971 || TREE_OPERAND (op, 2) != NULL_TREE
2972 || TREE_OPERAND (op, 3) != NULL_TREE)
2973 return false;
2974 break;
2976 case COMPONENT_REF:
2977 if (TREE_OPERAND (op, 2) != NULL_TREE)
2978 return false;
2979 break;
2981 default:;
2983 op = TREE_OPERAND (op, 0);
2986 return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
2988 default:
2989 break;
2992 return false;
2995 /* Return true if T is function-invariant. */
2997 static bool
2998 tree_invariant_p (tree t)
3000 tree inner = skip_simple_arithmetic (t);
3001 return tree_invariant_p_1 (inner);
3004 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
3005 Do this to any expression which may be used in more than one place,
3006 but must be evaluated only once.
3008 Normally, expand_expr would reevaluate the expression each time.
3009 Calling save_expr produces something that is evaluated and recorded
3010 the first time expand_expr is called on it. Subsequent calls to
3011 expand_expr just reuse the recorded value.
3013 The call to expand_expr that generates code that actually computes
3014 the value is the first call *at compile time*. Subsequent calls
3015 *at compile time* generate code to use the saved value.
3016 This produces correct result provided that *at run time* control
3017 always flows through the insns made by the first expand_expr
3018 before reaching the other places where the save_expr was evaluated.
3019 You, the caller of save_expr, must make sure this is so.
3021 Constants, and certain read-only nodes, are returned with no
3022 SAVE_EXPR because that is safe. Expressions containing placeholders
3023 are not touched; see tree.def for an explanation of what these
3024 are used for. */
3026 tree
3027 save_expr (tree expr)
3029 tree t = fold (expr);
3030 tree inner;
3032 /* If the tree evaluates to a constant, then we don't want to hide that
3033 fact (i.e. this allows further folding, and direct checks for constants).
3034 However, a read-only object that has side effects cannot be bypassed.
3035 Since it is no problem to reevaluate literals, we just return the
3036 literal node. */
3037 inner = skip_simple_arithmetic (t);
3038 if (TREE_CODE (inner) == ERROR_MARK)
3039 return inner;
3041 if (tree_invariant_p_1 (inner))
3042 return t;
3044 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3045 it means that the size or offset of some field of an object depends on
3046 the value within another field.
3048 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
3049 and some variable since it would then need to be both evaluated once and
3050 evaluated more than once. Front-ends must assure this case cannot
3051 happen by surrounding any such subexpressions in their own SAVE_EXPR
3052 and forcing evaluation at the proper time. */
3053 if (contains_placeholder_p (inner))
3054 return t;
3056 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
3057 SET_EXPR_LOCATION (t, EXPR_LOCATION (expr));
3059 /* This expression might be placed ahead of a jump to ensure that the
3060 value was computed on both sides of the jump. So make sure it isn't
3061 eliminated as dead. */
3062 TREE_SIDE_EFFECTS (t) = 1;
3063 return t;
3066 /* Look inside EXPR into any simple arithmetic operations. Return the
3067 outermost non-arithmetic or non-invariant node. */
3069 tree
3070 skip_simple_arithmetic (tree expr)
3072 /* We don't care about whether this can be used as an lvalue in this
3073 context. */
3074 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3075 expr = TREE_OPERAND (expr, 0);
3077 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3078 a constant, it will be more efficient to not make another SAVE_EXPR since
3079 it will allow better simplification and GCSE will be able to merge the
3080 computations if they actually occur. */
3081 while (true)
3083 if (UNARY_CLASS_P (expr))
3084 expr = TREE_OPERAND (expr, 0);
3085 else if (BINARY_CLASS_P (expr))
3087 if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3088 expr = TREE_OPERAND (expr, 0);
3089 else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3090 expr = TREE_OPERAND (expr, 1);
3091 else
3092 break;
3094 else
3095 break;
3098 return expr;
3101 /* Look inside EXPR into simple arithmetic operations involving constants.
3102 Return the outermost non-arithmetic or non-constant node. */
3104 tree
3105 skip_simple_constant_arithmetic (tree expr)
3107 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3108 expr = TREE_OPERAND (expr, 0);
3110 while (true)
3112 if (UNARY_CLASS_P (expr))
3113 expr = TREE_OPERAND (expr, 0);
3114 else if (BINARY_CLASS_P (expr))
3116 if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3117 expr = TREE_OPERAND (expr, 0);
3118 else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3119 expr = TREE_OPERAND (expr, 1);
3120 else
3121 break;
3123 else
3124 break;
3127 return expr;
3130 /* Return which tree structure is used by T. */
3132 enum tree_node_structure_enum
3133 tree_node_structure (const_tree t)
3135 const enum tree_code code = TREE_CODE (t);
3136 return tree_node_structure_for_code (code);
3139 /* Set various status flags when building a CALL_EXPR object T. */
3141 static void
3142 process_call_operands (tree t)
3144 bool side_effects = TREE_SIDE_EFFECTS (t);
3145 bool read_only = false;
3146 int i = call_expr_flags (t);
3148 /* Calls have side-effects, except those to const or pure functions. */
3149 if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3150 side_effects = true;
3151 /* Propagate TREE_READONLY of arguments for const functions. */
3152 if (i & ECF_CONST)
3153 read_only = true;
3155 if (!side_effects || read_only)
3156 for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3158 tree op = TREE_OPERAND (t, i);
3159 if (op && TREE_SIDE_EFFECTS (op))
3160 side_effects = true;
3161 if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3162 read_only = false;
3165 TREE_SIDE_EFFECTS (t) = side_effects;
3166 TREE_READONLY (t) = read_only;
3169 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3170 size or offset that depends on a field within a record. */
3172 bool
3173 contains_placeholder_p (const_tree exp)
3175 enum tree_code code;
3177 if (!exp)
3178 return 0;
3180 code = TREE_CODE (exp);
3181 if (code == PLACEHOLDER_EXPR)
3182 return 1;
3184 switch (TREE_CODE_CLASS (code))
3186 case tcc_reference:
3187 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3188 position computations since they will be converted into a
3189 WITH_RECORD_EXPR involving the reference, which will assume
3190 here will be valid. */
3191 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3193 case tcc_exceptional:
3194 if (code == TREE_LIST)
3195 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3196 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3197 break;
3199 case tcc_unary:
3200 case tcc_binary:
3201 case tcc_comparison:
3202 case tcc_expression:
3203 switch (code)
3205 case COMPOUND_EXPR:
3206 /* Ignoring the first operand isn't quite right, but works best. */
3207 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3209 case COND_EXPR:
3210 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3211 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3212 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3214 case SAVE_EXPR:
3215 /* The save_expr function never wraps anything containing
3216 a PLACEHOLDER_EXPR. */
3217 return 0;
3219 default:
3220 break;
3223 switch (TREE_CODE_LENGTH (code))
3225 case 1:
3226 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3227 case 2:
3228 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3229 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3230 default:
3231 return 0;
3234 case tcc_vl_exp:
3235 switch (code)
3237 case CALL_EXPR:
3239 const_tree arg;
3240 const_call_expr_arg_iterator iter;
3241 FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3242 if (CONTAINS_PLACEHOLDER_P (arg))
3243 return 1;
3244 return 0;
3246 default:
3247 return 0;
3250 default:
3251 return 0;
3253 return 0;
3256 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3257 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3258 field positions. */
3260 static bool
3261 type_contains_placeholder_1 (const_tree type)
3263 /* If the size contains a placeholder or the parent type (component type in
3264 the case of arrays) type involves a placeholder, this type does. */
3265 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3266 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3267 || (!POINTER_TYPE_P (type)
3268 && TREE_TYPE (type)
3269 && type_contains_placeholder_p (TREE_TYPE (type))))
3270 return true;
3272 /* Now do type-specific checks. Note that the last part of the check above
3273 greatly limits what we have to do below. */
3274 switch (TREE_CODE (type))
3276 case VOID_TYPE:
3277 case POINTER_BOUNDS_TYPE:
3278 case COMPLEX_TYPE:
3279 case ENUMERAL_TYPE:
3280 case BOOLEAN_TYPE:
3281 case POINTER_TYPE:
3282 case OFFSET_TYPE:
3283 case REFERENCE_TYPE:
3284 case METHOD_TYPE:
3285 case FUNCTION_TYPE:
3286 case VECTOR_TYPE:
3287 case NULLPTR_TYPE:
3288 return false;
3290 case INTEGER_TYPE:
3291 case REAL_TYPE:
3292 case FIXED_POINT_TYPE:
3293 /* Here we just check the bounds. */
3294 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3295 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3297 case ARRAY_TYPE:
3298 /* We have already checked the component type above, so just check the
3299 domain type. */
3300 return type_contains_placeholder_p (TYPE_DOMAIN (type));
3302 case RECORD_TYPE:
3303 case UNION_TYPE:
3304 case QUAL_UNION_TYPE:
3306 tree field;
3308 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3309 if (TREE_CODE (field) == FIELD_DECL
3310 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3311 || (TREE_CODE (type) == QUAL_UNION_TYPE
3312 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3313 || type_contains_placeholder_p (TREE_TYPE (field))))
3314 return true;
3316 return false;
3319 default:
3320 gcc_unreachable ();
3324 /* Wrapper around above function used to cache its result. */
3326 bool
3327 type_contains_placeholder_p (tree type)
3329 bool result;
3331 /* If the contains_placeholder_bits field has been initialized,
3332 then we know the answer. */
3333 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3334 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3336 /* Indicate that we've seen this type node, and the answer is false.
3337 This is what we want to return if we run into recursion via fields. */
3338 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3340 /* Compute the real value. */
3341 result = type_contains_placeholder_1 (type);
3343 /* Store the real value. */
3344 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3346 return result;
3349 /* Push tree EXP onto vector QUEUE if it is not already present. */
3351 static void
3352 push_without_duplicates (tree exp, vec<tree> *queue)
3354 unsigned int i;
3355 tree iter;
3357 FOR_EACH_VEC_ELT (*queue, i, iter)
3358 if (simple_cst_equal (iter, exp) == 1)
3359 break;
3361 if (!iter)
3362 queue->safe_push (exp);
3365 /* Given a tree EXP, find all occurrences of references to fields
3366 in a PLACEHOLDER_EXPR and place them in vector REFS without
3367 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that
3368 we assume here that EXP contains only arithmetic expressions
3369 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
3370 argument list. */
3372 void
3373 find_placeholder_in_expr (tree exp, vec<tree> *refs)
3375 enum tree_code code = TREE_CODE (exp);
3376 tree inner;
3377 int i;
3379 /* We handle TREE_LIST and COMPONENT_REF separately. */
3380 if (code == TREE_LIST)
3382 FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
3383 FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
3385 else if (code == COMPONENT_REF)
3387 for (inner = TREE_OPERAND (exp, 0);
3388 REFERENCE_CLASS_P (inner);
3389 inner = TREE_OPERAND (inner, 0))
3392 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
3393 push_without_duplicates (exp, refs);
3394 else
3395 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
3397 else
3398 switch (TREE_CODE_CLASS (code))
3400 case tcc_constant:
3401 break;
3403 case tcc_declaration:
3404 /* Variables allocated to static storage can stay. */
3405 if (!TREE_STATIC (exp))
3406 push_without_duplicates (exp, refs);
3407 break;
3409 case tcc_expression:
3410 /* This is the pattern built in ada/make_aligning_type. */
3411 if (code == ADDR_EXPR
3412 && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
3414 push_without_duplicates (exp, refs);
3415 break;
3418 /* Fall through... */
3420 case tcc_exceptional:
3421 case tcc_unary:
3422 case tcc_binary:
3423 case tcc_comparison:
3424 case tcc_reference:
3425 for (i = 0; i < TREE_CODE_LENGTH (code); i++)
3426 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3427 break;
3429 case tcc_vl_exp:
3430 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3431 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3432 break;
3434 default:
3435 gcc_unreachable ();
3439 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3440 return a tree with all occurrences of references to F in a
3441 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and
3442 CONST_DECLs. Note that we assume here that EXP contains only
3443 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
3444 occurring only in their argument list. */
3446 tree
3447 substitute_in_expr (tree exp, tree f, tree r)
3449 enum tree_code code = TREE_CODE (exp);
3450 tree op0, op1, op2, op3;
3451 tree new_tree;
3453 /* We handle TREE_LIST and COMPONENT_REF separately. */
3454 if (code == TREE_LIST)
3456 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
3457 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
3458 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3459 return exp;
3461 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3463 else if (code == COMPONENT_REF)
3465 tree inner;
3467 /* If this expression is getting a value from a PLACEHOLDER_EXPR
3468 and it is the right field, replace it with R. */
3469 for (inner = TREE_OPERAND (exp, 0);
3470 REFERENCE_CLASS_P (inner);
3471 inner = TREE_OPERAND (inner, 0))
3474 /* The field. */
3475 op1 = TREE_OPERAND (exp, 1);
3477 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
3478 return r;
3480 /* If this expression hasn't been completed let, leave it alone. */
3481 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3482 return exp;
3484 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3485 if (op0 == TREE_OPERAND (exp, 0))
3486 return exp;
3488 new_tree
3489 = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3491 else
3492 switch (TREE_CODE_CLASS (code))
3494 case tcc_constant:
3495 return exp;
3497 case tcc_declaration:
3498 if (exp == f)
3499 return r;
3500 else
3501 return exp;
3503 case tcc_expression:
3504 if (exp == f)
3505 return r;
3507 /* Fall through... */
3509 case tcc_exceptional:
3510 case tcc_unary:
3511 case tcc_binary:
3512 case tcc_comparison:
3513 case tcc_reference:
3514 switch (TREE_CODE_LENGTH (code))
3516 case 0:
3517 return exp;
3519 case 1:
3520 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3521 if (op0 == TREE_OPERAND (exp, 0))
3522 return exp;
3524 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3525 break;
3527 case 2:
3528 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3529 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3531 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3532 return exp;
3534 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3535 break;
3537 case 3:
3538 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3539 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3540 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3542 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3543 && op2 == TREE_OPERAND (exp, 2))
3544 return exp;
3546 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3547 break;
3549 case 4:
3550 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3551 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3552 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3553 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3555 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3556 && op2 == TREE_OPERAND (exp, 2)
3557 && op3 == TREE_OPERAND (exp, 3))
3558 return exp;
3560 new_tree
3561 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3562 break;
3564 default:
3565 gcc_unreachable ();
3567 break;
3569 case tcc_vl_exp:
3571 int i;
3573 new_tree = NULL_TREE;
3575 /* If we are trying to replace F with a constant, inline back
3576 functions which do nothing else than computing a value from
3577 the arguments they are passed. This makes it possible to
3578 fold partially or entirely the replacement expression. */
3579 if (CONSTANT_CLASS_P (r) && code == CALL_EXPR)
3581 tree t = maybe_inline_call_in_expr (exp);
3582 if (t)
3583 return SUBSTITUTE_IN_EXPR (t, f, r);
3586 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3588 tree op = TREE_OPERAND (exp, i);
3589 tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3590 if (new_op != op)
3592 if (!new_tree)
3593 new_tree = copy_node (exp);
3594 TREE_OPERAND (new_tree, i) = new_op;
3598 if (new_tree)
3600 new_tree = fold (new_tree);
3601 if (TREE_CODE (new_tree) == CALL_EXPR)
3602 process_call_operands (new_tree);
3604 else
3605 return exp;
3607 break;
3609 default:
3610 gcc_unreachable ();
3613 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3615 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3616 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3618 return new_tree;
3621 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3622 for it within OBJ, a tree that is an object or a chain of references. */
3624 tree
3625 substitute_placeholder_in_expr (tree exp, tree obj)
3627 enum tree_code code = TREE_CODE (exp);
3628 tree op0, op1, op2, op3;
3629 tree new_tree;
3631 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3632 in the chain of OBJ. */
3633 if (code == PLACEHOLDER_EXPR)
3635 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3636 tree elt;
3638 for (elt = obj; elt != 0;
3639 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3640 || TREE_CODE (elt) == COND_EXPR)
3641 ? TREE_OPERAND (elt, 1)
3642 : (REFERENCE_CLASS_P (elt)
3643 || UNARY_CLASS_P (elt)
3644 || BINARY_CLASS_P (elt)
3645 || VL_EXP_CLASS_P (elt)
3646 || EXPRESSION_CLASS_P (elt))
3647 ? TREE_OPERAND (elt, 0) : 0))
3648 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3649 return elt;
3651 for (elt = obj; elt != 0;
3652 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3653 || TREE_CODE (elt) == COND_EXPR)
3654 ? TREE_OPERAND (elt, 1)
3655 : (REFERENCE_CLASS_P (elt)
3656 || UNARY_CLASS_P (elt)
3657 || BINARY_CLASS_P (elt)
3658 || VL_EXP_CLASS_P (elt)
3659 || EXPRESSION_CLASS_P (elt))
3660 ? TREE_OPERAND (elt, 0) : 0))
3661 if (POINTER_TYPE_P (TREE_TYPE (elt))
3662 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3663 == need_type))
3664 return fold_build1 (INDIRECT_REF, need_type, elt);
3666 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
3667 survives until RTL generation, there will be an error. */
3668 return exp;
3671 /* TREE_LIST is special because we need to look at TREE_VALUE
3672 and TREE_CHAIN, not TREE_OPERANDS. */
3673 else if (code == TREE_LIST)
3675 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
3676 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
3677 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3678 return exp;
3680 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3682 else
3683 switch (TREE_CODE_CLASS (code))
3685 case tcc_constant:
3686 case tcc_declaration:
3687 return exp;
3689 case tcc_exceptional:
3690 case tcc_unary:
3691 case tcc_binary:
3692 case tcc_comparison:
3693 case tcc_expression:
3694 case tcc_reference:
3695 case tcc_statement:
3696 switch (TREE_CODE_LENGTH (code))
3698 case 0:
3699 return exp;
3701 case 1:
3702 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3703 if (op0 == TREE_OPERAND (exp, 0))
3704 return exp;
3706 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3707 break;
3709 case 2:
3710 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3711 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3713 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3714 return exp;
3716 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3717 break;
3719 case 3:
3720 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3721 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3722 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3724 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3725 && op2 == TREE_OPERAND (exp, 2))
3726 return exp;
3728 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3729 break;
3731 case 4:
3732 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3733 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3734 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3735 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
3737 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3738 && op2 == TREE_OPERAND (exp, 2)
3739 && op3 == TREE_OPERAND (exp, 3))
3740 return exp;
3742 new_tree
3743 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3744 break;
3746 default:
3747 gcc_unreachable ();
3749 break;
3751 case tcc_vl_exp:
3753 int i;
3755 new_tree = NULL_TREE;
3757 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3759 tree op = TREE_OPERAND (exp, i);
3760 tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
3761 if (new_op != op)
3763 if (!new_tree)
3764 new_tree = copy_node (exp);
3765 TREE_OPERAND (new_tree, i) = new_op;
3769 if (new_tree)
3771 new_tree = fold (new_tree);
3772 if (TREE_CODE (new_tree) == CALL_EXPR)
3773 process_call_operands (new_tree);
3775 else
3776 return exp;
3778 break;
3780 default:
3781 gcc_unreachable ();
3784 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3786 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3787 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3789 return new_tree;
3792 /* Stabilize a reference so that we can use it any number of times
3793 without causing its operands to be evaluated more than once.
3794 Returns the stabilized reference. This works by means of save_expr,
3795 so see the caveats in the comments about save_expr.
3797 Also allows conversion expressions whose operands are references.
3798 Any other kind of expression is returned unchanged. */
3800 tree
3801 stabilize_reference (tree ref)
3803 tree result;
3804 enum tree_code code = TREE_CODE (ref);
3806 switch (code)
3808 case VAR_DECL:
3809 case PARM_DECL:
3810 case RESULT_DECL:
3811 /* No action is needed in this case. */
3812 return ref;
3814 CASE_CONVERT:
3815 case FLOAT_EXPR:
3816 case FIX_TRUNC_EXPR:
3817 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
3818 break;
3820 case INDIRECT_REF:
3821 result = build_nt (INDIRECT_REF,
3822 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
3823 break;
3825 case COMPONENT_REF:
3826 result = build_nt (COMPONENT_REF,
3827 stabilize_reference (TREE_OPERAND (ref, 0)),
3828 TREE_OPERAND (ref, 1), NULL_TREE);
3829 break;
3831 case BIT_FIELD_REF:
3832 result = build_nt (BIT_FIELD_REF,
3833 stabilize_reference (TREE_OPERAND (ref, 0)),
3834 TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
3835 break;
3837 case ARRAY_REF:
3838 result = build_nt (ARRAY_REF,
3839 stabilize_reference (TREE_OPERAND (ref, 0)),
3840 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3841 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
3842 break;
3844 case ARRAY_RANGE_REF:
3845 result = build_nt (ARRAY_RANGE_REF,
3846 stabilize_reference (TREE_OPERAND (ref, 0)),
3847 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3848 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
3849 break;
3851 case COMPOUND_EXPR:
3852 /* We cannot wrap the first expression in a SAVE_EXPR, as then
3853 it wouldn't be ignored. This matters when dealing with
3854 volatiles. */
3855 return stabilize_reference_1 (ref);
3857 /* If arg isn't a kind of lvalue we recognize, make no change.
3858 Caller should recognize the error for an invalid lvalue. */
3859 default:
3860 return ref;
3862 case ERROR_MARK:
3863 return error_mark_node;
3866 TREE_TYPE (result) = TREE_TYPE (ref);
3867 TREE_READONLY (result) = TREE_READONLY (ref);
3868 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
3869 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
3871 return result;
3874 /* Subroutine of stabilize_reference; this is called for subtrees of
3875 references. Any expression with side-effects must be put in a SAVE_EXPR
3876 to ensure that it is only evaluated once.
3878 We don't put SAVE_EXPR nodes around everything, because assigning very
3879 simple expressions to temporaries causes us to miss good opportunities
3880 for optimizations. Among other things, the opportunity to fold in the
3881 addition of a constant into an addressing mode often gets lost, e.g.
3882 "y[i+1] += x;". In general, we take the approach that we should not make
3883 an assignment unless we are forced into it - i.e., that any non-side effect
3884 operator should be allowed, and that cse should take care of coalescing
3885 multiple utterances of the same expression should that prove fruitful. */
3887 tree
3888 stabilize_reference_1 (tree e)
3890 tree result;
3891 enum tree_code code = TREE_CODE (e);
3893 /* We cannot ignore const expressions because it might be a reference
3894 to a const array but whose index contains side-effects. But we can
3895 ignore things that are actual constant or that already have been
3896 handled by this function. */
3898 if (tree_invariant_p (e))
3899 return e;
3901 switch (TREE_CODE_CLASS (code))
3903 case tcc_exceptional:
3904 case tcc_type:
3905 case tcc_declaration:
3906 case tcc_comparison:
3907 case tcc_statement:
3908 case tcc_expression:
3909 case tcc_reference:
3910 case tcc_vl_exp:
3911 /* If the expression has side-effects, then encase it in a SAVE_EXPR
3912 so that it will only be evaluated once. */
3913 /* The reference (r) and comparison (<) classes could be handled as
3914 below, but it is generally faster to only evaluate them once. */
3915 if (TREE_SIDE_EFFECTS (e))
3916 return save_expr (e);
3917 return e;
3919 case tcc_constant:
3920 /* Constants need no processing. In fact, we should never reach
3921 here. */
3922 return e;
3924 case tcc_binary:
3925 /* Division is slow and tends to be compiled with jumps,
3926 especially the division by powers of 2 that is often
3927 found inside of an array reference. So do it just once. */
3928 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
3929 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
3930 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
3931 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
3932 return save_expr (e);
3933 /* Recursively stabilize each operand. */
3934 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
3935 stabilize_reference_1 (TREE_OPERAND (e, 1)));
3936 break;
3938 case tcc_unary:
3939 /* Recursively stabilize each operand. */
3940 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
3941 break;
3943 default:
3944 gcc_unreachable ();
3947 TREE_TYPE (result) = TREE_TYPE (e);
3948 TREE_READONLY (result) = TREE_READONLY (e);
3949 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
3950 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
3952 return result;
3955 /* Low-level constructors for expressions. */
3957 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
3958 and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
3960 void
3961 recompute_tree_invariant_for_addr_expr (tree t)
3963 tree node;
3964 bool tc = true, se = false;
3966 /* We started out assuming this address is both invariant and constant, but
3967 does not have side effects. Now go down any handled components and see if
3968 any of them involve offsets that are either non-constant or non-invariant.
3969 Also check for side-effects.
3971 ??? Note that this code makes no attempt to deal with the case where
3972 taking the address of something causes a copy due to misalignment. */
3974 #define UPDATE_FLAGS(NODE) \
3975 do { tree _node = (NODE); \
3976 if (_node && !TREE_CONSTANT (_node)) tc = false; \
3977 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
3979 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
3980 node = TREE_OPERAND (node, 0))
3982 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
3983 array reference (probably made temporarily by the G++ front end),
3984 so ignore all the operands. */
3985 if ((TREE_CODE (node) == ARRAY_REF
3986 || TREE_CODE (node) == ARRAY_RANGE_REF)
3987 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
3989 UPDATE_FLAGS (TREE_OPERAND (node, 1));
3990 if (TREE_OPERAND (node, 2))
3991 UPDATE_FLAGS (TREE_OPERAND (node, 2));
3992 if (TREE_OPERAND (node, 3))
3993 UPDATE_FLAGS (TREE_OPERAND (node, 3));
3995 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
3996 FIELD_DECL, apparently. The G++ front end can put something else
3997 there, at least temporarily. */
3998 else if (TREE_CODE (node) == COMPONENT_REF
3999 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4001 if (TREE_OPERAND (node, 2))
4002 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4006 node = lang_hooks.expr_to_decl (node, &tc, &se);
4008 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
4009 the address, since &(*a)->b is a form of addition. If it's a constant, the
4010 address is constant too. If it's a decl, its address is constant if the
4011 decl is static. Everything else is not constant and, furthermore,
4012 taking the address of a volatile variable is not volatile. */
4013 if (TREE_CODE (node) == INDIRECT_REF
4014 || TREE_CODE (node) == MEM_REF)
4015 UPDATE_FLAGS (TREE_OPERAND (node, 0));
4016 else if (CONSTANT_CLASS_P (node))
4018 else if (DECL_P (node))
4019 tc &= (staticp (node) != NULL_TREE);
4020 else
4022 tc = false;
4023 se |= TREE_SIDE_EFFECTS (node);
4027 TREE_CONSTANT (t) = tc;
4028 TREE_SIDE_EFFECTS (t) = se;
4029 #undef UPDATE_FLAGS
4032 /* Build an expression of code CODE, data type TYPE, and operands as
4033 specified. Expressions and reference nodes can be created this way.
4034 Constants, decls, types and misc nodes cannot be.
4036 We define 5 non-variadic functions, from 0 to 4 arguments. This is
4037 enough for all extant tree codes. */
4039 tree
4040 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
4042 tree t;
4044 gcc_assert (TREE_CODE_LENGTH (code) == 0);
4046 t = make_node_stat (code PASS_MEM_STAT);
4047 TREE_TYPE (t) = tt;
4049 return t;
4052 tree
4053 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4055 int length = sizeof (struct tree_exp);
4056 tree t;
4058 record_node_allocation_statistics (code, length);
4060 gcc_assert (TREE_CODE_LENGTH (code) == 1);
4062 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4064 memset (t, 0, sizeof (struct tree_common));
4066 TREE_SET_CODE (t, code);
4068 TREE_TYPE (t) = type;
4069 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4070 TREE_OPERAND (t, 0) = node;
4071 if (node && !TYPE_P (node))
4073 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4074 TREE_READONLY (t) = TREE_READONLY (node);
4077 if (TREE_CODE_CLASS (code) == tcc_statement)
4078 TREE_SIDE_EFFECTS (t) = 1;
4079 else switch (code)
4081 case VA_ARG_EXPR:
4082 /* All of these have side-effects, no matter what their
4083 operands are. */
4084 TREE_SIDE_EFFECTS (t) = 1;
4085 TREE_READONLY (t) = 0;
4086 break;
4088 case INDIRECT_REF:
4089 /* Whether a dereference is readonly has nothing to do with whether
4090 its operand is readonly. */
4091 TREE_READONLY (t) = 0;
4092 break;
4094 case ADDR_EXPR:
4095 if (node)
4096 recompute_tree_invariant_for_addr_expr (t);
4097 break;
4099 default:
4100 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4101 && node && !TYPE_P (node)
4102 && TREE_CONSTANT (node))
4103 TREE_CONSTANT (t) = 1;
4104 if (TREE_CODE_CLASS (code) == tcc_reference
4105 && node && TREE_THIS_VOLATILE (node))
4106 TREE_THIS_VOLATILE (t) = 1;
4107 break;
4110 return t;
4113 #define PROCESS_ARG(N) \
4114 do { \
4115 TREE_OPERAND (t, N) = arg##N; \
4116 if (arg##N &&!TYPE_P (arg##N)) \
4118 if (TREE_SIDE_EFFECTS (arg##N)) \
4119 side_effects = 1; \
4120 if (!TREE_READONLY (arg##N) \
4121 && !CONSTANT_CLASS_P (arg##N)) \
4122 (void) (read_only = 0); \
4123 if (!TREE_CONSTANT (arg##N)) \
4124 (void) (constant = 0); \
4126 } while (0)
4128 tree
4129 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4131 bool constant, read_only, side_effects;
4132 tree t;
4134 gcc_assert (TREE_CODE_LENGTH (code) == 2);
4136 if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4137 && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4138 /* When sizetype precision doesn't match that of pointers
4139 we need to be able to build explicit extensions or truncations
4140 of the offset argument. */
4141 && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4142 gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4143 && TREE_CODE (arg1) == INTEGER_CST);
4145 if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4146 gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4147 && ptrofftype_p (TREE_TYPE (arg1)));
4149 t = make_node_stat (code PASS_MEM_STAT);
4150 TREE_TYPE (t) = tt;
4152 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4153 result based on those same flags for the arguments. But if the
4154 arguments aren't really even `tree' expressions, we shouldn't be trying
4155 to do this. */
4157 /* Expressions without side effects may be constant if their
4158 arguments are as well. */
4159 constant = (TREE_CODE_CLASS (code) == tcc_comparison
4160 || TREE_CODE_CLASS (code) == tcc_binary);
4161 read_only = 1;
4162 side_effects = TREE_SIDE_EFFECTS (t);
4164 PROCESS_ARG (0);
4165 PROCESS_ARG (1);
4167 TREE_READONLY (t) = read_only;
4168 TREE_CONSTANT (t) = constant;
4169 TREE_SIDE_EFFECTS (t) = side_effects;
4170 TREE_THIS_VOLATILE (t)
4171 = (TREE_CODE_CLASS (code) == tcc_reference
4172 && arg0 && TREE_THIS_VOLATILE (arg0));
4174 return t;
4178 tree
4179 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4180 tree arg2 MEM_STAT_DECL)
4182 bool constant, read_only, side_effects;
4183 tree t;
4185 gcc_assert (TREE_CODE_LENGTH (code) == 3);
4186 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4188 t = make_node_stat (code PASS_MEM_STAT);
4189 TREE_TYPE (t) = tt;
4191 read_only = 1;
4193 /* As a special exception, if COND_EXPR has NULL branches, we
4194 assume that it is a gimple statement and always consider
4195 it to have side effects. */
4196 if (code == COND_EXPR
4197 && tt == void_type_node
4198 && arg1 == NULL_TREE
4199 && arg2 == NULL_TREE)
4200 side_effects = true;
4201 else
4202 side_effects = TREE_SIDE_EFFECTS (t);
4204 PROCESS_ARG (0);
4205 PROCESS_ARG (1);
4206 PROCESS_ARG (2);
4208 if (code == COND_EXPR)
4209 TREE_READONLY (t) = read_only;
4211 TREE_SIDE_EFFECTS (t) = side_effects;
4212 TREE_THIS_VOLATILE (t)
4213 = (TREE_CODE_CLASS (code) == tcc_reference
4214 && arg0 && TREE_THIS_VOLATILE (arg0));
4216 return t;
4219 tree
4220 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4221 tree arg2, tree arg3 MEM_STAT_DECL)
4223 bool constant, read_only, side_effects;
4224 tree t;
4226 gcc_assert (TREE_CODE_LENGTH (code) == 4);
4228 t = make_node_stat (code PASS_MEM_STAT);
4229 TREE_TYPE (t) = tt;
4231 side_effects = TREE_SIDE_EFFECTS (t);
4233 PROCESS_ARG (0);
4234 PROCESS_ARG (1);
4235 PROCESS_ARG (2);
4236 PROCESS_ARG (3);
4238 TREE_SIDE_EFFECTS (t) = side_effects;
4239 TREE_THIS_VOLATILE (t)
4240 = (TREE_CODE_CLASS (code) == tcc_reference
4241 && arg0 && TREE_THIS_VOLATILE (arg0));
4243 return t;
4246 tree
4247 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4248 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4250 bool constant, read_only, side_effects;
4251 tree t;
4253 gcc_assert (TREE_CODE_LENGTH (code) == 5);
4255 t = make_node_stat (code PASS_MEM_STAT);
4256 TREE_TYPE (t) = tt;
4258 side_effects = TREE_SIDE_EFFECTS (t);
4260 PROCESS_ARG (0);
4261 PROCESS_ARG (1);
4262 PROCESS_ARG (2);
4263 PROCESS_ARG (3);
4264 PROCESS_ARG (4);
4266 TREE_SIDE_EFFECTS (t) = side_effects;
4267 TREE_THIS_VOLATILE (t)
4268 = (TREE_CODE_CLASS (code) == tcc_reference
4269 && arg0 && TREE_THIS_VOLATILE (arg0));
4271 return t;
4274 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4275 on the pointer PTR. */
4277 tree
4278 build_simple_mem_ref_loc (location_t loc, tree ptr)
4280 HOST_WIDE_INT offset = 0;
4281 tree ptype = TREE_TYPE (ptr);
4282 tree tem;
4283 /* For convenience allow addresses that collapse to a simple base
4284 and offset. */
4285 if (TREE_CODE (ptr) == ADDR_EXPR
4286 && (handled_component_p (TREE_OPERAND (ptr, 0))
4287 || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4289 ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4290 gcc_assert (ptr);
4291 ptr = build_fold_addr_expr (ptr);
4292 gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
4294 tem = build2 (MEM_REF, TREE_TYPE (ptype),
4295 ptr, build_int_cst (ptype, offset));
4296 SET_EXPR_LOCATION (tem, loc);
4297 return tem;
4300 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T. */
4302 double_int
4303 mem_ref_offset (const_tree t)
4305 tree toff = TREE_OPERAND (t, 1);
4306 return tree_to_double_int (toff).sext (TYPE_PRECISION (TREE_TYPE (toff)));
4309 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
4310 offsetted by OFFSET units. */
4312 tree
4313 build_invariant_address (tree type, tree base, HOST_WIDE_INT offset)
4315 tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
4316 build_fold_addr_expr (base),
4317 build_int_cst (ptr_type_node, offset));
4318 tree addr = build1 (ADDR_EXPR, type, ref);
4319 recompute_tree_invariant_for_addr_expr (addr);
4320 return addr;
4323 /* Similar except don't specify the TREE_TYPE
4324 and leave the TREE_SIDE_EFFECTS as 0.
4325 It is permissible for arguments to be null,
4326 or even garbage if their values do not matter. */
4328 tree
4329 build_nt (enum tree_code code, ...)
4331 tree t;
4332 int length;
4333 int i;
4334 va_list p;
4336 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4338 va_start (p, code);
4340 t = make_node (code);
4341 length = TREE_CODE_LENGTH (code);
4343 for (i = 0; i < length; i++)
4344 TREE_OPERAND (t, i) = va_arg (p, tree);
4346 va_end (p);
4347 return t;
4350 /* Similar to build_nt, but for creating a CALL_EXPR object with a
4351 tree vec. */
4353 tree
4354 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
4356 tree ret, t;
4357 unsigned int ix;
4359 ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
4360 CALL_EXPR_FN (ret) = fn;
4361 CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
4362 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
4363 CALL_EXPR_ARG (ret, ix) = t;
4364 return ret;
4367 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
4368 We do NOT enter this node in any sort of symbol table.
4370 LOC is the location of the decl.
4372 layout_decl is used to set up the decl's storage layout.
4373 Other slots are initialized to 0 or null pointers. */
4375 tree
4376 build_decl_stat (location_t loc, enum tree_code code, tree name,
4377 tree type MEM_STAT_DECL)
4379 tree t;
4381 t = make_node_stat (code PASS_MEM_STAT);
4382 DECL_SOURCE_LOCATION (t) = loc;
4384 /* if (type == error_mark_node)
4385 type = integer_type_node; */
4386 /* That is not done, deliberately, so that having error_mark_node
4387 as the type can suppress useless errors in the use of this variable. */
4389 DECL_NAME (t) = name;
4390 TREE_TYPE (t) = type;
4392 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
4393 layout_decl (t, 0);
4395 return t;
4398 /* Builds and returns function declaration with NAME and TYPE. */
4400 tree
4401 build_fn_decl (const char *name, tree type)
4403 tree id = get_identifier (name);
4404 tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
4406 DECL_EXTERNAL (decl) = 1;
4407 TREE_PUBLIC (decl) = 1;
4408 DECL_ARTIFICIAL (decl) = 1;
4409 TREE_NOTHROW (decl) = 1;
4411 return decl;
4414 vec<tree, va_gc> *all_translation_units;
4416 /* Builds a new translation-unit decl with name NAME, queues it in the
4417 global list of translation-unit decls and returns it. */
4419 tree
4420 build_translation_unit_decl (tree name)
4422 tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
4423 name, NULL_TREE);
4424 TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
4425 vec_safe_push (all_translation_units, tu);
4426 return tu;
4430 /* BLOCK nodes are used to represent the structure of binding contours
4431 and declarations, once those contours have been exited and their contents
4432 compiled. This information is used for outputting debugging info. */
4434 tree
4435 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
4437 tree block = make_node (BLOCK);
4439 BLOCK_VARS (block) = vars;
4440 BLOCK_SUBBLOCKS (block) = subblocks;
4441 BLOCK_SUPERCONTEXT (block) = supercontext;
4442 BLOCK_CHAIN (block) = chain;
4443 return block;
4447 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
4449 LOC is the location to use in tree T. */
4451 void
4452 protected_set_expr_location (tree t, location_t loc)
4454 if (t && CAN_HAVE_LOCATION_P (t))
4455 SET_EXPR_LOCATION (t, loc);
4458 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
4459 is ATTRIBUTE. */
4461 tree
4462 build_decl_attribute_variant (tree ddecl, tree attribute)
4464 DECL_ATTRIBUTES (ddecl) = attribute;
4465 return ddecl;
4468 /* Borrowed from hashtab.c iterative_hash implementation. */
4469 #define mix(a,b,c) \
4471 a -= b; a -= c; a ^= (c>>13); \
4472 b -= c; b -= a; b ^= (a<< 8); \
4473 c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
4474 a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
4475 b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
4476 c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
4477 a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
4478 b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
4479 c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
4483 /* Produce good hash value combining VAL and VAL2. */
4484 hashval_t
4485 iterative_hash_hashval_t (hashval_t val, hashval_t val2)
4487 /* the golden ratio; an arbitrary value. */
4488 hashval_t a = 0x9e3779b9;
4490 mix (a, val, val2);
4491 return val2;
4494 /* Produce good hash value combining VAL and VAL2. */
4495 hashval_t
4496 iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
4498 if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
4499 return iterative_hash_hashval_t (val, val2);
4500 else
4502 hashval_t a = (hashval_t) val;
4503 /* Avoid warnings about shifting of more than the width of the type on
4504 hosts that won't execute this path. */
4505 int zero = 0;
4506 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
4507 mix (a, b, val2);
4508 if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
4510 hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
4511 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
4512 mix (a, b, val2);
4514 return val2;
4518 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4519 is ATTRIBUTE and its qualifiers are QUALS.
4521 Record such modified types already made so we don't make duplicates. */
4523 tree
4524 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
4526 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
4528 hashval_t hashcode = 0;
4529 tree ntype;
4530 enum tree_code code = TREE_CODE (ttype);
4532 /* Building a distinct copy of a tagged type is inappropriate; it
4533 causes breakage in code that expects there to be a one-to-one
4534 relationship between a struct and its fields.
4535 build_duplicate_type is another solution (as used in
4536 handle_transparent_union_attribute), but that doesn't play well
4537 with the stronger C++ type identity model. */
4538 if (TREE_CODE (ttype) == RECORD_TYPE
4539 || TREE_CODE (ttype) == UNION_TYPE
4540 || TREE_CODE (ttype) == QUAL_UNION_TYPE
4541 || TREE_CODE (ttype) == ENUMERAL_TYPE)
4543 warning (OPT_Wattributes,
4544 "ignoring attributes applied to %qT after definition",
4545 TYPE_MAIN_VARIANT (ttype));
4546 return build_qualified_type (ttype, quals);
4549 ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
4550 ntype = build_distinct_type_copy (ttype);
4552 TYPE_ATTRIBUTES (ntype) = attribute;
4554 hashcode = iterative_hash_object (code, hashcode);
4555 if (TREE_TYPE (ntype))
4556 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
4557 hashcode);
4558 hashcode = attribute_hash_list (attribute, hashcode);
4560 switch (TREE_CODE (ntype))
4562 case FUNCTION_TYPE:
4563 hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
4564 break;
4565 case ARRAY_TYPE:
4566 if (TYPE_DOMAIN (ntype))
4567 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
4568 hashcode);
4569 break;
4570 case INTEGER_TYPE:
4571 hashcode = iterative_hash_object
4572 (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
4573 hashcode = iterative_hash_object
4574 (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
4575 break;
4576 case REAL_TYPE:
4577 case FIXED_POINT_TYPE:
4579 unsigned int precision = TYPE_PRECISION (ntype);
4580 hashcode = iterative_hash_object (precision, hashcode);
4582 break;
4583 default:
4584 break;
4587 ntype = type_hash_canon (hashcode, ntype);
4589 /* If the target-dependent attributes make NTYPE different from
4590 its canonical type, we will need to use structural equality
4591 checks for this type. */
4592 if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
4593 || !comp_type_attributes (ntype, ttype))
4594 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
4595 else if (TYPE_CANONICAL (ntype) == ntype)
4596 TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
4598 ttype = build_qualified_type (ntype, quals);
4600 else if (TYPE_QUALS (ttype) != quals)
4601 ttype = build_qualified_type (ttype, quals);
4603 return ttype;
4606 /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
4607 the same. */
4609 static bool
4610 omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
4612 tree cl1, cl2;
4613 for (cl1 = clauses1, cl2 = clauses2;
4614 cl1 && cl2;
4615 cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
4617 if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
4618 return false;
4619 if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
4621 if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
4622 OMP_CLAUSE_DECL (cl2)) != 1)
4623 return false;
4625 switch (OMP_CLAUSE_CODE (cl1))
4627 case OMP_CLAUSE_ALIGNED:
4628 if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
4629 OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
4630 return false;
4631 break;
4632 case OMP_CLAUSE_LINEAR:
4633 if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
4634 OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
4635 return false;
4636 break;
4637 case OMP_CLAUSE_SIMDLEN:
4638 if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
4639 OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
4640 return false;
4641 default:
4642 break;
4645 return true;
4648 /* Remove duplicate "omp declare simd" attributes. */
4650 void
4651 omp_remove_redundant_declare_simd_attrs (tree fndecl)
4653 tree attr, end_attr = NULL_TREE, last_attr = NULL_TREE;
4654 for (attr = lookup_attribute ("omp declare simd", DECL_ATTRIBUTES (fndecl));
4655 attr;
4656 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
4658 tree *pc;
4659 for (pc = &TREE_CHAIN (attr); *pc && *pc != end_attr; )
4661 if (is_attribute_p ("omp declare simd", TREE_PURPOSE (*pc)))
4663 last_attr = TREE_CHAIN (*pc);
4664 if (TREE_VALUE (attr) == NULL_TREE)
4666 if (TREE_VALUE (*pc) == NULL_TREE)
4668 *pc = TREE_CHAIN (*pc);
4669 continue;
4672 else if (TREE_VALUE (*pc) != NULL_TREE
4673 && omp_declare_simd_clauses_equal
4674 (TREE_VALUE (TREE_VALUE (*pc)),
4675 TREE_VALUE (TREE_VALUE (attr))))
4677 *pc = TREE_CHAIN (*pc);
4678 continue;
4681 pc = &TREE_CHAIN (*pc);
4683 end_attr = last_attr;
4687 /* Compare two attributes for their value identity. Return true if the
4688 attribute values are known to be equal; otherwise return false.
4691 static bool
4692 attribute_value_equal (const_tree attr1, const_tree attr2)
4694 if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
4695 return true;
4697 if (TREE_VALUE (attr1) != NULL_TREE
4698 && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
4699 && TREE_VALUE (attr2) != NULL
4700 && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
4701 return (simple_cst_list_equal (TREE_VALUE (attr1),
4702 TREE_VALUE (attr2)) == 1);
4704 if (flag_openmp
4705 && TREE_VALUE (attr1) && TREE_VALUE (attr2)
4706 && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
4707 && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
4708 return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
4709 TREE_VALUE (attr2));
4711 return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
4714 /* Return 0 if the attributes for two types are incompatible, 1 if they
4715 are compatible, and 2 if they are nearly compatible (which causes a
4716 warning to be generated). */
4718 comp_type_attributes (const_tree type1, const_tree type2)
4720 const_tree a1 = TYPE_ATTRIBUTES (type1);
4721 const_tree a2 = TYPE_ATTRIBUTES (type2);
4722 const_tree a;
4724 if (a1 == a2)
4725 return 1;
4726 for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
4728 const struct attribute_spec *as;
4729 const_tree attr;
4731 as = lookup_attribute_spec (get_attribute_name (a));
4732 if (!as || as->affects_type_identity == false)
4733 continue;
4735 attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
4736 if (!attr || !attribute_value_equal (a, attr))
4737 break;
4739 if (!a)
4741 for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
4743 const struct attribute_spec *as;
4745 as = lookup_attribute_spec (get_attribute_name (a));
4746 if (!as || as->affects_type_identity == false)
4747 continue;
4749 if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
4750 break;
4751 /* We don't need to compare trees again, as we did this
4752 already in first loop. */
4754 /* All types - affecting identity - are equal, so
4755 there is no need to call target hook for comparison. */
4756 if (!a)
4757 return 1;
4759 /* As some type combinations - like default calling-convention - might
4760 be compatible, we have to call the target hook to get the final result. */
4761 return targetm.comp_type_attributes (type1, type2);
4764 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4765 is ATTRIBUTE.
4767 Record such modified types already made so we don't make duplicates. */
4769 tree
4770 build_type_attribute_variant (tree ttype, tree attribute)
4772 return build_type_attribute_qual_variant (ttype, attribute,
4773 TYPE_QUALS (ttype));
4777 /* Reset the expression *EXPR_P, a size or position.
4779 ??? We could reset all non-constant sizes or positions. But it's cheap
4780 enough to not do so and refrain from adding workarounds to dwarf2out.c.
4782 We need to reset self-referential sizes or positions because they cannot
4783 be gimplified and thus can contain a CALL_EXPR after the gimplification
4784 is finished, which will run afoul of LTO streaming. And they need to be
4785 reset to something essentially dummy but not constant, so as to preserve
4786 the properties of the object they are attached to. */
4788 static inline void
4789 free_lang_data_in_one_sizepos (tree *expr_p)
4791 tree expr = *expr_p;
4792 if (CONTAINS_PLACEHOLDER_P (expr))
4793 *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
4797 /* Reset all the fields in a binfo node BINFO. We only keep
4798 BINFO_VTABLE, which is used by gimple_fold_obj_type_ref. */
4800 static void
4801 free_lang_data_in_binfo (tree binfo)
4803 unsigned i;
4804 tree t;
4806 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
4808 BINFO_VIRTUALS (binfo) = NULL_TREE;
4809 BINFO_BASE_ACCESSES (binfo) = NULL;
4810 BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
4811 BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
4813 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
4814 free_lang_data_in_binfo (t);
4818 /* Reset all language specific information still present in TYPE. */
4820 static void
4821 free_lang_data_in_type (tree type)
4823 gcc_assert (TYPE_P (type));
4825 /* Give the FE a chance to remove its own data first. */
4826 lang_hooks.free_lang_data (type);
4828 TREE_LANG_FLAG_0 (type) = 0;
4829 TREE_LANG_FLAG_1 (type) = 0;
4830 TREE_LANG_FLAG_2 (type) = 0;
4831 TREE_LANG_FLAG_3 (type) = 0;
4832 TREE_LANG_FLAG_4 (type) = 0;
4833 TREE_LANG_FLAG_5 (type) = 0;
4834 TREE_LANG_FLAG_6 (type) = 0;
4836 if (TREE_CODE (type) == FUNCTION_TYPE)
4838 /* Remove the const and volatile qualifiers from arguments. The
4839 C++ front end removes them, but the C front end does not,
4840 leading to false ODR violation errors when merging two
4841 instances of the same function signature compiled by
4842 different front ends. */
4843 tree p;
4845 for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
4847 tree arg_type = TREE_VALUE (p);
4849 if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
4851 int quals = TYPE_QUALS (arg_type)
4852 & ~TYPE_QUAL_CONST
4853 & ~TYPE_QUAL_VOLATILE;
4854 TREE_VALUE (p) = build_qualified_type (arg_type, quals);
4855 free_lang_data_in_type (TREE_VALUE (p));
4860 /* Remove members that are not actually FIELD_DECLs from the field
4861 list of an aggregate. These occur in C++. */
4862 if (RECORD_OR_UNION_TYPE_P (type))
4864 tree prev, member;
4866 /* Note that TYPE_FIELDS can be shared across distinct
4867 TREE_TYPEs. Therefore, if the first field of TYPE_FIELDS is
4868 to be removed, we cannot set its TREE_CHAIN to NULL.
4869 Otherwise, we would not be able to find all the other fields
4870 in the other instances of this TREE_TYPE.
4872 This was causing an ICE in testsuite/g++.dg/lto/20080915.C. */
4873 prev = NULL_TREE;
4874 member = TYPE_FIELDS (type);
4875 while (member)
4877 if (TREE_CODE (member) == FIELD_DECL
4878 || TREE_CODE (member) == TYPE_DECL)
4880 if (prev)
4881 TREE_CHAIN (prev) = member;
4882 else
4883 TYPE_FIELDS (type) = member;
4884 prev = member;
4887 member = TREE_CHAIN (member);
4890 if (prev)
4891 TREE_CHAIN (prev) = NULL_TREE;
4892 else
4893 TYPE_FIELDS (type) = NULL_TREE;
4895 TYPE_METHODS (type) = NULL_TREE;
4896 if (TYPE_BINFO (type))
4897 free_lang_data_in_binfo (TYPE_BINFO (type));
4899 else
4901 /* For non-aggregate types, clear out the language slot (which
4902 overloads TYPE_BINFO). */
4903 TYPE_LANG_SLOT_1 (type) = NULL_TREE;
4905 if (INTEGRAL_TYPE_P (type)
4906 || SCALAR_FLOAT_TYPE_P (type)
4907 || FIXED_POINT_TYPE_P (type))
4909 free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
4910 free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
4914 free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
4915 free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
4917 if (TYPE_CONTEXT (type)
4918 && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
4920 tree ctx = TYPE_CONTEXT (type);
4923 ctx = BLOCK_SUPERCONTEXT (ctx);
4925 while (ctx && TREE_CODE (ctx) == BLOCK);
4926 TYPE_CONTEXT (type) = ctx;
4931 /* Return true if DECL may need an assembler name to be set. */
4933 static inline bool
4934 need_assembler_name_p (tree decl)
4936 /* Only FUNCTION_DECLs and VAR_DECLs are considered. */
4937 if (TREE_CODE (decl) != FUNCTION_DECL
4938 && TREE_CODE (decl) != VAR_DECL)
4939 return false;
4941 /* If DECL already has its assembler name set, it does not need a
4942 new one. */
4943 if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
4944 || DECL_ASSEMBLER_NAME_SET_P (decl))
4945 return false;
4947 /* Abstract decls do not need an assembler name. */
4948 if (DECL_ABSTRACT (decl))
4949 return false;
4951 /* For VAR_DECLs, only static, public and external symbols need an
4952 assembler name. */
4953 if (TREE_CODE (decl) == VAR_DECL
4954 && !TREE_STATIC (decl)
4955 && !TREE_PUBLIC (decl)
4956 && !DECL_EXTERNAL (decl))
4957 return false;
4959 if (TREE_CODE (decl) == FUNCTION_DECL)
4961 /* Do not set assembler name on builtins. Allow RTL expansion to
4962 decide whether to expand inline or via a regular call. */
4963 if (DECL_BUILT_IN (decl)
4964 && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
4965 return false;
4967 /* Functions represented in the callgraph need an assembler name. */
4968 if (cgraph_get_node (decl) != NULL)
4969 return true;
4971 /* Unused and not public functions don't need an assembler name. */
4972 if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
4973 return false;
4976 return true;
4980 /* Reset all language specific information still present in symbol
4981 DECL. */
4983 static void
4984 free_lang_data_in_decl (tree decl)
4986 gcc_assert (DECL_P (decl));
4988 /* Give the FE a chance to remove its own data first. */
4989 lang_hooks.free_lang_data (decl);
4991 TREE_LANG_FLAG_0 (decl) = 0;
4992 TREE_LANG_FLAG_1 (decl) = 0;
4993 TREE_LANG_FLAG_2 (decl) = 0;
4994 TREE_LANG_FLAG_3 (decl) = 0;
4995 TREE_LANG_FLAG_4 (decl) = 0;
4996 TREE_LANG_FLAG_5 (decl) = 0;
4997 TREE_LANG_FLAG_6 (decl) = 0;
4999 free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5000 free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5001 if (TREE_CODE (decl) == FIELD_DECL)
5003 free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5004 if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5005 DECL_QUALIFIER (decl) = NULL_TREE;
5008 if (TREE_CODE (decl) == FUNCTION_DECL)
5010 struct cgraph_node *node;
5011 if (!(node = cgraph_get_node (decl))
5012 || (!node->symbol.definition && !node->clones))
5014 if (node)
5015 cgraph_release_function_body (node);
5016 else
5018 release_function_body (decl);
5019 DECL_ARGUMENTS (decl) = NULL;
5020 DECL_RESULT (decl) = NULL;
5021 DECL_INITIAL (decl) = error_mark_node;
5024 if (gimple_has_body_p (decl))
5026 tree t;
5028 /* If DECL has a gimple body, then the context for its
5029 arguments must be DECL. Otherwise, it doesn't really
5030 matter, as we will not be emitting any code for DECL. In
5031 general, there may be other instances of DECL created by
5032 the front end and since PARM_DECLs are generally shared,
5033 their DECL_CONTEXT changes as the replicas of DECL are
5034 created. The only time where DECL_CONTEXT is important
5035 is for the FUNCTION_DECLs that have a gimple body (since
5036 the PARM_DECL will be used in the function's body). */
5037 for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5038 DECL_CONTEXT (t) = decl;
5041 /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5042 At this point, it is not needed anymore. */
5043 DECL_SAVED_TREE (decl) = NULL_TREE;
5045 /* Clear the abstract origin if it refers to a method. Otherwise
5046 dwarf2out.c will ICE as we clear TYPE_METHODS and thus the
5047 origin will not be output correctly. */
5048 if (DECL_ABSTRACT_ORIGIN (decl)
5049 && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5050 && RECORD_OR_UNION_TYPE_P
5051 (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5052 DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5054 /* Sometimes the C++ frontend doesn't manage to transform a temporary
5055 DECL_VINDEX referring to itself into a vtable slot number as it
5056 should. Happens with functions that are copied and then forgotten
5057 about. Just clear it, it won't matter anymore. */
5058 if (DECL_VINDEX (decl) && !host_integerp (DECL_VINDEX (decl), 0))
5059 DECL_VINDEX (decl) = NULL_TREE;
5061 else if (TREE_CODE (decl) == VAR_DECL)
5063 if ((DECL_EXTERNAL (decl)
5064 && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5065 || (decl_function_context (decl) && !TREE_STATIC (decl)))
5066 DECL_INITIAL (decl) = NULL_TREE;
5068 else if (TREE_CODE (decl) == TYPE_DECL
5069 || TREE_CODE (decl) == FIELD_DECL)
5070 DECL_INITIAL (decl) = NULL_TREE;
5071 else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5072 && DECL_INITIAL (decl)
5073 && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5075 /* Strip builtins from the translation-unit BLOCK. We still have targets
5076 without builtin_decl_explicit support and also builtins are shared
5077 nodes and thus we can't use TREE_CHAIN in multiple lists. */
5078 tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5079 while (*nextp)
5081 tree var = *nextp;
5082 if (TREE_CODE (var) == FUNCTION_DECL
5083 && DECL_BUILT_IN (var))
5084 *nextp = TREE_CHAIN (var);
5085 else
5086 nextp = &TREE_CHAIN (var);
5092 /* Data used when collecting DECLs and TYPEs for language data removal. */
5094 struct free_lang_data_d
5096 /* Worklist to avoid excessive recursion. */
5097 vec<tree> worklist;
5099 /* Set of traversed objects. Used to avoid duplicate visits. */
5100 struct pointer_set_t *pset;
5102 /* Array of symbols to process with free_lang_data_in_decl. */
5103 vec<tree> decls;
5105 /* Array of types to process with free_lang_data_in_type. */
5106 vec<tree> types;
5110 /* Save all language fields needed to generate proper debug information
5111 for DECL. This saves most fields cleared out by free_lang_data_in_decl. */
5113 static void
5114 save_debug_info_for_decl (tree t)
5116 /*struct saved_debug_info_d *sdi;*/
5118 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
5120 /* FIXME. Partial implementation for saving debug info removed. */
5124 /* Save all language fields needed to generate proper debug information
5125 for TYPE. This saves most fields cleared out by free_lang_data_in_type. */
5127 static void
5128 save_debug_info_for_type (tree t)
5130 /*struct saved_debug_info_d *sdi;*/
5132 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
5134 /* FIXME. Partial implementation for saving debug info removed. */
5138 /* Add type or decl T to one of the list of tree nodes that need their
5139 language data removed. The lists are held inside FLD. */
5141 static void
5142 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
5144 if (DECL_P (t))
5146 fld->decls.safe_push (t);
5147 if (debug_info_level > DINFO_LEVEL_TERSE)
5148 save_debug_info_for_decl (t);
5150 else if (TYPE_P (t))
5152 fld->types.safe_push (t);
5153 if (debug_info_level > DINFO_LEVEL_TERSE)
5154 save_debug_info_for_type (t);
5156 else
5157 gcc_unreachable ();
5160 /* Push tree node T into FLD->WORKLIST. */
5162 static inline void
5163 fld_worklist_push (tree t, struct free_lang_data_d *fld)
5165 if (t && !is_lang_specific (t) && !pointer_set_contains (fld->pset, t))
5166 fld->worklist.safe_push ((t));
5170 /* Operand callback helper for free_lang_data_in_node. *TP is the
5171 subtree operand being considered. */
5173 static tree
5174 find_decls_types_r (tree *tp, int *ws, void *data)
5176 tree t = *tp;
5177 struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
5179 if (TREE_CODE (t) == TREE_LIST)
5180 return NULL_TREE;
5182 /* Language specific nodes will be removed, so there is no need
5183 to gather anything under them. */
5184 if (is_lang_specific (t))
5186 *ws = 0;
5187 return NULL_TREE;
5190 if (DECL_P (t))
5192 /* Note that walk_tree does not traverse every possible field in
5193 decls, so we have to do our own traversals here. */
5194 add_tree_to_fld_list (t, fld);
5196 fld_worklist_push (DECL_NAME (t), fld);
5197 fld_worklist_push (DECL_CONTEXT (t), fld);
5198 fld_worklist_push (DECL_SIZE (t), fld);
5199 fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5201 /* We are going to remove everything under DECL_INITIAL for
5202 TYPE_DECLs. No point walking them. */
5203 if (TREE_CODE (t) != TYPE_DECL)
5204 fld_worklist_push (DECL_INITIAL (t), fld);
5206 fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5207 fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5209 if (TREE_CODE (t) == FUNCTION_DECL)
5211 fld_worklist_push (DECL_ARGUMENTS (t), fld);
5212 fld_worklist_push (DECL_RESULT (t), fld);
5214 else if (TREE_CODE (t) == TYPE_DECL)
5216 fld_worklist_push (DECL_ARGUMENT_FLD (t), fld);
5217 fld_worklist_push (DECL_VINDEX (t), fld);
5218 fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
5220 else if (TREE_CODE (t) == FIELD_DECL)
5222 fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5223 fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5224 fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5225 fld_worklist_push (DECL_FCONTEXT (t), fld);
5227 else if (TREE_CODE (t) == VAR_DECL)
5229 fld_worklist_push (DECL_SECTION_NAME (t), fld);
5230 fld_worklist_push (DECL_COMDAT_GROUP (t), fld);
5233 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == PARM_DECL)
5234 && DECL_HAS_VALUE_EXPR_P (t))
5235 fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5237 if (TREE_CODE (t) != FIELD_DECL
5238 && TREE_CODE (t) != TYPE_DECL)
5239 fld_worklist_push (TREE_CHAIN (t), fld);
5240 *ws = 0;
5242 else if (TYPE_P (t))
5244 /* Note that walk_tree does not traverse every possible field in
5245 types, so we have to do our own traversals here. */
5246 add_tree_to_fld_list (t, fld);
5248 if (!RECORD_OR_UNION_TYPE_P (t))
5249 fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5250 fld_worklist_push (TYPE_SIZE (t), fld);
5251 fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5252 fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5253 fld_worklist_push (TYPE_POINTER_TO (t), fld);
5254 fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5255 fld_worklist_push (TYPE_NAME (t), fld);
5256 /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO. We do not stream
5257 them and thus do not and want not to reach unused pointer types
5258 this way. */
5259 if (!POINTER_TYPE_P (t))
5260 fld_worklist_push (TYPE_MINVAL (t), fld);
5261 if (!RECORD_OR_UNION_TYPE_P (t))
5262 fld_worklist_push (TYPE_MAXVAL (t), fld);
5263 fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5264 /* Do not walk TYPE_NEXT_VARIANT. We do not stream it and thus
5265 do not and want not to reach unused variants this way. */
5266 if (TYPE_CONTEXT (t))
5268 tree ctx = TYPE_CONTEXT (t);
5269 /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
5270 So push that instead. */
5271 while (ctx && TREE_CODE (ctx) == BLOCK)
5272 ctx = BLOCK_SUPERCONTEXT (ctx);
5273 fld_worklist_push (ctx, fld);
5275 /* Do not walk TYPE_CANONICAL. We do not stream it and thus do not
5276 and want not to reach unused types this way. */
5278 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
5280 unsigned i;
5281 tree tem;
5282 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
5283 fld_worklist_push (TREE_TYPE (tem), fld);
5284 tem = BINFO_VIRTUALS (TYPE_BINFO (t));
5285 if (tem
5286 /* The Java FE overloads BINFO_VIRTUALS for its own purpose. */
5287 && TREE_CODE (tem) == TREE_LIST)
5290 fld_worklist_push (TREE_VALUE (tem), fld);
5291 tem = TREE_CHAIN (tem);
5293 while (tem);
5295 if (RECORD_OR_UNION_TYPE_P (t))
5297 tree tem;
5298 /* Push all TYPE_FIELDS - there can be interleaving interesting
5299 and non-interesting things. */
5300 tem = TYPE_FIELDS (t);
5301 while (tem)
5303 if (TREE_CODE (tem) == FIELD_DECL
5304 || TREE_CODE (tem) == TYPE_DECL)
5305 fld_worklist_push (tem, fld);
5306 tem = TREE_CHAIN (tem);
5310 fld_worklist_push (TYPE_STUB_DECL (t), fld);
5311 *ws = 0;
5313 else if (TREE_CODE (t) == BLOCK)
5315 tree tem;
5316 for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem))
5317 fld_worklist_push (tem, fld);
5318 for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
5319 fld_worklist_push (tem, fld);
5320 fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
5323 if (TREE_CODE (t) != IDENTIFIER_NODE
5324 && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
5325 fld_worklist_push (TREE_TYPE (t), fld);
5327 return NULL_TREE;
5331 /* Find decls and types in T. */
5333 static void
5334 find_decls_types (tree t, struct free_lang_data_d *fld)
5336 while (1)
5338 if (!pointer_set_contains (fld->pset, t))
5339 walk_tree (&t, find_decls_types_r, fld, fld->pset);
5340 if (fld->worklist.is_empty ())
5341 break;
5342 t = fld->worklist.pop ();
5346 /* Translate all the types in LIST with the corresponding runtime
5347 types. */
5349 static tree
5350 get_eh_types_for_runtime (tree list)
5352 tree head, prev;
5354 if (list == NULL_TREE)
5355 return NULL_TREE;
5357 head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5358 prev = head;
5359 list = TREE_CHAIN (list);
5360 while (list)
5362 tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5363 TREE_CHAIN (prev) = n;
5364 prev = TREE_CHAIN (prev);
5365 list = TREE_CHAIN (list);
5368 return head;
5372 /* Find decls and types referenced in EH region R and store them in
5373 FLD->DECLS and FLD->TYPES. */
5375 static void
5376 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
5378 switch (r->type)
5380 case ERT_CLEANUP:
5381 break;
5383 case ERT_TRY:
5385 eh_catch c;
5387 /* The types referenced in each catch must first be changed to the
5388 EH types used at runtime. This removes references to FE types
5389 in the region. */
5390 for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
5392 c->type_list = get_eh_types_for_runtime (c->type_list);
5393 walk_tree (&c->type_list, find_decls_types_r, fld, fld->pset);
5396 break;
5398 case ERT_ALLOWED_EXCEPTIONS:
5399 r->u.allowed.type_list
5400 = get_eh_types_for_runtime (r->u.allowed.type_list);
5401 walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, fld->pset);
5402 break;
5404 case ERT_MUST_NOT_THROW:
5405 walk_tree (&r->u.must_not_throw.failure_decl,
5406 find_decls_types_r, fld, fld->pset);
5407 break;
5412 /* Find decls and types referenced in cgraph node N and store them in
5413 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5414 look for *every* kind of DECL and TYPE node reachable from N,
5415 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5416 NAMESPACE_DECLs, etc). */
5418 static void
5419 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
5421 basic_block bb;
5422 struct function *fn;
5423 unsigned ix;
5424 tree t;
5426 find_decls_types (n->symbol.decl, fld);
5428 if (!gimple_has_body_p (n->symbol.decl))
5429 return;
5431 gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
5433 fn = DECL_STRUCT_FUNCTION (n->symbol.decl);
5435 /* Traverse locals. */
5436 FOR_EACH_LOCAL_DECL (fn, ix, t)
5437 find_decls_types (t, fld);
5439 /* Traverse EH regions in FN. */
5441 eh_region r;
5442 FOR_ALL_EH_REGION_FN (r, fn)
5443 find_decls_types_in_eh_region (r, fld);
5446 /* Traverse every statement in FN. */
5447 FOR_EACH_BB_FN (bb, fn)
5449 gimple_stmt_iterator si;
5450 unsigned i;
5452 for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
5454 gimple phi = gsi_stmt (si);
5456 for (i = 0; i < gimple_phi_num_args (phi); i++)
5458 tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
5459 find_decls_types (*arg_p, fld);
5463 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
5465 gimple stmt = gsi_stmt (si);
5467 if (is_gimple_call (stmt))
5468 find_decls_types (gimple_call_fntype (stmt), fld);
5470 for (i = 0; i < gimple_num_ops (stmt); i++)
5472 tree arg = gimple_op (stmt, i);
5473 find_decls_types (arg, fld);
5480 /* Find decls and types referenced in varpool node N and store them in
5481 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5482 look for *every* kind of DECL and TYPE node reachable from N,
5483 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5484 NAMESPACE_DECLs, etc). */
5486 static void
5487 find_decls_types_in_var (struct varpool_node *v, struct free_lang_data_d *fld)
5489 find_decls_types (v->symbol.decl, fld);
5492 /* If T needs an assembler name, have one created for it. */
5494 void
5495 assign_assembler_name_if_neeeded (tree t)
5497 if (need_assembler_name_p (t))
5499 /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
5500 diagnostics that use input_location to show locus
5501 information. The problem here is that, at this point,
5502 input_location is generally anchored to the end of the file
5503 (since the parser is long gone), so we don't have a good
5504 position to pin it to.
5506 To alleviate this problem, this uses the location of T's
5507 declaration. Examples of this are
5508 testsuite/g++.dg/template/cond2.C and
5509 testsuite/g++.dg/template/pr35240.C. */
5510 location_t saved_location = input_location;
5511 input_location = DECL_SOURCE_LOCATION (t);
5513 decl_assembler_name (t);
5515 input_location = saved_location;
5520 /* Free language specific information for every operand and expression
5521 in every node of the call graph. This process operates in three stages:
5523 1- Every callgraph node and varpool node is traversed looking for
5524 decls and types embedded in them. This is a more exhaustive
5525 search than that done by find_referenced_vars, because it will
5526 also collect individual fields, decls embedded in types, etc.
5528 2- All the decls found are sent to free_lang_data_in_decl.
5530 3- All the types found are sent to free_lang_data_in_type.
5532 The ordering between decls and types is important because
5533 free_lang_data_in_decl sets assembler names, which includes
5534 mangling. So types cannot be freed up until assembler names have
5535 been set up. */
5537 static void
5538 free_lang_data_in_cgraph (void)
5540 struct cgraph_node *n;
5541 struct varpool_node *v;
5542 struct free_lang_data_d fld;
5543 tree t;
5544 unsigned i;
5545 alias_pair *p;
5547 /* Initialize sets and arrays to store referenced decls and types. */
5548 fld.pset = pointer_set_create ();
5549 fld.worklist.create (0);
5550 fld.decls.create (100);
5551 fld.types.create (100);
5553 /* Find decls and types in the body of every function in the callgraph. */
5554 FOR_EACH_FUNCTION (n)
5555 find_decls_types_in_node (n, &fld);
5557 FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
5558 find_decls_types (p->decl, &fld);
5560 /* Find decls and types in every varpool symbol. */
5561 FOR_EACH_VARIABLE (v)
5562 find_decls_types_in_var (v, &fld);
5564 /* Set the assembler name on every decl found. We need to do this
5565 now because free_lang_data_in_decl will invalidate data needed
5566 for mangling. This breaks mangling on interdependent decls. */
5567 FOR_EACH_VEC_ELT (fld.decls, i, t)
5568 assign_assembler_name_if_neeeded (t);
5570 /* Traverse every decl found freeing its language data. */
5571 FOR_EACH_VEC_ELT (fld.decls, i, t)
5572 free_lang_data_in_decl (t);
5574 /* Traverse every type found freeing its language data. */
5575 FOR_EACH_VEC_ELT (fld.types, i, t)
5576 free_lang_data_in_type (t);
5578 pointer_set_destroy (fld.pset);
5579 fld.worklist.release ();
5580 fld.decls.release ();
5581 fld.types.release ();
5585 /* Free resources that are used by FE but are not needed once they are done. */
5587 static unsigned
5588 free_lang_data (void)
5590 unsigned i;
5592 /* If we are the LTO frontend we have freed lang-specific data already. */
5593 if (in_lto_p
5594 || !flag_generate_lto)
5595 return 0;
5597 /* Allocate and assign alias sets to the standard integer types
5598 while the slots are still in the way the frontends generated them. */
5599 for (i = 0; i < itk_none; ++i)
5600 if (integer_types[i])
5601 TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
5603 /* Traverse the IL resetting language specific information for
5604 operands, expressions, etc. */
5605 free_lang_data_in_cgraph ();
5607 /* Create gimple variants for common types. */
5608 ptrdiff_type_node = integer_type_node;
5609 fileptr_type_node = ptr_type_node;
5611 /* Reset some langhooks. Do not reset types_compatible_p, it may
5612 still be used indirectly via the get_alias_set langhook. */
5613 lang_hooks.dwarf_name = lhd_dwarf_name;
5614 lang_hooks.decl_printable_name = gimple_decl_printable_name;
5615 /* We do not want the default decl_assembler_name implementation,
5616 rather if we have fixed everything we want a wrapper around it
5617 asserting that all non-local symbols already got their assembler
5618 name and only produce assembler names for local symbols. Or rather
5619 make sure we never call decl_assembler_name on local symbols and
5620 devise a separate, middle-end private scheme for it. */
5622 /* Reset diagnostic machinery. */
5623 tree_diagnostics_defaults (global_dc);
5625 return 0;
5629 namespace {
5631 const pass_data pass_data_ipa_free_lang_data =
5633 SIMPLE_IPA_PASS, /* type */
5634 "*free_lang_data", /* name */
5635 OPTGROUP_NONE, /* optinfo_flags */
5636 false, /* has_gate */
5637 true, /* has_execute */
5638 TV_IPA_FREE_LANG_DATA, /* tv_id */
5639 0, /* properties_required */
5640 0, /* properties_provided */
5641 0, /* properties_destroyed */
5642 0, /* todo_flags_start */
5643 0, /* todo_flags_finish */
5646 class pass_ipa_free_lang_data : public simple_ipa_opt_pass
5648 public:
5649 pass_ipa_free_lang_data (gcc::context *ctxt)
5650 : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt)
5653 /* opt_pass methods: */
5654 unsigned int execute () { return free_lang_data (); }
5656 }; // class pass_ipa_free_lang_data
5658 } // anon namespace
5660 simple_ipa_opt_pass *
5661 make_pass_ipa_free_lang_data (gcc::context *ctxt)
5663 return new pass_ipa_free_lang_data (ctxt);
5666 /* The backbone of is_attribute_p(). ATTR_LEN is the string length of
5667 ATTR_NAME. Also used internally by remove_attribute(). */
5668 bool
5669 private_is_attribute_p (const char *attr_name, size_t attr_len, const_tree ident)
5671 size_t ident_len = IDENTIFIER_LENGTH (ident);
5673 if (ident_len == attr_len)
5675 if (strcmp (attr_name, IDENTIFIER_POINTER (ident)) == 0)
5676 return true;
5678 else if (ident_len == attr_len + 4)
5680 /* There is the possibility that ATTR is 'text' and IDENT is
5681 '__text__'. */
5682 const char *p = IDENTIFIER_POINTER (ident);
5683 if (p[0] == '_' && p[1] == '_'
5684 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5685 && strncmp (attr_name, p + 2, attr_len) == 0)
5686 return true;
5689 return false;
5692 /* The backbone of lookup_attribute(). ATTR_LEN is the string length
5693 of ATTR_NAME, and LIST is not NULL_TREE. */
5694 tree
5695 private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
5697 while (list)
5699 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
5701 if (ident_len == attr_len)
5703 if (!strcmp (attr_name,
5704 IDENTIFIER_POINTER (get_attribute_name (list))))
5705 break;
5707 /* TODO: If we made sure that attributes were stored in the
5708 canonical form without '__...__' (ie, as in 'text' as opposed
5709 to '__text__') then we could avoid the following case. */
5710 else if (ident_len == attr_len + 4)
5712 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5713 if (p[0] == '_' && p[1] == '_'
5714 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5715 && strncmp (attr_name, p + 2, attr_len) == 0)
5716 break;
5718 list = TREE_CHAIN (list);
5721 return list;
5724 /* A variant of lookup_attribute() that can be used with an identifier
5725 as the first argument, and where the identifier can be either
5726 'text' or '__text__'.
5728 Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
5729 return a pointer to the attribute's list element if the attribute
5730 is part of the list, or NULL_TREE if not found. If the attribute
5731 appears more than once, this only returns the first occurrence; the
5732 TREE_CHAIN of the return value should be passed back in if further
5733 occurrences are wanted. ATTR_IDENTIFIER must be an identifier but
5734 can be in the form 'text' or '__text__'. */
5735 static tree
5736 lookup_ident_attribute (tree attr_identifier, tree list)
5738 gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
5740 while (list)
5742 gcc_checking_assert (TREE_CODE (get_attribute_name (list))
5743 == IDENTIFIER_NODE);
5745 /* Identifiers can be compared directly for equality. */
5746 if (attr_identifier == get_attribute_name (list))
5747 break;
5749 /* If they are not equal, they may still be one in the form
5750 'text' while the other one is in the form '__text__'. TODO:
5751 If we were storing attributes in normalized 'text' form, then
5752 this could all go away and we could take full advantage of
5753 the fact that we're comparing identifiers. :-) */
5755 size_t attr_len = IDENTIFIER_LENGTH (attr_identifier);
5756 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
5758 if (ident_len == attr_len + 4)
5760 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5761 const char *q = IDENTIFIER_POINTER (attr_identifier);
5762 if (p[0] == '_' && p[1] == '_'
5763 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5764 && strncmp (q, p + 2, attr_len) == 0)
5765 break;
5767 else if (ident_len + 4 == attr_len)
5769 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5770 const char *q = IDENTIFIER_POINTER (attr_identifier);
5771 if (q[0] == '_' && q[1] == '_'
5772 && q[attr_len - 2] == '_' && q[attr_len - 1] == '_'
5773 && strncmp (q + 2, p, ident_len) == 0)
5774 break;
5777 list = TREE_CHAIN (list);
5780 return list;
5783 /* Remove any instances of attribute ATTR_NAME in LIST and return the
5784 modified list. */
5786 tree
5787 remove_attribute (const char *attr_name, tree list)
5789 tree *p;
5790 size_t attr_len = strlen (attr_name);
5792 gcc_checking_assert (attr_name[0] != '_');
5794 for (p = &list; *p; )
5796 tree l = *p;
5797 /* TODO: If we were storing attributes in normalized form, here
5798 we could use a simple strcmp(). */
5799 if (private_is_attribute_p (attr_name, attr_len, get_attribute_name (l)))
5800 *p = TREE_CHAIN (l);
5801 else
5802 p = &TREE_CHAIN (l);
5805 return list;
5808 /* Return an attribute list that is the union of a1 and a2. */
5810 tree
5811 merge_attributes (tree a1, tree a2)
5813 tree attributes;
5815 /* Either one unset? Take the set one. */
5817 if ((attributes = a1) == 0)
5818 attributes = a2;
5820 /* One that completely contains the other? Take it. */
5822 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
5824 if (attribute_list_contained (a2, a1))
5825 attributes = a2;
5826 else
5828 /* Pick the longest list, and hang on the other list. */
5830 if (list_length (a1) < list_length (a2))
5831 attributes = a2, a2 = a1;
5833 for (; a2 != 0; a2 = TREE_CHAIN (a2))
5835 tree a;
5836 for (a = lookup_ident_attribute (get_attribute_name (a2),
5837 attributes);
5838 a != NULL_TREE && !attribute_value_equal (a, a2);
5839 a = lookup_ident_attribute (get_attribute_name (a2),
5840 TREE_CHAIN (a)))
5842 if (a == NULL_TREE)
5844 a1 = copy_node (a2);
5845 TREE_CHAIN (a1) = attributes;
5846 attributes = a1;
5851 return attributes;
5854 /* Given types T1 and T2, merge their attributes and return
5855 the result. */
5857 tree
5858 merge_type_attributes (tree t1, tree t2)
5860 return merge_attributes (TYPE_ATTRIBUTES (t1),
5861 TYPE_ATTRIBUTES (t2));
5864 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
5865 the result. */
5867 tree
5868 merge_decl_attributes (tree olddecl, tree newdecl)
5870 return merge_attributes (DECL_ATTRIBUTES (olddecl),
5871 DECL_ATTRIBUTES (newdecl));
5874 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
5876 /* Specialization of merge_decl_attributes for various Windows targets.
5878 This handles the following situation:
5880 __declspec (dllimport) int foo;
5881 int foo;
5883 The second instance of `foo' nullifies the dllimport. */
5885 tree
5886 merge_dllimport_decl_attributes (tree old, tree new_tree)
5888 tree a;
5889 int delete_dllimport_p = 1;
5891 /* What we need to do here is remove from `old' dllimport if it doesn't
5892 appear in `new'. dllimport behaves like extern: if a declaration is
5893 marked dllimport and a definition appears later, then the object
5894 is not dllimport'd. We also remove a `new' dllimport if the old list
5895 contains dllexport: dllexport always overrides dllimport, regardless
5896 of the order of declaration. */
5897 if (!VAR_OR_FUNCTION_DECL_P (new_tree))
5898 delete_dllimport_p = 0;
5899 else if (DECL_DLLIMPORT_P (new_tree)
5900 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
5902 DECL_DLLIMPORT_P (new_tree) = 0;
5903 warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
5904 "dllimport ignored", new_tree);
5906 else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
5908 /* Warn about overriding a symbol that has already been used, e.g.:
5909 extern int __attribute__ ((dllimport)) foo;
5910 int* bar () {return &foo;}
5911 int foo;
5913 if (TREE_USED (old))
5915 warning (0, "%q+D redeclared without dllimport attribute "
5916 "after being referenced with dll linkage", new_tree);
5917 /* If we have used a variable's address with dllimport linkage,
5918 keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
5919 decl may already have had TREE_CONSTANT computed.
5920 We still remove the attribute so that assembler code refers
5921 to '&foo rather than '_imp__foo'. */
5922 if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
5923 DECL_DLLIMPORT_P (new_tree) = 1;
5926 /* Let an inline definition silently override the external reference,
5927 but otherwise warn about attribute inconsistency. */
5928 else if (TREE_CODE (new_tree) == VAR_DECL
5929 || !DECL_DECLARED_INLINE_P (new_tree))
5930 warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
5931 "previous dllimport ignored", new_tree);
5933 else
5934 delete_dllimport_p = 0;
5936 a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
5938 if (delete_dllimport_p)
5939 a = remove_attribute ("dllimport", a);
5941 return a;
5944 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
5945 struct attribute_spec.handler. */
5947 tree
5948 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
5949 bool *no_add_attrs)
5951 tree node = *pnode;
5952 bool is_dllimport;
5954 /* These attributes may apply to structure and union types being created,
5955 but otherwise should pass to the declaration involved. */
5956 if (!DECL_P (node))
5958 if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
5959 | (int) ATTR_FLAG_ARRAY_NEXT))
5961 *no_add_attrs = true;
5962 return tree_cons (name, args, NULL_TREE);
5964 if (TREE_CODE (node) == RECORD_TYPE
5965 || TREE_CODE (node) == UNION_TYPE)
5967 node = TYPE_NAME (node);
5968 if (!node)
5969 return NULL_TREE;
5971 else
5973 warning (OPT_Wattributes, "%qE attribute ignored",
5974 name);
5975 *no_add_attrs = true;
5976 return NULL_TREE;
5980 if (TREE_CODE (node) != FUNCTION_DECL
5981 && TREE_CODE (node) != VAR_DECL
5982 && TREE_CODE (node) != TYPE_DECL)
5984 *no_add_attrs = true;
5985 warning (OPT_Wattributes, "%qE attribute ignored",
5986 name);
5987 return NULL_TREE;
5990 if (TREE_CODE (node) == TYPE_DECL
5991 && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
5992 && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
5994 *no_add_attrs = true;
5995 warning (OPT_Wattributes, "%qE attribute ignored",
5996 name);
5997 return NULL_TREE;
6000 is_dllimport = is_attribute_p ("dllimport", name);
6002 /* Report error on dllimport ambiguities seen now before they cause
6003 any damage. */
6004 if (is_dllimport)
6006 /* Honor any target-specific overrides. */
6007 if (!targetm.valid_dllimport_attribute_p (node))
6008 *no_add_attrs = true;
6010 else if (TREE_CODE (node) == FUNCTION_DECL
6011 && DECL_DECLARED_INLINE_P (node))
6013 warning (OPT_Wattributes, "inline function %q+D declared as "
6014 " dllimport: attribute ignored", node);
6015 *no_add_attrs = true;
6017 /* Like MS, treat definition of dllimported variables and
6018 non-inlined functions on declaration as syntax errors. */
6019 else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
6021 error ("function %q+D definition is marked dllimport", node);
6022 *no_add_attrs = true;
6025 else if (TREE_CODE (node) == VAR_DECL)
6027 if (DECL_INITIAL (node))
6029 error ("variable %q+D definition is marked dllimport",
6030 node);
6031 *no_add_attrs = true;
6034 /* `extern' needn't be specified with dllimport.
6035 Specify `extern' now and hope for the best. Sigh. */
6036 DECL_EXTERNAL (node) = 1;
6037 /* Also, implicitly give dllimport'd variables declared within
6038 a function global scope, unless declared static. */
6039 if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
6040 TREE_PUBLIC (node) = 1;
6043 if (*no_add_attrs == false)
6044 DECL_DLLIMPORT_P (node) = 1;
6046 else if (TREE_CODE (node) == FUNCTION_DECL
6047 && DECL_DECLARED_INLINE_P (node)
6048 && flag_keep_inline_dllexport)
6049 /* An exported function, even if inline, must be emitted. */
6050 DECL_EXTERNAL (node) = 0;
6052 /* Report error if symbol is not accessible at global scope. */
6053 if (!TREE_PUBLIC (node)
6054 && (TREE_CODE (node) == VAR_DECL
6055 || TREE_CODE (node) == FUNCTION_DECL))
6057 error ("external linkage required for symbol %q+D because of "
6058 "%qE attribute", node, name);
6059 *no_add_attrs = true;
6062 /* A dllexport'd entity must have default visibility so that other
6063 program units (shared libraries or the main executable) can see
6064 it. A dllimport'd entity must have default visibility so that
6065 the linker knows that undefined references within this program
6066 unit can be resolved by the dynamic linker. */
6067 if (!*no_add_attrs)
6069 if (DECL_VISIBILITY_SPECIFIED (node)
6070 && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
6071 error ("%qE implies default visibility, but %qD has already "
6072 "been declared with a different visibility",
6073 name, node);
6074 DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
6075 DECL_VISIBILITY_SPECIFIED (node) = 1;
6078 return NULL_TREE;
6081 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
6083 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
6084 of the various TYPE_QUAL values. */
6086 static void
6087 set_type_quals (tree type, int type_quals)
6089 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
6090 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
6091 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
6092 TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
6095 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS. */
6097 bool
6098 check_qualified_type (const_tree cand, const_tree base, int type_quals)
6100 return (TYPE_QUALS (cand) == type_quals
6101 && TYPE_NAME (cand) == TYPE_NAME (base)
6102 /* Apparently this is needed for Objective-C. */
6103 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6104 /* Check alignment. */
6105 && TYPE_ALIGN (cand) == TYPE_ALIGN (base)
6106 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6107 TYPE_ATTRIBUTES (base)));
6110 /* Returns true iff CAND is equivalent to BASE with ALIGN. */
6112 static bool
6113 check_aligned_type (const_tree cand, const_tree base, unsigned int align)
6115 return (TYPE_QUALS (cand) == TYPE_QUALS (base)
6116 && TYPE_NAME (cand) == TYPE_NAME (base)
6117 /* Apparently this is needed for Objective-C. */
6118 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6119 /* Check alignment. */
6120 && TYPE_ALIGN (cand) == align
6121 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6122 TYPE_ATTRIBUTES (base)));
6125 /* Return a version of the TYPE, qualified as indicated by the
6126 TYPE_QUALS, if one exists. If no qualified version exists yet,
6127 return NULL_TREE. */
6129 tree
6130 get_qualified_type (tree type, int type_quals)
6132 tree t;
6134 if (TYPE_QUALS (type) == type_quals)
6135 return type;
6137 /* Search the chain of variants to see if there is already one there just
6138 like the one we need to have. If so, use that existing one. We must
6139 preserve the TYPE_NAME, since there is code that depends on this. */
6140 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6141 if (check_qualified_type (t, type, type_quals))
6142 return t;
6144 return NULL_TREE;
6147 /* Like get_qualified_type, but creates the type if it does not
6148 exist. This function never returns NULL_TREE. */
6150 tree
6151 build_qualified_type (tree type, int type_quals)
6153 tree t;
6155 /* See if we already have the appropriate qualified variant. */
6156 t = get_qualified_type (type, type_quals);
6158 /* If not, build it. */
6159 if (!t)
6161 t = build_variant_type_copy (type);
6162 set_type_quals (t, type_quals);
6164 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6165 /* Propagate structural equality. */
6166 SET_TYPE_STRUCTURAL_EQUALITY (t);
6167 else if (TYPE_CANONICAL (type) != type)
6168 /* Build the underlying canonical type, since it is different
6169 from TYPE. */
6170 TYPE_CANONICAL (t) = build_qualified_type (TYPE_CANONICAL (type),
6171 type_quals);
6172 else
6173 /* T is its own canonical type. */
6174 TYPE_CANONICAL (t) = t;
6178 return t;
6181 /* Create a variant of type T with alignment ALIGN. */
6183 tree
6184 build_aligned_type (tree type, unsigned int align)
6186 tree t;
6188 if (TYPE_PACKED (type)
6189 || TYPE_ALIGN (type) == align)
6190 return type;
6192 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6193 if (check_aligned_type (t, type, align))
6194 return t;
6196 t = build_variant_type_copy (type);
6197 TYPE_ALIGN (t) = align;
6199 return t;
6202 /* Create a new distinct copy of TYPE. The new type is made its own
6203 MAIN_VARIANT. If TYPE requires structural equality checks, the
6204 resulting type requires structural equality checks; otherwise, its
6205 TYPE_CANONICAL points to itself. */
6207 tree
6208 build_distinct_type_copy (tree type)
6210 tree t = copy_node (type);
6212 TYPE_POINTER_TO (t) = 0;
6213 TYPE_REFERENCE_TO (t) = 0;
6215 /* Set the canonical type either to a new equivalence class, or
6216 propagate the need for structural equality checks. */
6217 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6218 SET_TYPE_STRUCTURAL_EQUALITY (t);
6219 else
6220 TYPE_CANONICAL (t) = t;
6222 /* Make it its own variant. */
6223 TYPE_MAIN_VARIANT (t) = t;
6224 TYPE_NEXT_VARIANT (t) = 0;
6226 /* Note that it is now possible for TYPE_MIN_VALUE to be a value
6227 whose TREE_TYPE is not t. This can also happen in the Ada
6228 frontend when using subtypes. */
6230 return t;
6233 /* Create a new variant of TYPE, equivalent but distinct. This is so
6234 the caller can modify it. TYPE_CANONICAL for the return type will
6235 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
6236 are considered equal by the language itself (or that both types
6237 require structural equality checks). */
6239 tree
6240 build_variant_type_copy (tree type)
6242 tree t, m = TYPE_MAIN_VARIANT (type);
6244 t = build_distinct_type_copy (type);
6246 /* Since we're building a variant, assume that it is a non-semantic
6247 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
6248 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
6250 /* Add the new type to the chain of variants of TYPE. */
6251 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
6252 TYPE_NEXT_VARIANT (m) = t;
6253 TYPE_MAIN_VARIANT (t) = m;
6255 return t;
6258 /* Return true if the from tree in both tree maps are equal. */
6261 tree_map_base_eq (const void *va, const void *vb)
6263 const struct tree_map_base *const a = (const struct tree_map_base *) va,
6264 *const b = (const struct tree_map_base *) vb;
6265 return (a->from == b->from);
6268 /* Hash a from tree in a tree_base_map. */
6270 unsigned int
6271 tree_map_base_hash (const void *item)
6273 return htab_hash_pointer (((const struct tree_map_base *)item)->from);
6276 /* Return true if this tree map structure is marked for garbage collection
6277 purposes. We simply return true if the from tree is marked, so that this
6278 structure goes away when the from tree goes away. */
6281 tree_map_base_marked_p (const void *p)
6283 return ggc_marked_p (((const struct tree_map_base *) p)->from);
6286 /* Hash a from tree in a tree_map. */
6288 unsigned int
6289 tree_map_hash (const void *item)
6291 return (((const struct tree_map *) item)->hash);
6294 /* Hash a from tree in a tree_decl_map. */
6296 unsigned int
6297 tree_decl_map_hash (const void *item)
6299 return DECL_UID (((const struct tree_decl_map *) item)->base.from);
6302 /* Return the initialization priority for DECL. */
6304 priority_type
6305 decl_init_priority_lookup (tree decl)
6307 struct tree_priority_map *h;
6308 struct tree_map_base in;
6310 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
6311 in.from = decl;
6312 h = (struct tree_priority_map *) htab_find (init_priority_for_decl, &in);
6313 return h ? h->init : DEFAULT_INIT_PRIORITY;
6316 /* Return the finalization priority for DECL. */
6318 priority_type
6319 decl_fini_priority_lookup (tree decl)
6321 struct tree_priority_map *h;
6322 struct tree_map_base in;
6324 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
6325 in.from = decl;
6326 h = (struct tree_priority_map *) htab_find (init_priority_for_decl, &in);
6327 return h ? h->fini : DEFAULT_INIT_PRIORITY;
6330 /* Return the initialization and finalization priority information for
6331 DECL. If there is no previous priority information, a freshly
6332 allocated structure is returned. */
6334 static struct tree_priority_map *
6335 decl_priority_info (tree decl)
6337 struct tree_priority_map in;
6338 struct tree_priority_map *h;
6339 void **loc;
6341 in.base.from = decl;
6342 loc = htab_find_slot (init_priority_for_decl, &in, INSERT);
6343 h = (struct tree_priority_map *) *loc;
6344 if (!h)
6346 h = ggc_alloc_cleared_tree_priority_map ();
6347 *loc = h;
6348 h->base.from = decl;
6349 h->init = DEFAULT_INIT_PRIORITY;
6350 h->fini = DEFAULT_INIT_PRIORITY;
6353 return h;
6356 /* Set the initialization priority for DECL to PRIORITY. */
6358 void
6359 decl_init_priority_insert (tree decl, priority_type priority)
6361 struct tree_priority_map *h;
6363 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
6364 if (priority == DEFAULT_INIT_PRIORITY)
6365 return;
6366 h = decl_priority_info (decl);
6367 h->init = priority;
6370 /* Set the finalization priority for DECL to PRIORITY. */
6372 void
6373 decl_fini_priority_insert (tree decl, priority_type priority)
6375 struct tree_priority_map *h;
6377 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
6378 if (priority == DEFAULT_INIT_PRIORITY)
6379 return;
6380 h = decl_priority_info (decl);
6381 h->fini = priority;
6384 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
6386 static void
6387 print_debug_expr_statistics (void)
6389 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n",
6390 (long) htab_size (debug_expr_for_decl),
6391 (long) htab_elements (debug_expr_for_decl),
6392 htab_collisions (debug_expr_for_decl));
6395 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
6397 static void
6398 print_value_expr_statistics (void)
6400 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n",
6401 (long) htab_size (value_expr_for_decl),
6402 (long) htab_elements (value_expr_for_decl),
6403 htab_collisions (value_expr_for_decl));
6406 /* Lookup a debug expression for FROM, and return it if we find one. */
6408 tree
6409 decl_debug_expr_lookup (tree from)
6411 struct tree_decl_map *h, in;
6412 in.base.from = from;
6414 h = (struct tree_decl_map *)
6415 htab_find_with_hash (debug_expr_for_decl, &in, DECL_UID (from));
6416 if (h)
6417 return h->to;
6418 return NULL_TREE;
6421 /* Insert a mapping FROM->TO in the debug expression hashtable. */
6423 void
6424 decl_debug_expr_insert (tree from, tree to)
6426 struct tree_decl_map *h;
6427 void **loc;
6429 h = ggc_alloc_tree_decl_map ();
6430 h->base.from = from;
6431 h->to = to;
6432 loc = htab_find_slot_with_hash (debug_expr_for_decl, h, DECL_UID (from),
6433 INSERT);
6434 *(struct tree_decl_map **) loc = h;
6437 /* Lookup a value expression for FROM, and return it if we find one. */
6439 tree
6440 decl_value_expr_lookup (tree from)
6442 struct tree_decl_map *h, in;
6443 in.base.from = from;
6445 h = (struct tree_decl_map *)
6446 htab_find_with_hash (value_expr_for_decl, &in, DECL_UID (from));
6447 if (h)
6448 return h->to;
6449 return NULL_TREE;
6452 /* Insert a mapping FROM->TO in the value expression hashtable. */
6454 void
6455 decl_value_expr_insert (tree from, tree to)
6457 struct tree_decl_map *h;
6458 void **loc;
6460 h = ggc_alloc_tree_decl_map ();
6461 h->base.from = from;
6462 h->to = to;
6463 loc = htab_find_slot_with_hash (value_expr_for_decl, h, DECL_UID (from),
6464 INSERT);
6465 *(struct tree_decl_map **) loc = h;
6468 /* Lookup a vector of debug arguments for FROM, and return it if we
6469 find one. */
6471 vec<tree, va_gc> **
6472 decl_debug_args_lookup (tree from)
6474 struct tree_vec_map *h, in;
6476 if (!DECL_HAS_DEBUG_ARGS_P (from))
6477 return NULL;
6478 gcc_checking_assert (debug_args_for_decl != NULL);
6479 in.base.from = from;
6480 h = (struct tree_vec_map *)
6481 htab_find_with_hash (debug_args_for_decl, &in, DECL_UID (from));
6482 if (h)
6483 return &h->to;
6484 return NULL;
6487 /* Insert a mapping FROM->empty vector of debug arguments in the value
6488 expression hashtable. */
6490 vec<tree, va_gc> **
6491 decl_debug_args_insert (tree from)
6493 struct tree_vec_map *h;
6494 void **loc;
6496 if (DECL_HAS_DEBUG_ARGS_P (from))
6497 return decl_debug_args_lookup (from);
6498 if (debug_args_for_decl == NULL)
6499 debug_args_for_decl = htab_create_ggc (64, tree_vec_map_hash,
6500 tree_vec_map_eq, 0);
6501 h = ggc_alloc_tree_vec_map ();
6502 h->base.from = from;
6503 h->to = NULL;
6504 loc = htab_find_slot_with_hash (debug_args_for_decl, h, DECL_UID (from),
6505 INSERT);
6506 *(struct tree_vec_map **) loc = h;
6507 DECL_HAS_DEBUG_ARGS_P (from) = 1;
6508 return &h->to;
6511 /* Hashing of types so that we don't make duplicates.
6512 The entry point is `type_hash_canon'. */
6514 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
6515 with types in the TREE_VALUE slots), by adding the hash codes
6516 of the individual types. */
6518 static unsigned int
6519 type_hash_list (const_tree list, hashval_t hashcode)
6521 const_tree tail;
6523 for (tail = list; tail; tail = TREE_CHAIN (tail))
6524 if (TREE_VALUE (tail) != error_mark_node)
6525 hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
6526 hashcode);
6528 return hashcode;
6531 /* These are the Hashtable callback functions. */
6533 /* Returns true iff the types are equivalent. */
6535 static int
6536 type_hash_eq (const void *va, const void *vb)
6538 const struct type_hash *const a = (const struct type_hash *) va,
6539 *const b = (const struct type_hash *) vb;
6541 /* First test the things that are the same for all types. */
6542 if (a->hash != b->hash
6543 || TREE_CODE (a->type) != TREE_CODE (b->type)
6544 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
6545 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
6546 TYPE_ATTRIBUTES (b->type))
6547 || (TREE_CODE (a->type) != COMPLEX_TYPE
6548 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
6549 return 0;
6551 /* Be careful about comparing arrays before and after the element type
6552 has been completed; don't compare TYPE_ALIGN unless both types are
6553 complete. */
6554 if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
6555 && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
6556 || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
6557 return 0;
6559 switch (TREE_CODE (a->type))
6561 case VOID_TYPE:
6562 case COMPLEX_TYPE:
6563 case POINTER_TYPE:
6564 case REFERENCE_TYPE:
6565 case NULLPTR_TYPE:
6566 return 1;
6568 case VECTOR_TYPE:
6569 return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
6571 case ENUMERAL_TYPE:
6572 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
6573 && !(TYPE_VALUES (a->type)
6574 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
6575 && TYPE_VALUES (b->type)
6576 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
6577 && type_list_equal (TYPE_VALUES (a->type),
6578 TYPE_VALUES (b->type))))
6579 return 0;
6581 /* ... fall through ... */
6583 case INTEGER_TYPE:
6584 case REAL_TYPE:
6585 case BOOLEAN_TYPE:
6586 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
6587 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
6588 TYPE_MAX_VALUE (b->type)))
6589 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
6590 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
6591 TYPE_MIN_VALUE (b->type))));
6593 case FIXED_POINT_TYPE:
6594 return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
6596 case OFFSET_TYPE:
6597 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
6599 case METHOD_TYPE:
6600 if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
6601 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
6602 || (TYPE_ARG_TYPES (a->type)
6603 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
6604 && TYPE_ARG_TYPES (b->type)
6605 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
6606 && type_list_equal (TYPE_ARG_TYPES (a->type),
6607 TYPE_ARG_TYPES (b->type)))))
6608 break;
6609 return 0;
6610 case ARRAY_TYPE:
6611 return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
6613 case RECORD_TYPE:
6614 case UNION_TYPE:
6615 case QUAL_UNION_TYPE:
6616 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
6617 || (TYPE_FIELDS (a->type)
6618 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
6619 && TYPE_FIELDS (b->type)
6620 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
6621 && type_list_equal (TYPE_FIELDS (a->type),
6622 TYPE_FIELDS (b->type))));
6624 case FUNCTION_TYPE:
6625 if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
6626 || (TYPE_ARG_TYPES (a->type)
6627 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
6628 && TYPE_ARG_TYPES (b->type)
6629 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
6630 && type_list_equal (TYPE_ARG_TYPES (a->type),
6631 TYPE_ARG_TYPES (b->type))))
6632 break;
6633 return 0;
6635 default:
6636 return 0;
6639 if (lang_hooks.types.type_hash_eq != NULL)
6640 return lang_hooks.types.type_hash_eq (a->type, b->type);
6642 return 1;
6645 /* Return the cached hash value. */
6647 static hashval_t
6648 type_hash_hash (const void *item)
6650 return ((const struct type_hash *) item)->hash;
6653 /* Look in the type hash table for a type isomorphic to TYPE.
6654 If one is found, return it. Otherwise return 0. */
6656 static tree
6657 type_hash_lookup (hashval_t hashcode, tree type)
6659 struct type_hash *h, in;
6661 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
6662 must call that routine before comparing TYPE_ALIGNs. */
6663 layout_type (type);
6665 in.hash = hashcode;
6666 in.type = type;
6668 h = (struct type_hash *) htab_find_with_hash (type_hash_table, &in,
6669 hashcode);
6670 if (h)
6671 return h->type;
6672 return NULL_TREE;
6675 /* Add an entry to the type-hash-table
6676 for a type TYPE whose hash code is HASHCODE. */
6678 static void
6679 type_hash_add (hashval_t hashcode, tree type)
6681 struct type_hash *h;
6682 void **loc;
6684 h = ggc_alloc_type_hash ();
6685 h->hash = hashcode;
6686 h->type = type;
6687 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
6688 *loc = (void *)h;
6691 /* Given TYPE, and HASHCODE its hash code, return the canonical
6692 object for an identical type if one already exists.
6693 Otherwise, return TYPE, and record it as the canonical object.
6695 To use this function, first create a type of the sort you want.
6696 Then compute its hash code from the fields of the type that
6697 make it different from other similar types.
6698 Then call this function and use the value. */
6700 tree
6701 type_hash_canon (unsigned int hashcode, tree type)
6703 tree t1;
6705 /* The hash table only contains main variants, so ensure that's what we're
6706 being passed. */
6707 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
6709 /* See if the type is in the hash table already. If so, return it.
6710 Otherwise, add the type. */
6711 t1 = type_hash_lookup (hashcode, type);
6712 if (t1 != 0)
6714 if (GATHER_STATISTICS)
6716 tree_code_counts[(int) TREE_CODE (type)]--;
6717 tree_node_counts[(int) t_kind]--;
6718 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type_non_common);
6720 return t1;
6722 else
6724 type_hash_add (hashcode, type);
6725 return type;
6729 /* See if the data pointed to by the type hash table is marked. We consider
6730 it marked if the type is marked or if a debug type number or symbol
6731 table entry has been made for the type. */
6733 static int
6734 type_hash_marked_p (const void *p)
6736 const_tree const type = ((const struct type_hash *) p)->type;
6738 return ggc_marked_p (type);
6741 static void
6742 print_type_hash_statistics (void)
6744 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
6745 (long) htab_size (type_hash_table),
6746 (long) htab_elements (type_hash_table),
6747 htab_collisions (type_hash_table));
6750 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
6751 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
6752 by adding the hash codes of the individual attributes. */
6754 static unsigned int
6755 attribute_hash_list (const_tree list, hashval_t hashcode)
6757 const_tree tail;
6759 for (tail = list; tail; tail = TREE_CHAIN (tail))
6760 /* ??? Do we want to add in TREE_VALUE too? */
6761 hashcode = iterative_hash_object
6762 (IDENTIFIER_HASH_VALUE (get_attribute_name (tail)), hashcode);
6763 return hashcode;
6766 /* Given two lists of attributes, return true if list l2 is
6767 equivalent to l1. */
6770 attribute_list_equal (const_tree l1, const_tree l2)
6772 if (l1 == l2)
6773 return 1;
6775 return attribute_list_contained (l1, l2)
6776 && attribute_list_contained (l2, l1);
6779 /* Given two lists of attributes, return true if list L2 is
6780 completely contained within L1. */
6781 /* ??? This would be faster if attribute names were stored in a canonicalized
6782 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
6783 must be used to show these elements are equivalent (which they are). */
6784 /* ??? It's not clear that attributes with arguments will always be handled
6785 correctly. */
6788 attribute_list_contained (const_tree l1, const_tree l2)
6790 const_tree t1, t2;
6792 /* First check the obvious, maybe the lists are identical. */
6793 if (l1 == l2)
6794 return 1;
6796 /* Maybe the lists are similar. */
6797 for (t1 = l1, t2 = l2;
6798 t1 != 0 && t2 != 0
6799 && get_attribute_name (t1) == get_attribute_name (t2)
6800 && TREE_VALUE (t1) == TREE_VALUE (t2);
6801 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
6804 /* Maybe the lists are equal. */
6805 if (t1 == 0 && t2 == 0)
6806 return 1;
6808 for (; t2 != 0; t2 = TREE_CHAIN (t2))
6810 const_tree attr;
6811 /* This CONST_CAST is okay because lookup_attribute does not
6812 modify its argument and the return value is assigned to a
6813 const_tree. */
6814 for (attr = lookup_ident_attribute (get_attribute_name (t2),
6815 CONST_CAST_TREE (l1));
6816 attr != NULL_TREE && !attribute_value_equal (t2, attr);
6817 attr = lookup_ident_attribute (get_attribute_name (t2),
6818 TREE_CHAIN (attr)))
6821 if (attr == NULL_TREE)
6822 return 0;
6825 return 1;
6828 /* Given two lists of types
6829 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
6830 return 1 if the lists contain the same types in the same order.
6831 Also, the TREE_PURPOSEs must match. */
6834 type_list_equal (const_tree l1, const_tree l2)
6836 const_tree t1, t2;
6838 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
6839 if (TREE_VALUE (t1) != TREE_VALUE (t2)
6840 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
6841 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
6842 && (TREE_TYPE (TREE_PURPOSE (t1))
6843 == TREE_TYPE (TREE_PURPOSE (t2))))))
6844 return 0;
6846 return t1 == t2;
6849 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
6850 given by TYPE. If the argument list accepts variable arguments,
6851 then this function counts only the ordinary arguments. */
6854 type_num_arguments (const_tree type)
6856 int i = 0;
6857 tree t;
6859 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
6860 /* If the function does not take a variable number of arguments,
6861 the last element in the list will have type `void'. */
6862 if (VOID_TYPE_P (TREE_VALUE (t)))
6863 break;
6864 else
6865 ++i;
6867 return i;
6870 /* Nonzero if integer constants T1 and T2
6871 represent the same constant value. */
6874 tree_int_cst_equal (const_tree t1, const_tree t2)
6876 if (t1 == t2)
6877 return 1;
6879 if (t1 == 0 || t2 == 0)
6880 return 0;
6882 if (TREE_CODE (t1) == INTEGER_CST
6883 && TREE_CODE (t2) == INTEGER_CST
6884 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
6885 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
6886 return 1;
6888 return 0;
6891 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
6892 The precise way of comparison depends on their data type. */
6895 tree_int_cst_lt (const_tree t1, const_tree t2)
6897 if (t1 == t2)
6898 return 0;
6900 if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
6902 int t1_sgn = tree_int_cst_sgn (t1);
6903 int t2_sgn = tree_int_cst_sgn (t2);
6905 if (t1_sgn < t2_sgn)
6906 return 1;
6907 else if (t1_sgn > t2_sgn)
6908 return 0;
6909 /* Otherwise, both are non-negative, so we compare them as
6910 unsigned just in case one of them would overflow a signed
6911 type. */
6913 else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
6914 return INT_CST_LT (t1, t2);
6916 return INT_CST_LT_UNSIGNED (t1, t2);
6919 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
6922 tree_int_cst_compare (const_tree t1, const_tree t2)
6924 if (tree_int_cst_lt (t1, t2))
6925 return -1;
6926 else if (tree_int_cst_lt (t2, t1))
6927 return 1;
6928 else
6929 return 0;
6932 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
6933 the host. If POS is zero, the value can be represented in a single
6934 HOST_WIDE_INT. If POS is nonzero, the value must be non-negative and can
6935 be represented in a single unsigned HOST_WIDE_INT. */
6938 host_integerp (const_tree t, int pos)
6940 if (t == NULL_TREE)
6941 return 0;
6943 return (TREE_CODE (t) == INTEGER_CST
6944 && ((TREE_INT_CST_HIGH (t) == 0
6945 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
6946 || (! pos && TREE_INT_CST_HIGH (t) == -1
6947 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
6948 && !TYPE_UNSIGNED (TREE_TYPE (t)))
6949 || (pos && TREE_INT_CST_HIGH (t) == 0)));
6952 /* Return the HOST_WIDE_INT least significant bits of T if it is an
6953 INTEGER_CST and there is no overflow. POS is nonzero if the result must
6954 be non-negative. We must be able to satisfy the above conditions. */
6956 HOST_WIDE_INT
6957 tree_low_cst (const_tree t, int pos)
6959 gcc_assert (host_integerp (t, pos));
6960 return TREE_INT_CST_LOW (t);
6963 /* Return the HOST_WIDE_INT least significant bits of T, a sizetype
6964 kind INTEGER_CST. This makes sure to properly sign-extend the
6965 constant. */
6967 HOST_WIDE_INT
6968 size_low_cst (const_tree t)
6970 double_int d = tree_to_double_int (t);
6971 return d.sext (TYPE_PRECISION (TREE_TYPE (t))).low;
6974 /* Return the most significant (sign) bit of T. */
6977 tree_int_cst_sign_bit (const_tree t)
6979 unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
6980 unsigned HOST_WIDE_INT w;
6982 if (bitno < HOST_BITS_PER_WIDE_INT)
6983 w = TREE_INT_CST_LOW (t);
6984 else
6986 w = TREE_INT_CST_HIGH (t);
6987 bitno -= HOST_BITS_PER_WIDE_INT;
6990 return (w >> bitno) & 1;
6993 /* Return an indication of the sign of the integer constant T.
6994 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
6995 Note that -1 will never be returned if T's type is unsigned. */
6998 tree_int_cst_sgn (const_tree t)
7000 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
7001 return 0;
7002 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
7003 return 1;
7004 else if (TREE_INT_CST_HIGH (t) < 0)
7005 return -1;
7006 else
7007 return 1;
7010 /* Return the minimum number of bits needed to represent VALUE in a
7011 signed or unsigned type, UNSIGNEDP says which. */
7013 unsigned int
7014 tree_int_cst_min_precision (tree value, bool unsignedp)
7016 /* If the value is negative, compute its negative minus 1. The latter
7017 adjustment is because the absolute value of the largest negative value
7018 is one larger than the largest positive value. This is equivalent to
7019 a bit-wise negation, so use that operation instead. */
7021 if (tree_int_cst_sgn (value) < 0)
7022 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
7024 /* Return the number of bits needed, taking into account the fact
7025 that we need one more bit for a signed than unsigned type.
7026 If value is 0 or -1, the minimum precision is 1 no matter
7027 whether unsignedp is true or false. */
7029 if (integer_zerop (value))
7030 return 1;
7031 else
7032 return tree_floor_log2 (value) + 1 + !unsignedp;
7035 /* Compare two constructor-element-type constants. Return 1 if the lists
7036 are known to be equal; otherwise return 0. */
7039 simple_cst_list_equal (const_tree l1, const_tree l2)
7041 while (l1 != NULL_TREE && l2 != NULL_TREE)
7043 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
7044 return 0;
7046 l1 = TREE_CHAIN (l1);
7047 l2 = TREE_CHAIN (l2);
7050 return l1 == l2;
7053 /* Return truthvalue of whether T1 is the same tree structure as T2.
7054 Return 1 if they are the same.
7055 Return 0 if they are understandably different.
7056 Return -1 if either contains tree structure not understood by
7057 this function. */
7060 simple_cst_equal (const_tree t1, const_tree t2)
7062 enum tree_code code1, code2;
7063 int cmp;
7064 int i;
7066 if (t1 == t2)
7067 return 1;
7068 if (t1 == 0 || t2 == 0)
7069 return 0;
7071 code1 = TREE_CODE (t1);
7072 code2 = TREE_CODE (t2);
7074 if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
7076 if (CONVERT_EXPR_CODE_P (code2)
7077 || code2 == NON_LVALUE_EXPR)
7078 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7079 else
7080 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
7083 else if (CONVERT_EXPR_CODE_P (code2)
7084 || code2 == NON_LVALUE_EXPR)
7085 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
7087 if (code1 != code2)
7088 return 0;
7090 switch (code1)
7092 case INTEGER_CST:
7093 return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
7094 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
7096 case REAL_CST:
7097 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
7099 case FIXED_CST:
7100 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
7102 case STRING_CST:
7103 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
7104 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
7105 TREE_STRING_LENGTH (t1)));
7107 case CONSTRUCTOR:
7109 unsigned HOST_WIDE_INT idx;
7110 vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
7111 vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
7113 if (vec_safe_length (v1) != vec_safe_length (v2))
7114 return false;
7116 for (idx = 0; idx < vec_safe_length (v1); ++idx)
7117 /* ??? Should we handle also fields here? */
7118 if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
7119 return false;
7120 return true;
7123 case SAVE_EXPR:
7124 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7126 case CALL_EXPR:
7127 cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
7128 if (cmp <= 0)
7129 return cmp;
7130 if (call_expr_nargs (t1) != call_expr_nargs (t2))
7131 return 0;
7133 const_tree arg1, arg2;
7134 const_call_expr_arg_iterator iter1, iter2;
7135 for (arg1 = first_const_call_expr_arg (t1, &iter1),
7136 arg2 = first_const_call_expr_arg (t2, &iter2);
7137 arg1 && arg2;
7138 arg1 = next_const_call_expr_arg (&iter1),
7139 arg2 = next_const_call_expr_arg (&iter2))
7141 cmp = simple_cst_equal (arg1, arg2);
7142 if (cmp <= 0)
7143 return cmp;
7145 return arg1 == arg2;
7148 case TARGET_EXPR:
7149 /* Special case: if either target is an unallocated VAR_DECL,
7150 it means that it's going to be unified with whatever the
7151 TARGET_EXPR is really supposed to initialize, so treat it
7152 as being equivalent to anything. */
7153 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
7154 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
7155 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
7156 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
7157 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
7158 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
7159 cmp = 1;
7160 else
7161 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7163 if (cmp <= 0)
7164 return cmp;
7166 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
7168 case WITH_CLEANUP_EXPR:
7169 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7170 if (cmp <= 0)
7171 return cmp;
7173 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
7175 case COMPONENT_REF:
7176 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
7177 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7179 return 0;
7181 case VAR_DECL:
7182 case PARM_DECL:
7183 case CONST_DECL:
7184 case FUNCTION_DECL:
7185 return 0;
7187 default:
7188 break;
7191 /* This general rule works for most tree codes. All exceptions should be
7192 handled above. If this is a language-specific tree code, we can't
7193 trust what might be in the operand, so say we don't know
7194 the situation. */
7195 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
7196 return -1;
7198 switch (TREE_CODE_CLASS (code1))
7200 case tcc_unary:
7201 case tcc_binary:
7202 case tcc_comparison:
7203 case tcc_expression:
7204 case tcc_reference:
7205 case tcc_statement:
7206 cmp = 1;
7207 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
7209 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
7210 if (cmp <= 0)
7211 return cmp;
7214 return cmp;
7216 default:
7217 return -1;
7221 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
7222 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
7223 than U, respectively. */
7226 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
7228 if (tree_int_cst_sgn (t) < 0)
7229 return -1;
7230 else if (TREE_INT_CST_HIGH (t) != 0)
7231 return 1;
7232 else if (TREE_INT_CST_LOW (t) == u)
7233 return 0;
7234 else if (TREE_INT_CST_LOW (t) < u)
7235 return -1;
7236 else
7237 return 1;
7240 /* Return true if SIZE represents a constant size that is in bounds of
7241 what the middle-end and the backend accepts (covering not more than
7242 half of the address-space). */
7244 bool
7245 valid_constant_size_p (const_tree size)
7247 if (! host_integerp (size, 1)
7248 || TREE_OVERFLOW (size)
7249 || tree_int_cst_sign_bit (size) != 0)
7250 return false;
7251 return true;
7254 /* Return the precision of the type, or for a complex or vector type the
7255 precision of the type of its elements. */
7257 unsigned int
7258 element_precision (const_tree type)
7260 enum tree_code code = TREE_CODE (type);
7261 if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
7262 type = TREE_TYPE (type);
7264 return TYPE_PRECISION (type);
7267 /* Return true if CODE represents an associative tree code. Otherwise
7268 return false. */
7269 bool
7270 associative_tree_code (enum tree_code code)
7272 switch (code)
7274 case BIT_IOR_EXPR:
7275 case BIT_AND_EXPR:
7276 case BIT_XOR_EXPR:
7277 case PLUS_EXPR:
7278 case MULT_EXPR:
7279 case MIN_EXPR:
7280 case MAX_EXPR:
7281 return true;
7283 default:
7284 break;
7286 return false;
7289 /* Return true if CODE represents a commutative tree code. Otherwise
7290 return false. */
7291 bool
7292 commutative_tree_code (enum tree_code code)
7294 switch (code)
7296 case PLUS_EXPR:
7297 case MULT_EXPR:
7298 case MULT_HIGHPART_EXPR:
7299 case MIN_EXPR:
7300 case MAX_EXPR:
7301 case BIT_IOR_EXPR:
7302 case BIT_XOR_EXPR:
7303 case BIT_AND_EXPR:
7304 case NE_EXPR:
7305 case EQ_EXPR:
7306 case UNORDERED_EXPR:
7307 case ORDERED_EXPR:
7308 case UNEQ_EXPR:
7309 case LTGT_EXPR:
7310 case TRUTH_AND_EXPR:
7311 case TRUTH_XOR_EXPR:
7312 case TRUTH_OR_EXPR:
7313 case WIDEN_MULT_EXPR:
7314 case VEC_WIDEN_MULT_HI_EXPR:
7315 case VEC_WIDEN_MULT_LO_EXPR:
7316 case VEC_WIDEN_MULT_EVEN_EXPR:
7317 case VEC_WIDEN_MULT_ODD_EXPR:
7318 return true;
7320 default:
7321 break;
7323 return false;
7326 /* Return true if CODE represents a ternary tree code for which the
7327 first two operands are commutative. Otherwise return false. */
7328 bool
7329 commutative_ternary_tree_code (enum tree_code code)
7331 switch (code)
7333 case WIDEN_MULT_PLUS_EXPR:
7334 case WIDEN_MULT_MINUS_EXPR:
7335 return true;
7337 default:
7338 break;
7340 return false;
7343 /* Generate a hash value for an expression. This can be used iteratively
7344 by passing a previous result as the VAL argument.
7346 This function is intended to produce the same hash for expressions which
7347 would compare equal using operand_equal_p. */
7349 hashval_t
7350 iterative_hash_expr (const_tree t, hashval_t val)
7352 int i;
7353 enum tree_code code;
7354 char tclass;
7356 if (t == NULL_TREE)
7357 return iterative_hash_hashval_t (0, val);
7359 code = TREE_CODE (t);
7361 switch (code)
7363 /* Alas, constants aren't shared, so we can't rely on pointer
7364 identity. */
7365 case INTEGER_CST:
7366 val = iterative_hash_host_wide_int (TREE_INT_CST_LOW (t), val);
7367 return iterative_hash_host_wide_int (TREE_INT_CST_HIGH (t), val);
7368 case REAL_CST:
7370 unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
7372 return iterative_hash_hashval_t (val2, val);
7374 case FIXED_CST:
7376 unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
7378 return iterative_hash_hashval_t (val2, val);
7380 case STRING_CST:
7381 return iterative_hash (TREE_STRING_POINTER (t),
7382 TREE_STRING_LENGTH (t), val);
7383 case COMPLEX_CST:
7384 val = iterative_hash_expr (TREE_REALPART (t), val);
7385 return iterative_hash_expr (TREE_IMAGPART (t), val);
7386 case VECTOR_CST:
7388 unsigned i;
7389 for (i = 0; i < VECTOR_CST_NELTS (t); ++i)
7390 val = iterative_hash_expr (VECTOR_CST_ELT (t, i), val);
7391 return val;
7393 case SSA_NAME:
7394 /* We can just compare by pointer. */
7395 return iterative_hash_host_wide_int (SSA_NAME_VERSION (t), val);
7396 case PLACEHOLDER_EXPR:
7397 /* The node itself doesn't matter. */
7398 return val;
7399 case TREE_LIST:
7400 /* A list of expressions, for a CALL_EXPR or as the elements of a
7401 VECTOR_CST. */
7402 for (; t; t = TREE_CHAIN (t))
7403 val = iterative_hash_expr (TREE_VALUE (t), val);
7404 return val;
7405 case CONSTRUCTOR:
7407 unsigned HOST_WIDE_INT idx;
7408 tree field, value;
7409 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
7411 val = iterative_hash_expr (field, val);
7412 val = iterative_hash_expr (value, val);
7414 return val;
7416 case FUNCTION_DECL:
7417 /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
7418 Otherwise nodes that compare equal according to operand_equal_p might
7419 get different hash codes. However, don't do this for machine specific
7420 or front end builtins, since the function code is overloaded in those
7421 cases. */
7422 if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
7423 && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t)))
7425 t = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
7426 code = TREE_CODE (t);
7428 /* FALL THROUGH */
7429 default:
7430 tclass = TREE_CODE_CLASS (code);
7432 if (tclass == tcc_declaration)
7434 /* DECL's have a unique ID */
7435 val = iterative_hash_host_wide_int (DECL_UID (t), val);
7437 else
7439 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
7441 val = iterative_hash_object (code, val);
7443 /* Don't hash the type, that can lead to having nodes which
7444 compare equal according to operand_equal_p, but which
7445 have different hash codes. */
7446 if (CONVERT_EXPR_CODE_P (code)
7447 || code == NON_LVALUE_EXPR)
7449 /* Make sure to include signness in the hash computation. */
7450 val += TYPE_UNSIGNED (TREE_TYPE (t));
7451 val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
7454 else if (commutative_tree_code (code))
7456 /* It's a commutative expression. We want to hash it the same
7457 however it appears. We do this by first hashing both operands
7458 and then rehashing based on the order of their independent
7459 hashes. */
7460 hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
7461 hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
7462 hashval_t t;
7464 if (one > two)
7465 t = one, one = two, two = t;
7467 val = iterative_hash_hashval_t (one, val);
7468 val = iterative_hash_hashval_t (two, val);
7470 else
7471 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
7472 val = iterative_hash_expr (TREE_OPERAND (t, i), val);
7474 return val;
7478 /* Generate a hash value for a pair of expressions. This can be used
7479 iteratively by passing a previous result as the VAL argument.
7481 The same hash value is always returned for a given pair of expressions,
7482 regardless of the order in which they are presented. This is useful in
7483 hashing the operands of commutative functions. */
7485 hashval_t
7486 iterative_hash_exprs_commutative (const_tree t1,
7487 const_tree t2, hashval_t val)
7489 hashval_t one = iterative_hash_expr (t1, 0);
7490 hashval_t two = iterative_hash_expr (t2, 0);
7491 hashval_t t;
7493 if (one > two)
7494 t = one, one = two, two = t;
7495 val = iterative_hash_hashval_t (one, val);
7496 val = iterative_hash_hashval_t (two, val);
7498 return val;
7501 /* Constructors for pointer, array and function types.
7502 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
7503 constructed by language-dependent code, not here.) */
7505 /* Construct, lay out and return the type of pointers to TO_TYPE with
7506 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
7507 reference all of memory. If such a type has already been
7508 constructed, reuse it. */
7510 tree
7511 build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
7512 bool can_alias_all)
7514 tree t;
7516 if (to_type == error_mark_node)
7517 return error_mark_node;
7519 /* If the pointed-to type has the may_alias attribute set, force
7520 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7521 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7522 can_alias_all = true;
7524 /* In some cases, languages will have things that aren't a POINTER_TYPE
7525 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
7526 In that case, return that type without regard to the rest of our
7527 operands.
7529 ??? This is a kludge, but consistent with the way this function has
7530 always operated and there doesn't seem to be a good way to avoid this
7531 at the moment. */
7532 if (TYPE_POINTER_TO (to_type) != 0
7533 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
7534 return TYPE_POINTER_TO (to_type);
7536 /* First, if we already have a type for pointers to TO_TYPE and it's
7537 the proper mode, use it. */
7538 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
7539 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7540 return t;
7542 t = make_node (POINTER_TYPE);
7544 TREE_TYPE (t) = to_type;
7545 SET_TYPE_MODE (t, mode);
7546 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7547 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
7548 TYPE_POINTER_TO (to_type) = t;
7550 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
7551 SET_TYPE_STRUCTURAL_EQUALITY (t);
7552 else if (TYPE_CANONICAL (to_type) != to_type)
7553 TYPE_CANONICAL (t)
7554 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
7555 mode, can_alias_all);
7557 /* Lay out the type. This function has many callers that are concerned
7558 with expression-construction, and this simplifies them all. */
7559 layout_type (t);
7561 return t;
7564 /* By default build pointers in ptr_mode. */
7566 tree
7567 build_pointer_type (tree to_type)
7569 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7570 : TYPE_ADDR_SPACE (to_type);
7571 enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7572 return build_pointer_type_for_mode (to_type, pointer_mode, false);
7575 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
7577 tree
7578 build_reference_type_for_mode (tree to_type, enum machine_mode mode,
7579 bool can_alias_all)
7581 tree t;
7583 if (to_type == error_mark_node)
7584 return error_mark_node;
7586 /* If the pointed-to type has the may_alias attribute set, force
7587 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7588 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7589 can_alias_all = true;
7591 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
7592 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
7593 In that case, return that type without regard to the rest of our
7594 operands.
7596 ??? This is a kludge, but consistent with the way this function has
7597 always operated and there doesn't seem to be a good way to avoid this
7598 at the moment. */
7599 if (TYPE_REFERENCE_TO (to_type) != 0
7600 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
7601 return TYPE_REFERENCE_TO (to_type);
7603 /* First, if we already have a type for pointers to TO_TYPE and it's
7604 the proper mode, use it. */
7605 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
7606 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7607 return t;
7609 t = make_node (REFERENCE_TYPE);
7611 TREE_TYPE (t) = to_type;
7612 SET_TYPE_MODE (t, mode);
7613 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7614 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
7615 TYPE_REFERENCE_TO (to_type) = t;
7617 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
7618 SET_TYPE_STRUCTURAL_EQUALITY (t);
7619 else if (TYPE_CANONICAL (to_type) != to_type)
7620 TYPE_CANONICAL (t)
7621 = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
7622 mode, can_alias_all);
7624 layout_type (t);
7626 return t;
7630 /* Build the node for the type of references-to-TO_TYPE by default
7631 in ptr_mode. */
7633 tree
7634 build_reference_type (tree to_type)
7636 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7637 : TYPE_ADDR_SPACE (to_type);
7638 enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7639 return build_reference_type_for_mode (to_type, pointer_mode, false);
7642 /* Build a type that is compatible with t but has no cv quals anywhere
7643 in its type, thus
7645 const char *const *const * -> char ***. */
7647 tree
7648 build_type_no_quals (tree t)
7650 switch (TREE_CODE (t))
7652 case POINTER_TYPE:
7653 return build_pointer_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
7654 TYPE_MODE (t),
7655 TYPE_REF_CAN_ALIAS_ALL (t));
7656 case REFERENCE_TYPE:
7657 return
7658 build_reference_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
7659 TYPE_MODE (t),
7660 TYPE_REF_CAN_ALIAS_ALL (t));
7661 default:
7662 return TYPE_MAIN_VARIANT (t);
7666 #define MAX_INT_CACHED_PREC \
7667 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
7668 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
7670 /* Builds a signed or unsigned integer type of precision PRECISION.
7671 Used for C bitfields whose precision does not match that of
7672 built-in target types. */
7673 tree
7674 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
7675 int unsignedp)
7677 tree itype, ret;
7679 if (unsignedp)
7680 unsignedp = MAX_INT_CACHED_PREC + 1;
7682 if (precision <= MAX_INT_CACHED_PREC)
7684 itype = nonstandard_integer_type_cache[precision + unsignedp];
7685 if (itype)
7686 return itype;
7689 itype = make_node (INTEGER_TYPE);
7690 TYPE_PRECISION (itype) = precision;
7692 if (unsignedp)
7693 fixup_unsigned_type (itype);
7694 else
7695 fixup_signed_type (itype);
7697 ret = itype;
7698 if (host_integerp (TYPE_MAX_VALUE (itype), 1))
7699 ret = type_hash_canon (tree_low_cst (TYPE_MAX_VALUE (itype), 1), itype);
7700 if (precision <= MAX_INT_CACHED_PREC)
7701 nonstandard_integer_type_cache[precision + unsignedp] = ret;
7703 return ret;
7706 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
7707 or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL. If SHARED
7708 is true, reuse such a type that has already been constructed. */
7710 static tree
7711 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
7713 tree itype = make_node (INTEGER_TYPE);
7714 hashval_t hashcode = 0;
7716 TREE_TYPE (itype) = type;
7718 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
7719 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
7721 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
7722 SET_TYPE_MODE (itype, TYPE_MODE (type));
7723 TYPE_SIZE (itype) = TYPE_SIZE (type);
7724 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
7725 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
7726 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
7728 if (!shared)
7729 return itype;
7731 if ((TYPE_MIN_VALUE (itype)
7732 && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
7733 || (TYPE_MAX_VALUE (itype)
7734 && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
7736 /* Since we cannot reliably merge this type, we need to compare it using
7737 structural equality checks. */
7738 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7739 return itype;
7742 hashcode = iterative_hash_expr (TYPE_MIN_VALUE (itype), hashcode);
7743 hashcode = iterative_hash_expr (TYPE_MAX_VALUE (itype), hashcode);
7744 hashcode = iterative_hash_hashval_t (TYPE_HASH (type), hashcode);
7745 itype = type_hash_canon (hashcode, itype);
7747 return itype;
7750 /* Wrapper around build_range_type_1 with SHARED set to true. */
7752 tree
7753 build_range_type (tree type, tree lowval, tree highval)
7755 return build_range_type_1 (type, lowval, highval, true);
7758 /* Wrapper around build_range_type_1 with SHARED set to false. */
7760 tree
7761 build_nonshared_range_type (tree type, tree lowval, tree highval)
7763 return build_range_type_1 (type, lowval, highval, false);
7766 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
7767 MAXVAL should be the maximum value in the domain
7768 (one less than the length of the array).
7770 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
7771 We don't enforce this limit, that is up to caller (e.g. language front end).
7772 The limit exists because the result is a signed type and we don't handle
7773 sizes that use more than one HOST_WIDE_INT. */
7775 tree
7776 build_index_type (tree maxval)
7778 return build_range_type (sizetype, size_zero_node, maxval);
7781 /* Return true if the debug information for TYPE, a subtype, should be emitted
7782 as a subrange type. If so, set LOWVAL to the low bound and HIGHVAL to the
7783 high bound, respectively. Sometimes doing so unnecessarily obfuscates the
7784 debug info and doesn't reflect the source code. */
7786 bool
7787 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
7789 tree base_type = TREE_TYPE (type), low, high;
7791 /* Subrange types have a base type which is an integral type. */
7792 if (!INTEGRAL_TYPE_P (base_type))
7793 return false;
7795 /* Get the real bounds of the subtype. */
7796 if (lang_hooks.types.get_subrange_bounds)
7797 lang_hooks.types.get_subrange_bounds (type, &low, &high);
7798 else
7800 low = TYPE_MIN_VALUE (type);
7801 high = TYPE_MAX_VALUE (type);
7804 /* If the type and its base type have the same representation and the same
7805 name, then the type is not a subrange but a copy of the base type. */
7806 if ((TREE_CODE (base_type) == INTEGER_TYPE
7807 || TREE_CODE (base_type) == BOOLEAN_TYPE)
7808 && int_size_in_bytes (type) == int_size_in_bytes (base_type)
7809 && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
7810 && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type)))
7812 tree type_name = TYPE_NAME (type);
7813 tree base_type_name = TYPE_NAME (base_type);
7815 if (type_name && TREE_CODE (type_name) == TYPE_DECL)
7816 type_name = DECL_NAME (type_name);
7818 if (base_type_name && TREE_CODE (base_type_name) == TYPE_DECL)
7819 base_type_name = DECL_NAME (base_type_name);
7821 if (type_name == base_type_name)
7822 return false;
7825 if (lowval)
7826 *lowval = low;
7827 if (highval)
7828 *highval = high;
7829 return true;
7832 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
7833 and number of elements specified by the range of values of INDEX_TYPE.
7834 If SHARED is true, reuse such a type that has already been constructed. */
7836 static tree
7837 build_array_type_1 (tree elt_type, tree index_type, bool shared)
7839 tree t;
7841 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
7843 error ("arrays of functions are not meaningful");
7844 elt_type = integer_type_node;
7847 t = make_node (ARRAY_TYPE);
7848 TREE_TYPE (t) = elt_type;
7849 TYPE_DOMAIN (t) = index_type;
7850 TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
7851 layout_type (t);
7853 /* If the element type is incomplete at this point we get marked for
7854 structural equality. Do not record these types in the canonical
7855 type hashtable. */
7856 if (TYPE_STRUCTURAL_EQUALITY_P (t))
7857 return t;
7859 if (shared)
7861 hashval_t hashcode = iterative_hash_object (TYPE_HASH (elt_type), 0);
7862 if (index_type)
7863 hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
7864 t = type_hash_canon (hashcode, t);
7867 if (TYPE_CANONICAL (t) == t)
7869 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
7870 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
7871 SET_TYPE_STRUCTURAL_EQUALITY (t);
7872 else if (TYPE_CANONICAL (elt_type) != elt_type
7873 || (index_type && TYPE_CANONICAL (index_type) != index_type))
7874 TYPE_CANONICAL (t)
7875 = build_array_type_1 (TYPE_CANONICAL (elt_type),
7876 index_type
7877 ? TYPE_CANONICAL (index_type) : NULL_TREE,
7878 shared);
7881 return t;
7884 /* Wrapper around build_array_type_1 with SHARED set to true. */
7886 tree
7887 build_array_type (tree elt_type, tree index_type)
7889 return build_array_type_1 (elt_type, index_type, true);
7892 /* Wrapper around build_array_type_1 with SHARED set to false. */
7894 tree
7895 build_nonshared_array_type (tree elt_type, tree index_type)
7897 return build_array_type_1 (elt_type, index_type, false);
7900 /* Return a representation of ELT_TYPE[NELTS], using indices of type
7901 sizetype. */
7903 tree
7904 build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
7906 return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
7909 /* Recursively examines the array elements of TYPE, until a non-array
7910 element type is found. */
7912 tree
7913 strip_array_types (tree type)
7915 while (TREE_CODE (type) == ARRAY_TYPE)
7916 type = TREE_TYPE (type);
7918 return type;
7921 /* Computes the canonical argument types from the argument type list
7922 ARGTYPES.
7924 Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
7925 on entry to this function, or if any of the ARGTYPES are
7926 structural.
7928 Upon return, *ANY_NONCANONICAL_P will be true iff either it was
7929 true on entry to this function, or if any of the ARGTYPES are
7930 non-canonical.
7932 Returns a canonical argument list, which may be ARGTYPES when the
7933 canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
7934 true) or would not differ from ARGTYPES. */
7936 static tree
7937 maybe_canonicalize_argtypes (tree argtypes,
7938 bool *any_structural_p,
7939 bool *any_noncanonical_p)
7941 tree arg;
7942 bool any_noncanonical_argtypes_p = false;
7944 for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
7946 if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
7947 /* Fail gracefully by stating that the type is structural. */
7948 *any_structural_p = true;
7949 else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
7950 *any_structural_p = true;
7951 else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
7952 || TREE_PURPOSE (arg))
7953 /* If the argument has a default argument, we consider it
7954 non-canonical even though the type itself is canonical.
7955 That way, different variants of function and method types
7956 with default arguments will all point to the variant with
7957 no defaults as their canonical type. */
7958 any_noncanonical_argtypes_p = true;
7961 if (*any_structural_p)
7962 return argtypes;
7964 if (any_noncanonical_argtypes_p)
7966 /* Build the canonical list of argument types. */
7967 tree canon_argtypes = NULL_TREE;
7968 bool is_void = false;
7970 for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
7972 if (arg == void_list_node)
7973 is_void = true;
7974 else
7975 canon_argtypes = tree_cons (NULL_TREE,
7976 TYPE_CANONICAL (TREE_VALUE (arg)),
7977 canon_argtypes);
7980 canon_argtypes = nreverse (canon_argtypes);
7981 if (is_void)
7982 canon_argtypes = chainon (canon_argtypes, void_list_node);
7984 /* There is a non-canonical type. */
7985 *any_noncanonical_p = true;
7986 return canon_argtypes;
7989 /* The canonical argument types are the same as ARGTYPES. */
7990 return argtypes;
7993 /* Construct, lay out and return
7994 the type of functions returning type VALUE_TYPE
7995 given arguments of types ARG_TYPES.
7996 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
7997 are data type nodes for the arguments of the function.
7998 If such a type has already been constructed, reuse it. */
8000 tree
8001 build_function_type (tree value_type, tree arg_types)
8003 tree t;
8004 hashval_t hashcode = 0;
8005 bool any_structural_p, any_noncanonical_p;
8006 tree canon_argtypes;
8008 if (TREE_CODE (value_type) == FUNCTION_TYPE)
8010 error ("function return type cannot be function");
8011 value_type = integer_type_node;
8014 /* Make a node of the sort we want. */
8015 t = make_node (FUNCTION_TYPE);
8016 TREE_TYPE (t) = value_type;
8017 TYPE_ARG_TYPES (t) = arg_types;
8019 /* If we already have such a type, use the old one. */
8020 hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
8021 hashcode = type_hash_list (arg_types, hashcode);
8022 t = type_hash_canon (hashcode, t);
8024 /* Set up the canonical type. */
8025 any_structural_p = TYPE_STRUCTURAL_EQUALITY_P (value_type);
8026 any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
8027 canon_argtypes = maybe_canonicalize_argtypes (arg_types,
8028 &any_structural_p,
8029 &any_noncanonical_p);
8030 if (any_structural_p)
8031 SET_TYPE_STRUCTURAL_EQUALITY (t);
8032 else if (any_noncanonical_p)
8033 TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
8034 canon_argtypes);
8036 if (!COMPLETE_TYPE_P (t))
8037 layout_type (t);
8038 return t;
8041 /* Build variant of function type ORIG_TYPE skipping ARGS_TO_SKIP and the
8042 return value if SKIP_RETURN is true. */
8044 static tree
8045 build_function_type_skip_args (tree orig_type, bitmap args_to_skip,
8046 bool skip_return)
8048 tree new_type = NULL;
8049 tree args, new_args = NULL, t;
8050 tree new_reversed;
8051 int i = 0;
8053 for (args = TYPE_ARG_TYPES (orig_type); args && args != void_list_node;
8054 args = TREE_CHAIN (args), i++)
8055 if (!args_to_skip || !bitmap_bit_p (args_to_skip, i))
8056 new_args = tree_cons (NULL_TREE, TREE_VALUE (args), new_args);
8058 new_reversed = nreverse (new_args);
8059 if (args)
8061 if (new_reversed)
8062 TREE_CHAIN (new_args) = void_list_node;
8063 else
8064 new_reversed = void_list_node;
8067 /* Use copy_node to preserve as much as possible from original type
8068 (debug info, attribute lists etc.)
8069 Exception is METHOD_TYPEs must have THIS argument.
8070 When we are asked to remove it, we need to build new FUNCTION_TYPE
8071 instead. */
8072 if (TREE_CODE (orig_type) != METHOD_TYPE
8073 || !args_to_skip
8074 || !bitmap_bit_p (args_to_skip, 0))
8076 new_type = build_distinct_type_copy (orig_type);
8077 TYPE_ARG_TYPES (new_type) = new_reversed;
8079 else
8081 new_type
8082 = build_distinct_type_copy (build_function_type (TREE_TYPE (orig_type),
8083 new_reversed));
8084 TYPE_CONTEXT (new_type) = TYPE_CONTEXT (orig_type);
8087 if (skip_return)
8088 TREE_TYPE (new_type) = void_type_node;
8090 /* This is a new type, not a copy of an old type. Need to reassociate
8091 variants. We can handle everything except the main variant lazily. */
8092 t = TYPE_MAIN_VARIANT (orig_type);
8093 if (t != orig_type)
8095 t = build_function_type_skip_args (t, args_to_skip, skip_return);
8096 TYPE_MAIN_VARIANT (new_type) = t;
8097 TYPE_NEXT_VARIANT (new_type) = TYPE_NEXT_VARIANT (t);
8098 TYPE_NEXT_VARIANT (t) = new_type;
8100 else
8102 TYPE_MAIN_VARIANT (new_type) = new_type;
8103 TYPE_NEXT_VARIANT (new_type) = NULL;
8106 return new_type;
8109 /* Build variant of function decl ORIG_DECL skipping ARGS_TO_SKIP and the
8110 return value if SKIP_RETURN is true.
8112 Arguments from DECL_ARGUMENTS list can't be removed now, since they are
8113 linked by TREE_CHAIN directly. The caller is responsible for eliminating
8114 them when they are being duplicated (i.e. copy_arguments_for_versioning). */
8116 tree
8117 build_function_decl_skip_args (tree orig_decl, bitmap args_to_skip,
8118 bool skip_return)
8120 tree new_decl = copy_node (orig_decl);
8121 tree new_type;
8123 new_type = TREE_TYPE (orig_decl);
8124 if (prototype_p (new_type)
8125 || (skip_return && !VOID_TYPE_P (TREE_TYPE (new_type))))
8126 new_type
8127 = build_function_type_skip_args (new_type, args_to_skip, skip_return);
8128 TREE_TYPE (new_decl) = new_type;
8130 /* For declarations setting DECL_VINDEX (i.e. methods)
8131 we expect first argument to be THIS pointer. */
8132 if (args_to_skip && bitmap_bit_p (args_to_skip, 0))
8133 DECL_VINDEX (new_decl) = NULL_TREE;
8135 /* When signature changes, we need to clear builtin info. */
8136 if (DECL_BUILT_IN (new_decl)
8137 && args_to_skip
8138 && !bitmap_empty_p (args_to_skip))
8140 DECL_BUILT_IN_CLASS (new_decl) = NOT_BUILT_IN;
8141 DECL_FUNCTION_CODE (new_decl) = (enum built_in_function) 0;
8143 return new_decl;
8146 /* Build a function type. The RETURN_TYPE is the type returned by the
8147 function. If VAARGS is set, no void_type_node is appended to the
8148 the list. ARGP must be always be terminated be a NULL_TREE. */
8150 static tree
8151 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
8153 tree t, args, last;
8155 t = va_arg (argp, tree);
8156 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
8157 args = tree_cons (NULL_TREE, t, args);
8159 if (vaargs)
8161 last = args;
8162 if (args != NULL_TREE)
8163 args = nreverse (args);
8164 gcc_assert (last != void_list_node);
8166 else if (args == NULL_TREE)
8167 args = void_list_node;
8168 else
8170 last = args;
8171 args = nreverse (args);
8172 TREE_CHAIN (last) = void_list_node;
8174 args = build_function_type (return_type, args);
8176 return args;
8179 /* Build a function type. The RETURN_TYPE is the type returned by the
8180 function. If additional arguments are provided, they are
8181 additional argument types. The list of argument types must always
8182 be terminated by NULL_TREE. */
8184 tree
8185 build_function_type_list (tree return_type, ...)
8187 tree args;
8188 va_list p;
8190 va_start (p, return_type);
8191 args = build_function_type_list_1 (false, return_type, p);
8192 va_end (p);
8193 return args;
8196 /* Build a variable argument function type. The RETURN_TYPE is the
8197 type returned by the function. If additional arguments are provided,
8198 they are additional argument types. The list of argument types must
8199 always be terminated by NULL_TREE. */
8201 tree
8202 build_varargs_function_type_list (tree return_type, ...)
8204 tree args;
8205 va_list p;
8207 va_start (p, return_type);
8208 args = build_function_type_list_1 (true, return_type, p);
8209 va_end (p);
8211 return args;
8214 /* Build a function type. RETURN_TYPE is the type returned by the
8215 function; VAARGS indicates whether the function takes varargs. The
8216 function takes N named arguments, the types of which are provided in
8217 ARG_TYPES. */
8219 static tree
8220 build_function_type_array_1 (bool vaargs, tree return_type, int n,
8221 tree *arg_types)
8223 int i;
8224 tree t = vaargs ? NULL_TREE : void_list_node;
8226 for (i = n - 1; i >= 0; i--)
8227 t = tree_cons (NULL_TREE, arg_types[i], t);
8229 return build_function_type (return_type, t);
8232 /* Build a function type. RETURN_TYPE is the type returned by the
8233 function. The function takes N named arguments, the types of which
8234 are provided in ARG_TYPES. */
8236 tree
8237 build_function_type_array (tree return_type, int n, tree *arg_types)
8239 return build_function_type_array_1 (false, return_type, n, arg_types);
8242 /* Build a variable argument function type. RETURN_TYPE is the type
8243 returned by the function. The function takes N named arguments, the
8244 types of which are provided in ARG_TYPES. */
8246 tree
8247 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
8249 return build_function_type_array_1 (true, return_type, n, arg_types);
8252 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
8253 and ARGTYPES (a TREE_LIST) are the return type and arguments types
8254 for the method. An implicit additional parameter (of type
8255 pointer-to-BASETYPE) is added to the ARGTYPES. */
8257 tree
8258 build_method_type_directly (tree basetype,
8259 tree rettype,
8260 tree argtypes)
8262 tree t;
8263 tree ptype;
8264 int hashcode = 0;
8265 bool any_structural_p, any_noncanonical_p;
8266 tree canon_argtypes;
8268 /* Make a node of the sort we want. */
8269 t = make_node (METHOD_TYPE);
8271 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8272 TREE_TYPE (t) = rettype;
8273 ptype = build_pointer_type (basetype);
8275 /* The actual arglist for this function includes a "hidden" argument
8276 which is "this". Put it into the list of argument types. */
8277 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
8278 TYPE_ARG_TYPES (t) = argtypes;
8280 /* If we already have such a type, use the old one. */
8281 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
8282 hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
8283 hashcode = type_hash_list (argtypes, hashcode);
8284 t = type_hash_canon (hashcode, t);
8286 /* Set up the canonical type. */
8287 any_structural_p
8288 = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8289 || TYPE_STRUCTURAL_EQUALITY_P (rettype));
8290 any_noncanonical_p
8291 = (TYPE_CANONICAL (basetype) != basetype
8292 || TYPE_CANONICAL (rettype) != rettype);
8293 canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
8294 &any_structural_p,
8295 &any_noncanonical_p);
8296 if (any_structural_p)
8297 SET_TYPE_STRUCTURAL_EQUALITY (t);
8298 else if (any_noncanonical_p)
8299 TYPE_CANONICAL (t)
8300 = build_method_type_directly (TYPE_CANONICAL (basetype),
8301 TYPE_CANONICAL (rettype),
8302 canon_argtypes);
8303 if (!COMPLETE_TYPE_P (t))
8304 layout_type (t);
8306 return t;
8309 /* Construct, lay out and return the type of methods belonging to class
8310 BASETYPE and whose arguments and values are described by TYPE.
8311 If that type exists already, reuse it.
8312 TYPE must be a FUNCTION_TYPE node. */
8314 tree
8315 build_method_type (tree basetype, tree type)
8317 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8319 return build_method_type_directly (basetype,
8320 TREE_TYPE (type),
8321 TYPE_ARG_TYPES (type));
8324 /* Construct, lay out and return the type of offsets to a value
8325 of type TYPE, within an object of type BASETYPE.
8326 If a suitable offset type exists already, reuse it. */
8328 tree
8329 build_offset_type (tree basetype, tree type)
8331 tree t;
8332 hashval_t hashcode = 0;
8334 /* Make a node of the sort we want. */
8335 t = make_node (OFFSET_TYPE);
8337 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8338 TREE_TYPE (t) = type;
8340 /* If we already have such a type, use the old one. */
8341 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
8342 hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
8343 t = type_hash_canon (hashcode, t);
8345 if (!COMPLETE_TYPE_P (t))
8346 layout_type (t);
8348 if (TYPE_CANONICAL (t) == t)
8350 if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8351 || TYPE_STRUCTURAL_EQUALITY_P (type))
8352 SET_TYPE_STRUCTURAL_EQUALITY (t);
8353 else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8354 || TYPE_CANONICAL (type) != type)
8355 TYPE_CANONICAL (t)
8356 = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8357 TYPE_CANONICAL (type));
8360 return t;
8363 /* Create a complex type whose components are COMPONENT_TYPE. */
8365 tree
8366 build_complex_type (tree component_type)
8368 tree t;
8369 hashval_t hashcode;
8371 gcc_assert (INTEGRAL_TYPE_P (component_type)
8372 || SCALAR_FLOAT_TYPE_P (component_type)
8373 || FIXED_POINT_TYPE_P (component_type));
8375 /* Make a node of the sort we want. */
8376 t = make_node (COMPLEX_TYPE);
8378 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
8380 /* If we already have such a type, use the old one. */
8381 hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
8382 t = type_hash_canon (hashcode, t);
8384 if (!COMPLETE_TYPE_P (t))
8385 layout_type (t);
8387 if (TYPE_CANONICAL (t) == t)
8389 if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
8390 SET_TYPE_STRUCTURAL_EQUALITY (t);
8391 else if (TYPE_CANONICAL (component_type) != component_type)
8392 TYPE_CANONICAL (t)
8393 = build_complex_type (TYPE_CANONICAL (component_type));
8396 /* We need to create a name, since complex is a fundamental type. */
8397 if (! TYPE_NAME (t))
8399 const char *name;
8400 if (component_type == char_type_node)
8401 name = "complex char";
8402 else if (component_type == signed_char_type_node)
8403 name = "complex signed char";
8404 else if (component_type == unsigned_char_type_node)
8405 name = "complex unsigned char";
8406 else if (component_type == short_integer_type_node)
8407 name = "complex short int";
8408 else if (component_type == short_unsigned_type_node)
8409 name = "complex short unsigned int";
8410 else if (component_type == integer_type_node)
8411 name = "complex int";
8412 else if (component_type == unsigned_type_node)
8413 name = "complex unsigned int";
8414 else if (component_type == long_integer_type_node)
8415 name = "complex long int";
8416 else if (component_type == long_unsigned_type_node)
8417 name = "complex long unsigned int";
8418 else if (component_type == long_long_integer_type_node)
8419 name = "complex long long int";
8420 else if (component_type == long_long_unsigned_type_node)
8421 name = "complex long long unsigned int";
8422 else
8423 name = 0;
8425 if (name != 0)
8426 TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8427 get_identifier (name), t);
8430 return build_qualified_type (t, TYPE_QUALS (component_type));
8433 /* If TYPE is a real or complex floating-point type and the target
8434 does not directly support arithmetic on TYPE then return the wider
8435 type to be used for arithmetic on TYPE. Otherwise, return
8436 NULL_TREE. */
8438 tree
8439 excess_precision_type (tree type)
8441 if (flag_excess_precision != EXCESS_PRECISION_FAST)
8443 int flt_eval_method = TARGET_FLT_EVAL_METHOD;
8444 switch (TREE_CODE (type))
8446 case REAL_TYPE:
8447 switch (flt_eval_method)
8449 case 1:
8450 if (TYPE_MODE (type) == TYPE_MODE (float_type_node))
8451 return double_type_node;
8452 break;
8453 case 2:
8454 if (TYPE_MODE (type) == TYPE_MODE (float_type_node)
8455 || TYPE_MODE (type) == TYPE_MODE (double_type_node))
8456 return long_double_type_node;
8457 break;
8458 default:
8459 gcc_unreachable ();
8461 break;
8462 case COMPLEX_TYPE:
8463 if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8464 return NULL_TREE;
8465 switch (flt_eval_method)
8467 case 1:
8468 if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node))
8469 return complex_double_type_node;
8470 break;
8471 case 2:
8472 if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node)
8473 || (TYPE_MODE (TREE_TYPE (type))
8474 == TYPE_MODE (double_type_node)))
8475 return complex_long_double_type_node;
8476 break;
8477 default:
8478 gcc_unreachable ();
8480 break;
8481 default:
8482 break;
8485 return NULL_TREE;
8488 /* Return OP, stripped of any conversions to wider types as much as is safe.
8489 Converting the value back to OP's type makes a value equivalent to OP.
8491 If FOR_TYPE is nonzero, we return a value which, if converted to
8492 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
8494 OP must have integer, real or enumeral type. Pointers are not allowed!
8496 There are some cases where the obvious value we could return
8497 would regenerate to OP if converted to OP's type,
8498 but would not extend like OP to wider types.
8499 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
8500 For example, if OP is (unsigned short)(signed char)-1,
8501 we avoid returning (signed char)-1 if FOR_TYPE is int,
8502 even though extending that to an unsigned short would regenerate OP,
8503 since the result of extending (signed char)-1 to (int)
8504 is different from (int) OP. */
8506 tree
8507 get_unwidened (tree op, tree for_type)
8509 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
8510 tree type = TREE_TYPE (op);
8511 unsigned final_prec
8512 = TYPE_PRECISION (for_type != 0 ? for_type : type);
8513 int uns
8514 = (for_type != 0 && for_type != type
8515 && final_prec > TYPE_PRECISION (type)
8516 && TYPE_UNSIGNED (type));
8517 tree win = op;
8519 while (CONVERT_EXPR_P (op))
8521 int bitschange;
8523 /* TYPE_PRECISION on vector types has different meaning
8524 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
8525 so avoid them here. */
8526 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
8527 break;
8529 bitschange = TYPE_PRECISION (TREE_TYPE (op))
8530 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
8532 /* Truncations are many-one so cannot be removed.
8533 Unless we are later going to truncate down even farther. */
8534 if (bitschange < 0
8535 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
8536 break;
8538 /* See what's inside this conversion. If we decide to strip it,
8539 we will set WIN. */
8540 op = TREE_OPERAND (op, 0);
8542 /* If we have not stripped any zero-extensions (uns is 0),
8543 we can strip any kind of extension.
8544 If we have previously stripped a zero-extension,
8545 only zero-extensions can safely be stripped.
8546 Any extension can be stripped if the bits it would produce
8547 are all going to be discarded later by truncating to FOR_TYPE. */
8549 if (bitschange > 0)
8551 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
8552 win = op;
8553 /* TYPE_UNSIGNED says whether this is a zero-extension.
8554 Let's avoid computing it if it does not affect WIN
8555 and if UNS will not be needed again. */
8556 if ((uns
8557 || CONVERT_EXPR_P (op))
8558 && TYPE_UNSIGNED (TREE_TYPE (op)))
8560 uns = 1;
8561 win = op;
8566 /* If we finally reach a constant see if it fits in for_type and
8567 in that case convert it. */
8568 if (for_type
8569 && TREE_CODE (win) == INTEGER_CST
8570 && TREE_TYPE (win) != for_type
8571 && int_fits_type_p (win, for_type))
8572 win = fold_convert (for_type, win);
8574 return win;
8577 /* Return OP or a simpler expression for a narrower value
8578 which can be sign-extended or zero-extended to give back OP.
8579 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
8580 or 0 if the value should be sign-extended. */
8582 tree
8583 get_narrower (tree op, int *unsignedp_ptr)
8585 int uns = 0;
8586 int first = 1;
8587 tree win = op;
8588 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
8590 while (TREE_CODE (op) == NOP_EXPR)
8592 int bitschange
8593 = (TYPE_PRECISION (TREE_TYPE (op))
8594 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
8596 /* Truncations are many-one so cannot be removed. */
8597 if (bitschange < 0)
8598 break;
8600 /* See what's inside this conversion. If we decide to strip it,
8601 we will set WIN. */
8603 if (bitschange > 0)
8605 op = TREE_OPERAND (op, 0);
8606 /* An extension: the outermost one can be stripped,
8607 but remember whether it is zero or sign extension. */
8608 if (first)
8609 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8610 /* Otherwise, if a sign extension has been stripped,
8611 only sign extensions can now be stripped;
8612 if a zero extension has been stripped, only zero-extensions. */
8613 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
8614 break;
8615 first = 0;
8617 else /* bitschange == 0 */
8619 /* A change in nominal type can always be stripped, but we must
8620 preserve the unsignedness. */
8621 if (first)
8622 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8623 first = 0;
8624 op = TREE_OPERAND (op, 0);
8625 /* Keep trying to narrow, but don't assign op to win if it
8626 would turn an integral type into something else. */
8627 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
8628 continue;
8631 win = op;
8634 if (TREE_CODE (op) == COMPONENT_REF
8635 /* Since type_for_size always gives an integer type. */
8636 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
8637 && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
8638 /* Ensure field is laid out already. */
8639 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
8640 && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
8642 unsigned HOST_WIDE_INT innerprec
8643 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
8644 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
8645 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
8646 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
8648 /* We can get this structure field in a narrower type that fits it,
8649 but the resulting extension to its nominal type (a fullword type)
8650 must satisfy the same conditions as for other extensions.
8652 Do this only for fields that are aligned (not bit-fields),
8653 because when bit-field insns will be used there is no
8654 advantage in doing this. */
8656 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
8657 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
8658 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
8659 && type != 0)
8661 if (first)
8662 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
8663 win = fold_convert (type, op);
8667 *unsignedp_ptr = uns;
8668 return win;
8671 /* Returns true if integer constant C has a value that is permissible
8672 for type TYPE (an INTEGER_TYPE). */
8674 bool
8675 int_fits_type_p (const_tree c, const_tree type)
8677 tree type_low_bound, type_high_bound;
8678 bool ok_for_low_bound, ok_for_high_bound, unsc;
8679 double_int dc, dd;
8681 dc = tree_to_double_int (c);
8682 unsc = TYPE_UNSIGNED (TREE_TYPE (c));
8684 retry:
8685 type_low_bound = TYPE_MIN_VALUE (type);
8686 type_high_bound = TYPE_MAX_VALUE (type);
8688 /* If at least one bound of the type is a constant integer, we can check
8689 ourselves and maybe make a decision. If no such decision is possible, but
8690 this type is a subtype, try checking against that. Otherwise, use
8691 double_int_fits_to_tree_p, which checks against the precision.
8693 Compute the status for each possibly constant bound, and return if we see
8694 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
8695 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
8696 for "constant known to fit". */
8698 /* Check if c >= type_low_bound. */
8699 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
8701 dd = tree_to_double_int (type_low_bound);
8702 if (unsc != TYPE_UNSIGNED (TREE_TYPE (type_low_bound)))
8704 int c_neg = (!unsc && dc.is_negative ());
8705 int t_neg = (unsc && dd.is_negative ());
8707 if (c_neg && !t_neg)
8708 return false;
8709 if ((c_neg || !t_neg) && dc.ult (dd))
8710 return false;
8712 else if (dc.cmp (dd, unsc) < 0)
8713 return false;
8714 ok_for_low_bound = true;
8716 else
8717 ok_for_low_bound = false;
8719 /* Check if c <= type_high_bound. */
8720 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
8722 dd = tree_to_double_int (type_high_bound);
8723 if (unsc != TYPE_UNSIGNED (TREE_TYPE (type_high_bound)))
8725 int c_neg = (!unsc && dc.is_negative ());
8726 int t_neg = (unsc && dd.is_negative ());
8728 if (t_neg && !c_neg)
8729 return false;
8730 if ((t_neg || !c_neg) && dc.ugt (dd))
8731 return false;
8733 else if (dc.cmp (dd, unsc) > 0)
8734 return false;
8735 ok_for_high_bound = true;
8737 else
8738 ok_for_high_bound = false;
8740 /* If the constant fits both bounds, the result is known. */
8741 if (ok_for_low_bound && ok_for_high_bound)
8742 return true;
8744 /* Perform some generic filtering which may allow making a decision
8745 even if the bounds are not constant. First, negative integers
8746 never fit in unsigned types, */
8747 if (TYPE_UNSIGNED (type) && !unsc && dc.is_negative ())
8748 return false;
8750 /* Second, narrower types always fit in wider ones. */
8751 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
8752 return true;
8754 /* Third, unsigned integers with top bit set never fit signed types. */
8755 if (! TYPE_UNSIGNED (type) && unsc)
8757 int prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (c))) - 1;
8758 if (prec < HOST_BITS_PER_WIDE_INT)
8760 if (((((unsigned HOST_WIDE_INT) 1) << prec) & dc.low) != 0)
8761 return false;
8763 else if (((((unsigned HOST_WIDE_INT) 1)
8764 << (prec - HOST_BITS_PER_WIDE_INT)) & dc.high) != 0)
8765 return false;
8768 /* If we haven't been able to decide at this point, there nothing more we
8769 can check ourselves here. Look at the base type if we have one and it
8770 has the same precision. */
8771 if (TREE_CODE (type) == INTEGER_TYPE
8772 && TREE_TYPE (type) != 0
8773 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
8775 type = TREE_TYPE (type);
8776 goto retry;
8779 /* Or to double_int_fits_to_tree_p, if nothing else. */
8780 return double_int_fits_to_tree_p (type, dc);
8783 /* Stores bounds of an integer TYPE in MIN and MAX. If TYPE has non-constant
8784 bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
8785 represented (assuming two's-complement arithmetic) within the bit
8786 precision of the type are returned instead. */
8788 void
8789 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
8791 if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
8792 && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
8793 mpz_set_double_int (min, tree_to_double_int (TYPE_MIN_VALUE (type)),
8794 TYPE_UNSIGNED (type));
8795 else
8797 if (TYPE_UNSIGNED (type))
8798 mpz_set_ui (min, 0);
8799 else
8801 double_int mn;
8802 mn = double_int::mask (TYPE_PRECISION (type) - 1);
8803 mn = (mn + double_int_one).sext (TYPE_PRECISION (type));
8804 mpz_set_double_int (min, mn, false);
8808 if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
8809 && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
8810 mpz_set_double_int (max, tree_to_double_int (TYPE_MAX_VALUE (type)),
8811 TYPE_UNSIGNED (type));
8812 else
8814 if (TYPE_UNSIGNED (type))
8815 mpz_set_double_int (max, double_int::mask (TYPE_PRECISION (type)),
8816 true);
8817 else
8818 mpz_set_double_int (max, double_int::mask (TYPE_PRECISION (type) - 1),
8819 true);
8823 /* Return true if VAR is an automatic variable defined in function FN. */
8825 bool
8826 auto_var_in_fn_p (const_tree var, const_tree fn)
8828 return (DECL_P (var) && DECL_CONTEXT (var) == fn
8829 && ((((TREE_CODE (var) == VAR_DECL && ! DECL_EXTERNAL (var))
8830 || TREE_CODE (var) == PARM_DECL)
8831 && ! TREE_STATIC (var))
8832 || TREE_CODE (var) == LABEL_DECL
8833 || TREE_CODE (var) == RESULT_DECL));
8836 /* Subprogram of following function. Called by walk_tree.
8838 Return *TP if it is an automatic variable or parameter of the
8839 function passed in as DATA. */
8841 static tree
8842 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
8844 tree fn = (tree) data;
8846 if (TYPE_P (*tp))
8847 *walk_subtrees = 0;
8849 else if (DECL_P (*tp)
8850 && auto_var_in_fn_p (*tp, fn))
8851 return *tp;
8853 return NULL_TREE;
8856 /* Returns true if T is, contains, or refers to a type with variable
8857 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
8858 arguments, but not the return type. If FN is nonzero, only return
8859 true if a modifier of the type or position of FN is a variable or
8860 parameter inside FN.
8862 This concept is more general than that of C99 'variably modified types':
8863 in C99, a struct type is never variably modified because a VLA may not
8864 appear as a structure member. However, in GNU C code like:
8866 struct S { int i[f()]; };
8868 is valid, and other languages may define similar constructs. */
8870 bool
8871 variably_modified_type_p (tree type, tree fn)
8873 tree t;
8875 /* Test if T is either variable (if FN is zero) or an expression containing
8876 a variable in FN. If TYPE isn't gimplified, return true also if
8877 gimplify_one_sizepos would gimplify the expression into a local
8878 variable. */
8879 #define RETURN_TRUE_IF_VAR(T) \
8880 do { tree _t = (T); \
8881 if (_t != NULL_TREE \
8882 && _t != error_mark_node \
8883 && TREE_CODE (_t) != INTEGER_CST \
8884 && TREE_CODE (_t) != PLACEHOLDER_EXPR \
8885 && (!fn \
8886 || (!TYPE_SIZES_GIMPLIFIED (type) \
8887 && !is_gimple_sizepos (_t)) \
8888 || walk_tree (&_t, find_var_from_fn, fn, NULL))) \
8889 return true; } while (0)
8891 if (type == error_mark_node)
8892 return false;
8894 /* If TYPE itself has variable size, it is variably modified. */
8895 RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
8896 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
8898 switch (TREE_CODE (type))
8900 case POINTER_TYPE:
8901 case REFERENCE_TYPE:
8902 case VECTOR_TYPE:
8903 if (variably_modified_type_p (TREE_TYPE (type), fn))
8904 return true;
8905 break;
8907 case FUNCTION_TYPE:
8908 case METHOD_TYPE:
8909 /* If TYPE is a function type, it is variably modified if the
8910 return type is variably modified. */
8911 if (variably_modified_type_p (TREE_TYPE (type), fn))
8912 return true;
8913 break;
8915 case INTEGER_TYPE:
8916 case REAL_TYPE:
8917 case FIXED_POINT_TYPE:
8918 case ENUMERAL_TYPE:
8919 case BOOLEAN_TYPE:
8920 /* Scalar types are variably modified if their end points
8921 aren't constant. */
8922 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
8923 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
8924 break;
8926 case RECORD_TYPE:
8927 case UNION_TYPE:
8928 case QUAL_UNION_TYPE:
8929 /* We can't see if any of the fields are variably-modified by the
8930 definition we normally use, since that would produce infinite
8931 recursion via pointers. */
8932 /* This is variably modified if some field's type is. */
8933 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
8934 if (TREE_CODE (t) == FIELD_DECL)
8936 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
8937 RETURN_TRUE_IF_VAR (DECL_SIZE (t));
8938 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
8940 if (TREE_CODE (type) == QUAL_UNION_TYPE)
8941 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
8943 break;
8945 case ARRAY_TYPE:
8946 /* Do not call ourselves to avoid infinite recursion. This is
8947 variably modified if the element type is. */
8948 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
8949 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
8950 break;
8952 default:
8953 break;
8956 /* The current language may have other cases to check, but in general,
8957 all other types are not variably modified. */
8958 return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
8960 #undef RETURN_TRUE_IF_VAR
8963 /* Given a DECL or TYPE, return the scope in which it was declared, or
8964 NULL_TREE if there is no containing scope. */
8966 tree
8967 get_containing_scope (const_tree t)
8969 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
8972 /* Return the innermost context enclosing DECL that is
8973 a FUNCTION_DECL, or zero if none. */
8975 tree
8976 decl_function_context (const_tree decl)
8978 tree context;
8980 if (TREE_CODE (decl) == ERROR_MARK)
8981 return 0;
8983 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
8984 where we look up the function at runtime. Such functions always take
8985 a first argument of type 'pointer to real context'.
8987 C++ should really be fixed to use DECL_CONTEXT for the real context,
8988 and use something else for the "virtual context". */
8989 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
8990 context
8991 = TYPE_MAIN_VARIANT
8992 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
8993 else
8994 context = DECL_CONTEXT (decl);
8996 while (context && TREE_CODE (context) != FUNCTION_DECL)
8998 if (TREE_CODE (context) == BLOCK)
8999 context = BLOCK_SUPERCONTEXT (context);
9000 else
9001 context = get_containing_scope (context);
9004 return context;
9007 /* Return the innermost context enclosing DECL that is
9008 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
9009 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
9011 tree
9012 decl_type_context (const_tree decl)
9014 tree context = DECL_CONTEXT (decl);
9016 while (context)
9017 switch (TREE_CODE (context))
9019 case NAMESPACE_DECL:
9020 case TRANSLATION_UNIT_DECL:
9021 return NULL_TREE;
9023 case RECORD_TYPE:
9024 case UNION_TYPE:
9025 case QUAL_UNION_TYPE:
9026 return context;
9028 case TYPE_DECL:
9029 case FUNCTION_DECL:
9030 context = DECL_CONTEXT (context);
9031 break;
9033 case BLOCK:
9034 context = BLOCK_SUPERCONTEXT (context);
9035 break;
9037 default:
9038 gcc_unreachable ();
9041 return NULL_TREE;
9044 /* CALL is a CALL_EXPR. Return the declaration for the function
9045 called, or NULL_TREE if the called function cannot be
9046 determined. */
9048 tree
9049 get_callee_fndecl (const_tree call)
9051 tree addr;
9053 if (call == error_mark_node)
9054 return error_mark_node;
9056 /* It's invalid to call this function with anything but a
9057 CALL_EXPR. */
9058 gcc_assert (TREE_CODE (call) == CALL_EXPR);
9060 /* The first operand to the CALL is the address of the function
9061 called. */
9062 addr = CALL_EXPR_FN (call);
9064 STRIP_NOPS (addr);
9066 /* If this is a readonly function pointer, extract its initial value. */
9067 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
9068 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
9069 && DECL_INITIAL (addr))
9070 addr = DECL_INITIAL (addr);
9072 /* If the address is just `&f' for some function `f', then we know
9073 that `f' is being called. */
9074 if (TREE_CODE (addr) == ADDR_EXPR
9075 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
9076 return TREE_OPERAND (addr, 0);
9078 /* We couldn't figure out what was being called. */
9079 return NULL_TREE;
9082 /* Print debugging information about tree nodes generated during the compile,
9083 and any language-specific information. */
9085 void
9086 dump_tree_statistics (void)
9088 if (GATHER_STATISTICS)
9090 int i;
9091 int total_nodes, total_bytes;
9092 fprintf (stderr, "Kind Nodes Bytes\n");
9093 fprintf (stderr, "---------------------------------------\n");
9094 total_nodes = total_bytes = 0;
9095 for (i = 0; i < (int) all_kinds; i++)
9097 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
9098 tree_node_counts[i], tree_node_sizes[i]);
9099 total_nodes += tree_node_counts[i];
9100 total_bytes += tree_node_sizes[i];
9102 fprintf (stderr, "---------------------------------------\n");
9103 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
9104 fprintf (stderr, "---------------------------------------\n");
9105 fprintf (stderr, "Code Nodes\n");
9106 fprintf (stderr, "----------------------------\n");
9107 for (i = 0; i < (int) MAX_TREE_CODES; i++)
9108 fprintf (stderr, "%-20s %7d\n", get_tree_code_name ((enum tree_code) i),
9109 tree_code_counts[i]);
9110 fprintf (stderr, "----------------------------\n");
9111 ssanames_print_statistics ();
9112 phinodes_print_statistics ();
9114 else
9115 fprintf (stderr, "(No per-node statistics)\n");
9117 print_type_hash_statistics ();
9118 print_debug_expr_statistics ();
9119 print_value_expr_statistics ();
9120 lang_hooks.print_statistics ();
9123 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
9125 /* Generate a crc32 of a byte. */
9127 static unsigned
9128 crc32_unsigned_bits (unsigned chksum, unsigned value, unsigned bits)
9130 unsigned ix;
9132 for (ix = bits; ix--; value <<= 1)
9134 unsigned feedback;
9136 feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
9137 chksum <<= 1;
9138 chksum ^= feedback;
9140 return chksum;
9143 /* Generate a crc32 of a 32-bit unsigned. */
9145 unsigned
9146 crc32_unsigned (unsigned chksum, unsigned value)
9148 return crc32_unsigned_bits (chksum, value, 32);
9151 /* Generate a crc32 of a byte. */
9153 unsigned
9154 crc32_byte (unsigned chksum, char byte)
9156 return crc32_unsigned_bits (chksum, (unsigned) byte << 24, 8);
9159 /* Generate a crc32 of a string. */
9161 unsigned
9162 crc32_string (unsigned chksum, const char *string)
9166 chksum = crc32_byte (chksum, *string);
9168 while (*string++);
9169 return chksum;
9172 /* P is a string that will be used in a symbol. Mask out any characters
9173 that are not valid in that context. */
9175 void
9176 clean_symbol_name (char *p)
9178 for (; *p; p++)
9179 if (! (ISALNUM (*p)
9180 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
9181 || *p == '$'
9182 #endif
9183 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
9184 || *p == '.'
9185 #endif
9187 *p = '_';
9190 /* Generate a name for a special-purpose function.
9191 The generated name may need to be unique across the whole link.
9192 Changes to this function may also require corresponding changes to
9193 xstrdup_mask_random.
9194 TYPE is some string to identify the purpose of this function to the
9195 linker or collect2; it must start with an uppercase letter,
9196 one of:
9197 I - for constructors
9198 D - for destructors
9199 N - for C++ anonymous namespaces
9200 F - for DWARF unwind frame information. */
9202 tree
9203 get_file_function_name (const char *type)
9205 char *buf;
9206 const char *p;
9207 char *q;
9209 /* If we already have a name we know to be unique, just use that. */
9210 if (first_global_object_name)
9211 p = q = ASTRDUP (first_global_object_name);
9212 /* If the target is handling the constructors/destructors, they
9213 will be local to this file and the name is only necessary for
9214 debugging purposes.
9215 We also assign sub_I and sub_D sufixes to constructors called from
9216 the global static constructors. These are always local. */
9217 else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9218 || (strncmp (type, "sub_", 4) == 0
9219 && (type[4] == 'I' || type[4] == 'D')))
9221 const char *file = main_input_filename;
9222 if (! file)
9223 file = input_filename;
9224 /* Just use the file's basename, because the full pathname
9225 might be quite long. */
9226 p = q = ASTRDUP (lbasename (file));
9228 else
9230 /* Otherwise, the name must be unique across the entire link.
9231 We don't have anything that we know to be unique to this translation
9232 unit, so use what we do have and throw in some randomness. */
9233 unsigned len;
9234 const char *name = weak_global_object_name;
9235 const char *file = main_input_filename;
9237 if (! name)
9238 name = "";
9239 if (! file)
9240 file = input_filename;
9242 len = strlen (file);
9243 q = (char *) alloca (9 + 17 + len + 1);
9244 memcpy (q, file, len + 1);
9246 snprintf (q + len, 9 + 17 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX,
9247 crc32_string (0, name), get_random_seed (false));
9249 p = q;
9252 clean_symbol_name (q);
9253 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9254 + strlen (type));
9256 /* Set up the name of the file-level functions we may need.
9257 Use a global object (which is already required to be unique over
9258 the program) rather than the file name (which imposes extra
9259 constraints). */
9260 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9262 return get_identifier (buf);
9265 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9267 /* Complain that the tree code of NODE does not match the expected 0
9268 terminated list of trailing codes. The trailing code list can be
9269 empty, for a more vague error message. FILE, LINE, and FUNCTION
9270 are of the caller. */
9272 void
9273 tree_check_failed (const_tree node, const char *file,
9274 int line, const char *function, ...)
9276 va_list args;
9277 const char *buffer;
9278 unsigned length = 0;
9279 enum tree_code code;
9281 va_start (args, function);
9282 while ((code = (enum tree_code) va_arg (args, int)))
9283 length += 4 + strlen (get_tree_code_name (code));
9284 va_end (args);
9285 if (length)
9287 char *tmp;
9288 va_start (args, function);
9289 length += strlen ("expected ");
9290 buffer = tmp = (char *) alloca (length);
9291 length = 0;
9292 while ((code = (enum tree_code) va_arg (args, int)))
9294 const char *prefix = length ? " or " : "expected ";
9296 strcpy (tmp + length, prefix);
9297 length += strlen (prefix);
9298 strcpy (tmp + length, get_tree_code_name (code));
9299 length += strlen (get_tree_code_name (code));
9301 va_end (args);
9303 else
9304 buffer = "unexpected node";
9306 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9307 buffer, get_tree_code_name (TREE_CODE (node)),
9308 function, trim_filename (file), line);
9311 /* Complain that the tree code of NODE does match the expected 0
9312 terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9313 the caller. */
9315 void
9316 tree_not_check_failed (const_tree node, const char *file,
9317 int line, const char *function, ...)
9319 va_list args;
9320 char *buffer;
9321 unsigned length = 0;
9322 enum tree_code code;
9324 va_start (args, function);
9325 while ((code = (enum tree_code) va_arg (args, int)))
9326 length += 4 + strlen (get_tree_code_name (code));
9327 va_end (args);
9328 va_start (args, function);
9329 buffer = (char *) alloca (length);
9330 length = 0;
9331 while ((code = (enum tree_code) va_arg (args, int)))
9333 if (length)
9335 strcpy (buffer + length, " or ");
9336 length += 4;
9338 strcpy (buffer + length, get_tree_code_name (code));
9339 length += strlen (get_tree_code_name (code));
9341 va_end (args);
9343 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9344 buffer, get_tree_code_name (TREE_CODE (node)),
9345 function, trim_filename (file), line);
9348 /* Similar to tree_check_failed, except that we check for a class of tree
9349 code, given in CL. */
9351 void
9352 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9353 const char *file, int line, const char *function)
9355 internal_error
9356 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9357 TREE_CODE_CLASS_STRING (cl),
9358 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9359 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9362 /* Similar to tree_check_failed, except that instead of specifying a
9363 dozen codes, use the knowledge that they're all sequential. */
9365 void
9366 tree_range_check_failed (const_tree node, const char *file, int line,
9367 const char *function, enum tree_code c1,
9368 enum tree_code c2)
9370 char *buffer;
9371 unsigned length = 0;
9372 unsigned int c;
9374 for (c = c1; c <= c2; ++c)
9375 length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9377 length += strlen ("expected ");
9378 buffer = (char *) alloca (length);
9379 length = 0;
9381 for (c = c1; c <= c2; ++c)
9383 const char *prefix = length ? " or " : "expected ";
9385 strcpy (buffer + length, prefix);
9386 length += strlen (prefix);
9387 strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9388 length += strlen (get_tree_code_name ((enum tree_code) c));
9391 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9392 buffer, get_tree_code_name (TREE_CODE (node)),
9393 function, trim_filename (file), line);
9397 /* Similar to tree_check_failed, except that we check that a tree does
9398 not have the specified code, given in CL. */
9400 void
9401 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9402 const char *file, int line, const char *function)
9404 internal_error
9405 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9406 TREE_CODE_CLASS_STRING (cl),
9407 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9408 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9412 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
9414 void
9415 omp_clause_check_failed (const_tree node, const char *file, int line,
9416 const char *function, enum omp_clause_code code)
9418 internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
9419 omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)),
9420 function, trim_filename (file), line);
9424 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
9426 void
9427 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9428 const char *function, enum omp_clause_code c1,
9429 enum omp_clause_code c2)
9431 char *buffer;
9432 unsigned length = 0;
9433 unsigned int c;
9435 for (c = c1; c <= c2; ++c)
9436 length += 4 + strlen (omp_clause_code_name[c]);
9438 length += strlen ("expected ");
9439 buffer = (char *) alloca (length);
9440 length = 0;
9442 for (c = c1; c <= c2; ++c)
9444 const char *prefix = length ? " or " : "expected ";
9446 strcpy (buffer + length, prefix);
9447 length += strlen (prefix);
9448 strcpy (buffer + length, omp_clause_code_name[c]);
9449 length += strlen (omp_clause_code_name[c]);
9452 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9453 buffer, omp_clause_code_name[TREE_CODE (node)],
9454 function, trim_filename (file), line);
9458 #undef DEFTREESTRUCT
9459 #define DEFTREESTRUCT(VAL, NAME) NAME,
9461 static const char *ts_enum_names[] = {
9462 #include "treestruct.def"
9464 #undef DEFTREESTRUCT
9466 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
9468 /* Similar to tree_class_check_failed, except that we check for
9469 whether CODE contains the tree structure identified by EN. */
9471 void
9472 tree_contains_struct_check_failed (const_tree node,
9473 const enum tree_node_structure_enum en,
9474 const char *file, int line,
9475 const char *function)
9477 internal_error
9478 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
9479 TS_ENUM_NAME (en),
9480 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9484 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9485 (dynamically sized) vector. */
9487 void
9488 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
9489 const char *function)
9491 internal_error
9492 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
9493 idx + 1, len, function, trim_filename (file), line);
9496 /* Similar to above, except that the check is for the bounds of the operand
9497 vector of an expression node EXP. */
9499 void
9500 tree_operand_check_failed (int idx, const_tree exp, const char *file,
9501 int line, const char *function)
9503 enum tree_code code = TREE_CODE (exp);
9504 internal_error
9505 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
9506 idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
9507 function, trim_filename (file), line);
9510 /* Similar to above, except that the check is for the number of
9511 operands of an OMP_CLAUSE node. */
9513 void
9514 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
9515 int line, const char *function)
9517 internal_error
9518 ("tree check: accessed operand %d of omp_clause %s with %d operands "
9519 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
9520 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
9521 trim_filename (file), line);
9523 #endif /* ENABLE_TREE_CHECKING */
9525 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
9526 and mapped to the machine mode MODE. Initialize its fields and build
9527 the information necessary for debugging output. */
9529 static tree
9530 make_vector_type (tree innertype, int nunits, enum machine_mode mode)
9532 tree t;
9533 hashval_t hashcode = 0;
9535 t = make_node (VECTOR_TYPE);
9536 TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
9537 SET_TYPE_VECTOR_SUBPARTS (t, nunits);
9538 SET_TYPE_MODE (t, mode);
9540 if (TYPE_STRUCTURAL_EQUALITY_P (innertype))
9541 SET_TYPE_STRUCTURAL_EQUALITY (t);
9542 else if (TYPE_CANONICAL (innertype) != innertype
9543 || mode != VOIDmode)
9544 TYPE_CANONICAL (t)
9545 = make_vector_type (TYPE_CANONICAL (innertype), nunits, VOIDmode);
9547 layout_type (t);
9549 hashcode = iterative_hash_host_wide_int (VECTOR_TYPE, hashcode);
9550 hashcode = iterative_hash_host_wide_int (nunits, hashcode);
9551 hashcode = iterative_hash_host_wide_int (mode, hashcode);
9552 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (t)), hashcode);
9553 t = type_hash_canon (hashcode, t);
9555 /* We have built a main variant, based on the main variant of the
9556 inner type. Use it to build the variant we return. */
9557 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
9558 && TREE_TYPE (t) != innertype)
9559 return build_type_attribute_qual_variant (t,
9560 TYPE_ATTRIBUTES (innertype),
9561 TYPE_QUALS (innertype));
9563 return t;
9566 static tree
9567 make_or_reuse_type (unsigned size, int unsignedp)
9569 if (size == INT_TYPE_SIZE)
9570 return unsignedp ? unsigned_type_node : integer_type_node;
9571 if (size == CHAR_TYPE_SIZE)
9572 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
9573 if (size == SHORT_TYPE_SIZE)
9574 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
9575 if (size == LONG_TYPE_SIZE)
9576 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
9577 if (size == LONG_LONG_TYPE_SIZE)
9578 return (unsignedp ? long_long_unsigned_type_node
9579 : long_long_integer_type_node);
9580 if (size == 128 && int128_integer_type_node)
9581 return (unsignedp ? int128_unsigned_type_node
9582 : int128_integer_type_node);
9584 if (unsignedp)
9585 return make_unsigned_type (size);
9586 else
9587 return make_signed_type (size);
9590 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP. */
9592 static tree
9593 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
9595 if (satp)
9597 if (size == SHORT_FRACT_TYPE_SIZE)
9598 return unsignedp ? sat_unsigned_short_fract_type_node
9599 : sat_short_fract_type_node;
9600 if (size == FRACT_TYPE_SIZE)
9601 return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
9602 if (size == LONG_FRACT_TYPE_SIZE)
9603 return unsignedp ? sat_unsigned_long_fract_type_node
9604 : sat_long_fract_type_node;
9605 if (size == LONG_LONG_FRACT_TYPE_SIZE)
9606 return unsignedp ? sat_unsigned_long_long_fract_type_node
9607 : sat_long_long_fract_type_node;
9609 else
9611 if (size == SHORT_FRACT_TYPE_SIZE)
9612 return unsignedp ? unsigned_short_fract_type_node
9613 : short_fract_type_node;
9614 if (size == FRACT_TYPE_SIZE)
9615 return unsignedp ? unsigned_fract_type_node : fract_type_node;
9616 if (size == LONG_FRACT_TYPE_SIZE)
9617 return unsignedp ? unsigned_long_fract_type_node
9618 : long_fract_type_node;
9619 if (size == LONG_LONG_FRACT_TYPE_SIZE)
9620 return unsignedp ? unsigned_long_long_fract_type_node
9621 : long_long_fract_type_node;
9624 return make_fract_type (size, unsignedp, satp);
9627 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP. */
9629 static tree
9630 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
9632 if (satp)
9634 if (size == SHORT_ACCUM_TYPE_SIZE)
9635 return unsignedp ? sat_unsigned_short_accum_type_node
9636 : sat_short_accum_type_node;
9637 if (size == ACCUM_TYPE_SIZE)
9638 return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
9639 if (size == LONG_ACCUM_TYPE_SIZE)
9640 return unsignedp ? sat_unsigned_long_accum_type_node
9641 : sat_long_accum_type_node;
9642 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9643 return unsignedp ? sat_unsigned_long_long_accum_type_node
9644 : sat_long_long_accum_type_node;
9646 else
9648 if (size == SHORT_ACCUM_TYPE_SIZE)
9649 return unsignedp ? unsigned_short_accum_type_node
9650 : short_accum_type_node;
9651 if (size == ACCUM_TYPE_SIZE)
9652 return unsignedp ? unsigned_accum_type_node : accum_type_node;
9653 if (size == LONG_ACCUM_TYPE_SIZE)
9654 return unsignedp ? unsigned_long_accum_type_node
9655 : long_accum_type_node;
9656 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9657 return unsignedp ? unsigned_long_long_accum_type_node
9658 : long_long_accum_type_node;
9661 return make_accum_type (size, unsignedp, satp);
9664 /* Create nodes for all integer types (and error_mark_node) using the sizes
9665 of C datatypes. SIGNED_CHAR specifies whether char is signed,
9666 SHORT_DOUBLE specifies whether double should be of the same precision
9667 as float. */
9669 void
9670 build_common_tree_nodes (bool signed_char, bool short_double)
9672 error_mark_node = make_node (ERROR_MARK);
9673 TREE_TYPE (error_mark_node) = error_mark_node;
9675 initialize_sizetypes ();
9677 /* Define both `signed char' and `unsigned char'. */
9678 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
9679 TYPE_STRING_FLAG (signed_char_type_node) = 1;
9680 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
9681 TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
9683 /* Define `char', which is like either `signed char' or `unsigned char'
9684 but not the same as either. */
9685 char_type_node
9686 = (signed_char
9687 ? make_signed_type (CHAR_TYPE_SIZE)
9688 : make_unsigned_type (CHAR_TYPE_SIZE));
9689 TYPE_STRING_FLAG (char_type_node) = 1;
9691 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
9692 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
9693 integer_type_node = make_signed_type (INT_TYPE_SIZE);
9694 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
9695 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
9696 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
9697 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
9698 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
9699 #if HOST_BITS_PER_WIDE_INT >= 64
9700 /* TODO: This isn't correct, but as logic depends at the moment on
9701 host's instead of target's wide-integer.
9702 If there is a target not supporting TImode, but has an 128-bit
9703 integer-scalar register, this target check needs to be adjusted. */
9704 if (targetm.scalar_mode_supported_p (TImode))
9706 int128_integer_type_node = make_signed_type (128);
9707 int128_unsigned_type_node = make_unsigned_type (128);
9709 #endif
9711 /* Define a boolean type. This type only represents boolean values but
9712 may be larger than char depending on the value of BOOL_TYPE_SIZE.
9713 Front ends which want to override this size (i.e. Java) can redefine
9714 boolean_type_node before calling build_common_tree_nodes_2. */
9715 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
9716 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
9717 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
9718 TYPE_PRECISION (boolean_type_node) = 1;
9720 /* Define what type to use for size_t. */
9721 if (strcmp (SIZE_TYPE, "unsigned int") == 0)
9722 size_type_node = unsigned_type_node;
9723 else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
9724 size_type_node = long_unsigned_type_node;
9725 else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
9726 size_type_node = long_long_unsigned_type_node;
9727 else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
9728 size_type_node = short_unsigned_type_node;
9729 else
9730 gcc_unreachable ();
9732 /* Fill in the rest of the sized types. Reuse existing type nodes
9733 when possible. */
9734 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
9735 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
9736 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
9737 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
9738 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
9740 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
9741 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
9742 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
9743 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
9744 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
9746 access_public_node = get_identifier ("public");
9747 access_protected_node = get_identifier ("protected");
9748 access_private_node = get_identifier ("private");
9750 /* Define these next since types below may used them. */
9751 integer_zero_node = build_int_cst (integer_type_node, 0);
9752 integer_one_node = build_int_cst (integer_type_node, 1);
9753 integer_three_node = build_int_cst (integer_type_node, 3);
9754 integer_minus_one_node = build_int_cst (integer_type_node, -1);
9756 size_zero_node = size_int (0);
9757 size_one_node = size_int (1);
9758 bitsize_zero_node = bitsize_int (0);
9759 bitsize_one_node = bitsize_int (1);
9760 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
9762 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
9763 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
9765 void_type_node = make_node (VOID_TYPE);
9766 layout_type (void_type_node);
9768 /* We are not going to have real types in C with less than byte alignment,
9769 so we might as well not have any types that claim to have it. */
9770 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
9771 TYPE_USER_ALIGN (void_type_node) = 0;
9773 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
9774 layout_type (TREE_TYPE (null_pointer_node));
9776 ptr_type_node = build_pointer_type (void_type_node);
9777 const_ptr_type_node
9778 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
9779 fileptr_type_node = ptr_type_node;
9781 pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
9783 float_type_node = make_node (REAL_TYPE);
9784 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
9785 layout_type (float_type_node);
9787 double_type_node = make_node (REAL_TYPE);
9788 if (short_double)
9789 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
9790 else
9791 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
9792 layout_type (double_type_node);
9794 long_double_type_node = make_node (REAL_TYPE);
9795 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
9796 layout_type (long_double_type_node);
9798 float_ptr_type_node = build_pointer_type (float_type_node);
9799 double_ptr_type_node = build_pointer_type (double_type_node);
9800 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
9801 integer_ptr_type_node = build_pointer_type (integer_type_node);
9803 /* Fixed size integer types. */
9804 uint16_type_node = build_nonstandard_integer_type (16, true);
9805 uint32_type_node = build_nonstandard_integer_type (32, true);
9806 uint64_type_node = build_nonstandard_integer_type (64, true);
9808 /* Decimal float types. */
9809 dfloat32_type_node = make_node (REAL_TYPE);
9810 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
9811 layout_type (dfloat32_type_node);
9812 SET_TYPE_MODE (dfloat32_type_node, SDmode);
9813 dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
9815 dfloat64_type_node = make_node (REAL_TYPE);
9816 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
9817 layout_type (dfloat64_type_node);
9818 SET_TYPE_MODE (dfloat64_type_node, DDmode);
9819 dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
9821 dfloat128_type_node = make_node (REAL_TYPE);
9822 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
9823 layout_type (dfloat128_type_node);
9824 SET_TYPE_MODE (dfloat128_type_node, TDmode);
9825 dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
9827 complex_integer_type_node = build_complex_type (integer_type_node);
9828 complex_float_type_node = build_complex_type (float_type_node);
9829 complex_double_type_node = build_complex_type (double_type_node);
9830 complex_long_double_type_node = build_complex_type (long_double_type_node);
9832 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned. */
9833 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
9834 sat_ ## KIND ## _type_node = \
9835 make_sat_signed_ ## KIND ## _type (SIZE); \
9836 sat_unsigned_ ## KIND ## _type_node = \
9837 make_sat_unsigned_ ## KIND ## _type (SIZE); \
9838 KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
9839 unsigned_ ## KIND ## _type_node = \
9840 make_unsigned_ ## KIND ## _type (SIZE);
9842 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
9843 sat_ ## WIDTH ## KIND ## _type_node = \
9844 make_sat_signed_ ## KIND ## _type (SIZE); \
9845 sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
9846 make_sat_unsigned_ ## KIND ## _type (SIZE); \
9847 WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
9848 unsigned_ ## WIDTH ## KIND ## _type_node = \
9849 make_unsigned_ ## KIND ## _type (SIZE);
9851 /* Make fixed-point type nodes based on four different widths. */
9852 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
9853 MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
9854 MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
9855 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
9856 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
9858 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned. */
9859 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
9860 NAME ## _type_node = \
9861 make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
9862 u ## NAME ## _type_node = \
9863 make_or_reuse_unsigned_ ## KIND ## _type \
9864 (GET_MODE_BITSIZE (U ## MODE ## mode)); \
9865 sat_ ## NAME ## _type_node = \
9866 make_or_reuse_sat_signed_ ## KIND ## _type \
9867 (GET_MODE_BITSIZE (MODE ## mode)); \
9868 sat_u ## NAME ## _type_node = \
9869 make_or_reuse_sat_unsigned_ ## KIND ## _type \
9870 (GET_MODE_BITSIZE (U ## MODE ## mode));
9872 /* Fixed-point type and mode nodes. */
9873 MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
9874 MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
9875 MAKE_FIXED_MODE_NODE (fract, qq, QQ)
9876 MAKE_FIXED_MODE_NODE (fract, hq, HQ)
9877 MAKE_FIXED_MODE_NODE (fract, sq, SQ)
9878 MAKE_FIXED_MODE_NODE (fract, dq, DQ)
9879 MAKE_FIXED_MODE_NODE (fract, tq, TQ)
9880 MAKE_FIXED_MODE_NODE (accum, ha, HA)
9881 MAKE_FIXED_MODE_NODE (accum, sa, SA)
9882 MAKE_FIXED_MODE_NODE (accum, da, DA)
9883 MAKE_FIXED_MODE_NODE (accum, ta, TA)
9886 tree t = targetm.build_builtin_va_list ();
9888 /* Many back-ends define record types without setting TYPE_NAME.
9889 If we copied the record type here, we'd keep the original
9890 record type without a name. This breaks name mangling. So,
9891 don't copy record types and let c_common_nodes_and_builtins()
9892 declare the type to be __builtin_va_list. */
9893 if (TREE_CODE (t) != RECORD_TYPE)
9894 t = build_variant_type_copy (t);
9896 va_list_type_node = t;
9900 /* Modify DECL for given flags.
9901 TM_PURE attribute is set only on types, so the function will modify
9902 DECL's type when ECF_TM_PURE is used. */
9904 void
9905 set_call_expr_flags (tree decl, int flags)
9907 if (flags & ECF_NOTHROW)
9908 TREE_NOTHROW (decl) = 1;
9909 if (flags & ECF_CONST)
9910 TREE_READONLY (decl) = 1;
9911 if (flags & ECF_PURE)
9912 DECL_PURE_P (decl) = 1;
9913 if (flags & ECF_LOOPING_CONST_OR_PURE)
9914 DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
9915 if (flags & ECF_NOVOPS)
9916 DECL_IS_NOVOPS (decl) = 1;
9917 if (flags & ECF_NORETURN)
9918 TREE_THIS_VOLATILE (decl) = 1;
9919 if (flags & ECF_MALLOC)
9920 DECL_IS_MALLOC (decl) = 1;
9921 if (flags & ECF_RETURNS_TWICE)
9922 DECL_IS_RETURNS_TWICE (decl) = 1;
9923 if (flags & ECF_LEAF)
9924 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
9925 NULL, DECL_ATTRIBUTES (decl));
9926 if ((flags & ECF_TM_PURE) && flag_tm)
9927 apply_tm_attr (decl, get_identifier ("transaction_pure"));
9928 /* Looping const or pure is implied by noreturn.
9929 There is currently no way to declare looping const or looping pure alone. */
9930 gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
9931 || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
9935 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
9937 static void
9938 local_define_builtin (const char *name, tree type, enum built_in_function code,
9939 const char *library_name, int ecf_flags)
9941 tree decl;
9943 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
9944 library_name, NULL_TREE);
9945 set_call_expr_flags (decl, ecf_flags);
9947 set_builtin_decl (code, decl, true);
9950 /* Call this function after instantiating all builtins that the language
9951 front end cares about. This will build the rest of the builtins that
9952 are relied upon by the tree optimizers and the middle-end. */
9954 void
9955 build_common_builtin_nodes (void)
9957 tree tmp, ftype;
9958 int ecf_flags;
9960 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
9962 ftype = build_function_type (void_type_node, void_list_node);
9963 local_define_builtin ("__builtin_unreachable", ftype, BUILT_IN_UNREACHABLE,
9964 "__builtin_unreachable",
9965 ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
9966 | ECF_CONST | ECF_LEAF);
9969 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
9970 || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
9972 ftype = build_function_type_list (ptr_type_node,
9973 ptr_type_node, const_ptr_type_node,
9974 size_type_node, NULL_TREE);
9976 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
9977 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
9978 "memcpy", ECF_NOTHROW | ECF_LEAF);
9979 if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
9980 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
9981 "memmove", ECF_NOTHROW | ECF_LEAF);
9984 if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
9986 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
9987 const_ptr_type_node, size_type_node,
9988 NULL_TREE);
9989 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
9990 "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
9993 if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
9995 ftype = build_function_type_list (ptr_type_node,
9996 ptr_type_node, integer_type_node,
9997 size_type_node, NULL_TREE);
9998 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
9999 "memset", ECF_NOTHROW | ECF_LEAF);
10002 if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
10004 ftype = build_function_type_list (ptr_type_node,
10005 size_type_node, NULL_TREE);
10006 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10007 "alloca", ECF_MALLOC | ECF_NOTHROW | ECF_LEAF);
10010 ftype = build_function_type_list (ptr_type_node, size_type_node,
10011 size_type_node, NULL_TREE);
10012 local_define_builtin ("__builtin_alloca_with_align", ftype,
10013 BUILT_IN_ALLOCA_WITH_ALIGN, "alloca",
10014 ECF_MALLOC | ECF_NOTHROW | ECF_LEAF);
10016 /* If we're checking the stack, `alloca' can throw. */
10017 if (flag_stack_check)
10019 TREE_NOTHROW (builtin_decl_explicit (BUILT_IN_ALLOCA)) = 0;
10020 TREE_NOTHROW (builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN)) = 0;
10023 ftype = build_function_type_list (void_type_node,
10024 ptr_type_node, ptr_type_node,
10025 ptr_type_node, NULL_TREE);
10026 local_define_builtin ("__builtin_init_trampoline", ftype,
10027 BUILT_IN_INIT_TRAMPOLINE,
10028 "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10029 local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10030 BUILT_IN_INIT_HEAP_TRAMPOLINE,
10031 "__builtin_init_heap_trampoline",
10032 ECF_NOTHROW | ECF_LEAF);
10034 ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10035 local_define_builtin ("__builtin_adjust_trampoline", ftype,
10036 BUILT_IN_ADJUST_TRAMPOLINE,
10037 "__builtin_adjust_trampoline",
10038 ECF_CONST | ECF_NOTHROW);
10040 ftype = build_function_type_list (void_type_node,
10041 ptr_type_node, ptr_type_node, NULL_TREE);
10042 local_define_builtin ("__builtin_nonlocal_goto", ftype,
10043 BUILT_IN_NONLOCAL_GOTO,
10044 "__builtin_nonlocal_goto",
10045 ECF_NORETURN | ECF_NOTHROW);
10047 ftype = build_function_type_list (void_type_node,
10048 ptr_type_node, ptr_type_node, NULL_TREE);
10049 local_define_builtin ("__builtin_setjmp_setup", ftype,
10050 BUILT_IN_SETJMP_SETUP,
10051 "__builtin_setjmp_setup", ECF_NOTHROW);
10053 ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10054 local_define_builtin ("__builtin_setjmp_dispatcher", ftype,
10055 BUILT_IN_SETJMP_DISPATCHER,
10056 "__builtin_setjmp_dispatcher",
10057 ECF_PURE | ECF_NOTHROW);
10059 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10060 local_define_builtin ("__builtin_setjmp_receiver", ftype,
10061 BUILT_IN_SETJMP_RECEIVER,
10062 "__builtin_setjmp_receiver", ECF_NOTHROW);
10064 ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10065 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10066 "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10068 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10069 local_define_builtin ("__builtin_stack_restore", ftype,
10070 BUILT_IN_STACK_RESTORE,
10071 "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10073 /* If there's a possibility that we might use the ARM EABI, build the
10074 alternate __cxa_end_cleanup node used to resume from C++ and Java. */
10075 if (targetm.arm_eabi_unwinder)
10077 ftype = build_function_type_list (void_type_node, NULL_TREE);
10078 local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10079 BUILT_IN_CXA_END_CLEANUP,
10080 "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10083 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10084 local_define_builtin ("__builtin_unwind_resume", ftype,
10085 BUILT_IN_UNWIND_RESUME,
10086 ((targetm_common.except_unwind_info (&global_options)
10087 == UI_SJLJ)
10088 ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10089 ECF_NORETURN);
10091 if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10093 ftype = build_function_type_list (ptr_type_node, integer_type_node,
10094 NULL_TREE);
10095 local_define_builtin ("__builtin_return_address", ftype,
10096 BUILT_IN_RETURN_ADDRESS,
10097 "__builtin_return_address",
10098 ECF_NOTHROW);
10101 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10102 || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10104 ftype = build_function_type_list (void_type_node, ptr_type_node,
10105 ptr_type_node, NULL_TREE);
10106 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10107 local_define_builtin ("__cyg_profile_func_enter", ftype,
10108 BUILT_IN_PROFILE_FUNC_ENTER,
10109 "__cyg_profile_func_enter", 0);
10110 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10111 local_define_builtin ("__cyg_profile_func_exit", ftype,
10112 BUILT_IN_PROFILE_FUNC_EXIT,
10113 "__cyg_profile_func_exit", 0);
10116 /* The exception object and filter values from the runtime. The argument
10117 must be zero before exception lowering, i.e. from the front end. After
10118 exception lowering, it will be the region number for the exception
10119 landing pad. These functions are PURE instead of CONST to prevent
10120 them from being hoisted past the exception edge that will initialize
10121 its value in the landing pad. */
10122 ftype = build_function_type_list (ptr_type_node,
10123 integer_type_node, NULL_TREE);
10124 ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10125 /* Only use TM_PURE if we we have TM language support. */
10126 if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10127 ecf_flags |= ECF_TM_PURE;
10128 local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10129 "__builtin_eh_pointer", ecf_flags);
10131 tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10132 ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10133 local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10134 "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10136 ftype = build_function_type_list (void_type_node,
10137 integer_type_node, integer_type_node,
10138 NULL_TREE);
10139 local_define_builtin ("__builtin_eh_copy_values", ftype,
10140 BUILT_IN_EH_COPY_VALUES,
10141 "__builtin_eh_copy_values", ECF_NOTHROW);
10143 /* Complex multiplication and division. These are handled as builtins
10144 rather than optabs because emit_library_call_value doesn't support
10145 complex. Further, we can do slightly better with folding these
10146 beasties if the real and complex parts of the arguments are separate. */
10148 int mode;
10150 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10152 char mode_name_buf[4], *q;
10153 const char *p;
10154 enum built_in_function mcode, dcode;
10155 tree type, inner_type;
10156 const char *prefix = "__";
10158 if (targetm.libfunc_gnu_prefix)
10159 prefix = "__gnu_";
10161 type = lang_hooks.types.type_for_mode ((enum machine_mode) mode, 0);
10162 if (type == NULL)
10163 continue;
10164 inner_type = TREE_TYPE (type);
10166 ftype = build_function_type_list (type, inner_type, inner_type,
10167 inner_type, inner_type, NULL_TREE);
10169 mcode = ((enum built_in_function)
10170 (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10171 dcode = ((enum built_in_function)
10172 (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10174 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10175 *q = TOLOWER (*p);
10176 *q = '\0';
10178 built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10179 NULL);
10180 local_define_builtin (built_in_names[mcode], ftype, mcode,
10181 built_in_names[mcode],
10182 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10184 built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10185 NULL);
10186 local_define_builtin (built_in_names[dcode], ftype, dcode,
10187 built_in_names[dcode],
10188 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10193 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
10194 better way.
10196 If we requested a pointer to a vector, build up the pointers that
10197 we stripped off while looking for the inner type. Similarly for
10198 return values from functions.
10200 The argument TYPE is the top of the chain, and BOTTOM is the
10201 new type which we will point to. */
10203 tree
10204 reconstruct_complex_type (tree type, tree bottom)
10206 tree inner, outer;
10208 if (TREE_CODE (type) == POINTER_TYPE)
10210 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10211 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10212 TYPE_REF_CAN_ALIAS_ALL (type));
10214 else if (TREE_CODE (type) == REFERENCE_TYPE)
10216 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10217 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10218 TYPE_REF_CAN_ALIAS_ALL (type));
10220 else if (TREE_CODE (type) == ARRAY_TYPE)
10222 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10223 outer = build_array_type (inner, TYPE_DOMAIN (type));
10225 else if (TREE_CODE (type) == FUNCTION_TYPE)
10227 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10228 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10230 else if (TREE_CODE (type) == METHOD_TYPE)
10232 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10233 /* The build_method_type_directly() routine prepends 'this' to argument list,
10234 so we must compensate by getting rid of it. */
10235 outer
10236 = build_method_type_directly
10237 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10238 inner,
10239 TREE_CHAIN (TYPE_ARG_TYPES (type)));
10241 else if (TREE_CODE (type) == OFFSET_TYPE)
10243 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10244 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10246 else
10247 return bottom;
10249 return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10250 TYPE_QUALS (type));
10253 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10254 the inner type. */
10255 tree
10256 build_vector_type_for_mode (tree innertype, enum machine_mode mode)
10258 int nunits;
10260 switch (GET_MODE_CLASS (mode))
10262 case MODE_VECTOR_INT:
10263 case MODE_VECTOR_FLOAT:
10264 case MODE_VECTOR_FRACT:
10265 case MODE_VECTOR_UFRACT:
10266 case MODE_VECTOR_ACCUM:
10267 case MODE_VECTOR_UACCUM:
10268 nunits = GET_MODE_NUNITS (mode);
10269 break;
10271 case MODE_INT:
10272 /* Check that there are no leftover bits. */
10273 gcc_assert (GET_MODE_BITSIZE (mode)
10274 % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
10276 nunits = GET_MODE_BITSIZE (mode)
10277 / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
10278 break;
10280 default:
10281 gcc_unreachable ();
10284 return make_vector_type (innertype, nunits, mode);
10287 /* Similarly, but takes the inner type and number of units, which must be
10288 a power of two. */
10290 tree
10291 build_vector_type (tree innertype, int nunits)
10293 return make_vector_type (innertype, nunits, VOIDmode);
10296 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set. */
10298 tree
10299 build_opaque_vector_type (tree innertype, int nunits)
10301 tree t = make_vector_type (innertype, nunits, VOIDmode);
10302 tree cand;
10303 /* We always build the non-opaque variant before the opaque one,
10304 so if it already exists, it is TYPE_NEXT_VARIANT of this one. */
10305 cand = TYPE_NEXT_VARIANT (t);
10306 if (cand
10307 && TYPE_VECTOR_OPAQUE (cand)
10308 && check_qualified_type (cand, t, TYPE_QUALS (t)))
10309 return cand;
10310 /* Othewise build a variant type and make sure to queue it after
10311 the non-opaque type. */
10312 cand = build_distinct_type_copy (t);
10313 TYPE_VECTOR_OPAQUE (cand) = true;
10314 TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
10315 TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
10316 TYPE_NEXT_VARIANT (t) = cand;
10317 TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
10318 return cand;
10322 /* Given an initializer INIT, return TRUE if INIT is zero or some
10323 aggregate of zeros. Otherwise return FALSE. */
10324 bool
10325 initializer_zerop (const_tree init)
10327 tree elt;
10329 STRIP_NOPS (init);
10331 switch (TREE_CODE (init))
10333 case INTEGER_CST:
10334 return integer_zerop (init);
10336 case REAL_CST:
10337 /* ??? Note that this is not correct for C4X float formats. There,
10338 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
10339 negative exponent. */
10340 return real_zerop (init)
10341 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
10343 case FIXED_CST:
10344 return fixed_zerop (init);
10346 case COMPLEX_CST:
10347 return integer_zerop (init)
10348 || (real_zerop (init)
10349 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
10350 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
10352 case VECTOR_CST:
10354 unsigned i;
10355 for (i = 0; i < VECTOR_CST_NELTS (init); ++i)
10356 if (!initializer_zerop (VECTOR_CST_ELT (init, i)))
10357 return false;
10358 return true;
10361 case CONSTRUCTOR:
10363 unsigned HOST_WIDE_INT idx;
10365 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
10366 if (!initializer_zerop (elt))
10367 return false;
10368 return true;
10371 case STRING_CST:
10373 int i;
10375 /* We need to loop through all elements to handle cases like
10376 "\0" and "\0foobar". */
10377 for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
10378 if (TREE_STRING_POINTER (init)[i] != '\0')
10379 return false;
10381 return true;
10384 default:
10385 return false;
10389 /* Check if vector VEC consists of all the equal elements and
10390 that the number of elements corresponds to the type of VEC.
10391 The function returns first element of the vector
10392 or NULL_TREE if the vector is not uniform. */
10393 tree
10394 uniform_vector_p (const_tree vec)
10396 tree first, t;
10397 unsigned i;
10399 if (vec == NULL_TREE)
10400 return NULL_TREE;
10402 gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
10404 if (TREE_CODE (vec) == VECTOR_CST)
10406 first = VECTOR_CST_ELT (vec, 0);
10407 for (i = 1; i < VECTOR_CST_NELTS (vec); ++i)
10408 if (!operand_equal_p (first, VECTOR_CST_ELT (vec, i), 0))
10409 return NULL_TREE;
10411 return first;
10414 else if (TREE_CODE (vec) == CONSTRUCTOR)
10416 first = error_mark_node;
10418 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
10420 if (i == 0)
10422 first = t;
10423 continue;
10425 if (!operand_equal_p (first, t, 0))
10426 return NULL_TREE;
10428 if (i != TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)))
10429 return NULL_TREE;
10431 return first;
10434 return NULL_TREE;
10437 /* Build an empty statement at location LOC. */
10439 tree
10440 build_empty_stmt (location_t loc)
10442 tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
10443 SET_EXPR_LOCATION (t, loc);
10444 return t;
10448 /* Build an OpenMP clause with code CODE. LOC is the location of the
10449 clause. */
10451 tree
10452 build_omp_clause (location_t loc, enum omp_clause_code code)
10454 tree t;
10455 int size, length;
10457 length = omp_clause_num_ops[code];
10458 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
10460 record_node_allocation_statistics (OMP_CLAUSE, size);
10462 t = ggc_alloc_tree_node (size);
10463 memset (t, 0, size);
10464 TREE_SET_CODE (t, OMP_CLAUSE);
10465 OMP_CLAUSE_SET_CODE (t, code);
10466 OMP_CLAUSE_LOCATION (t) = loc;
10468 return t;
10471 /* Build a tcc_vl_exp object with code CODE and room for LEN operands. LEN
10472 includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
10473 Except for the CODE and operand count field, other storage for the
10474 object is initialized to zeros. */
10476 tree
10477 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
10479 tree t;
10480 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
10482 gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
10483 gcc_assert (len >= 1);
10485 record_node_allocation_statistics (code, length);
10487 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
10489 TREE_SET_CODE (t, code);
10491 /* Can't use TREE_OPERAND to store the length because if checking is
10492 enabled, it will try to check the length before we store it. :-P */
10493 t->exp.operands[0] = build_int_cst (sizetype, len);
10495 return t;
10498 /* Helper function for build_call_* functions; build a CALL_EXPR with
10499 indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
10500 the argument slots. */
10502 static tree
10503 build_call_1 (tree return_type, tree fn, int nargs)
10505 tree t;
10507 t = build_vl_exp (CALL_EXPR, nargs + 3);
10508 TREE_TYPE (t) = return_type;
10509 CALL_EXPR_FN (t) = fn;
10510 CALL_EXPR_STATIC_CHAIN (t) = NULL;
10512 return t;
10515 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10516 FN and a null static chain slot. NARGS is the number of call arguments
10517 which are specified as "..." arguments. */
10519 tree
10520 build_call_nary (tree return_type, tree fn, int nargs, ...)
10522 tree ret;
10523 va_list args;
10524 va_start (args, nargs);
10525 ret = build_call_valist (return_type, fn, nargs, args);
10526 va_end (args);
10527 return ret;
10530 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10531 FN and a null static chain slot. NARGS is the number of call arguments
10532 which are specified as a va_list ARGS. */
10534 tree
10535 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
10537 tree t;
10538 int i;
10540 t = build_call_1 (return_type, fn, nargs);
10541 for (i = 0; i < nargs; i++)
10542 CALL_EXPR_ARG (t, i) = va_arg (args, tree);
10543 process_call_operands (t);
10544 return t;
10547 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10548 FN and a null static chain slot. NARGS is the number of call arguments
10549 which are specified as a tree array ARGS. */
10551 tree
10552 build_call_array_loc (location_t loc, tree return_type, tree fn,
10553 int nargs, const tree *args)
10555 tree t;
10556 int i;
10558 t = build_call_1 (return_type, fn, nargs);
10559 for (i = 0; i < nargs; i++)
10560 CALL_EXPR_ARG (t, i) = args[i];
10561 process_call_operands (t);
10562 SET_EXPR_LOCATION (t, loc);
10563 return t;
10566 /* Like build_call_array, but takes a vec. */
10568 tree
10569 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
10571 tree ret, t;
10572 unsigned int ix;
10574 ret = build_call_1 (return_type, fn, vec_safe_length (args));
10575 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
10576 CALL_EXPR_ARG (ret, ix) = t;
10577 process_call_operands (ret);
10578 return ret;
10582 /* Returns true if it is possible to prove that the index of
10583 an array access REF (an ARRAY_REF expression) falls into the
10584 array bounds. */
10586 bool
10587 in_array_bounds_p (tree ref)
10589 tree idx = TREE_OPERAND (ref, 1);
10590 tree min, max;
10592 if (TREE_CODE (idx) != INTEGER_CST)
10593 return false;
10595 min = array_ref_low_bound (ref);
10596 max = array_ref_up_bound (ref);
10597 if (!min
10598 || !max
10599 || TREE_CODE (min) != INTEGER_CST
10600 || TREE_CODE (max) != INTEGER_CST)
10601 return false;
10603 if (tree_int_cst_lt (idx, min)
10604 || tree_int_cst_lt (max, idx))
10605 return false;
10607 return true;
10610 /* Returns true if it is possible to prove that the range of
10611 an array access REF (an ARRAY_RANGE_REF expression) falls
10612 into the array bounds. */
10614 bool
10615 range_in_array_bounds_p (tree ref)
10617 tree domain_type = TYPE_DOMAIN (TREE_TYPE (ref));
10618 tree range_min, range_max, min, max;
10620 range_min = TYPE_MIN_VALUE (domain_type);
10621 range_max = TYPE_MAX_VALUE (domain_type);
10622 if (!range_min
10623 || !range_max
10624 || TREE_CODE (range_min) != INTEGER_CST
10625 || TREE_CODE (range_max) != INTEGER_CST)
10626 return false;
10628 min = array_ref_low_bound (ref);
10629 max = array_ref_up_bound (ref);
10630 if (!min
10631 || !max
10632 || TREE_CODE (min) != INTEGER_CST
10633 || TREE_CODE (max) != INTEGER_CST)
10634 return false;
10636 if (tree_int_cst_lt (range_min, min)
10637 || tree_int_cst_lt (max, range_max))
10638 return false;
10640 return true;
10643 /* Return true if T (assumed to be a DECL) must be assigned a memory
10644 location. */
10646 bool
10647 needs_to_live_in_memory (const_tree t)
10649 return (TREE_ADDRESSABLE (t)
10650 || is_global_var (t)
10651 || (TREE_CODE (t) == RESULT_DECL
10652 && !DECL_BY_REFERENCE (t)
10653 && aggregate_value_p (t, current_function_decl)));
10656 /* Return value of a constant X and sign-extend it. */
10658 HOST_WIDE_INT
10659 int_cst_value (const_tree x)
10661 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
10662 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
10664 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */
10665 gcc_assert (TREE_INT_CST_HIGH (x) == 0
10666 || TREE_INT_CST_HIGH (x) == -1);
10668 if (bits < HOST_BITS_PER_WIDE_INT)
10670 bool negative = ((val >> (bits - 1)) & 1) != 0;
10671 if (negative)
10672 val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
10673 else
10674 val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
10677 return val;
10680 /* Return value of a constant X and sign-extend it. */
10682 HOST_WIDEST_INT
10683 widest_int_cst_value (const_tree x)
10685 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
10686 unsigned HOST_WIDEST_INT val = TREE_INT_CST_LOW (x);
10688 #if HOST_BITS_PER_WIDEST_INT > HOST_BITS_PER_WIDE_INT
10689 gcc_assert (HOST_BITS_PER_WIDEST_INT >= HOST_BITS_PER_DOUBLE_INT);
10690 val |= (((unsigned HOST_WIDEST_INT) TREE_INT_CST_HIGH (x))
10691 << HOST_BITS_PER_WIDE_INT);
10692 #else
10693 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */
10694 gcc_assert (TREE_INT_CST_HIGH (x) == 0
10695 || TREE_INT_CST_HIGH (x) == -1);
10696 #endif
10698 if (bits < HOST_BITS_PER_WIDEST_INT)
10700 bool negative = ((val >> (bits - 1)) & 1) != 0;
10701 if (negative)
10702 val |= (~(unsigned HOST_WIDEST_INT) 0) << (bits - 1) << 1;
10703 else
10704 val &= ~((~(unsigned HOST_WIDEST_INT) 0) << (bits - 1) << 1);
10707 return val;
10710 /* If TYPE is an integral or pointer type, return an integer type with
10711 the same precision which is unsigned iff UNSIGNEDP is true, or itself
10712 if TYPE is already an integer type of signedness UNSIGNEDP. */
10714 tree
10715 signed_or_unsigned_type_for (int unsignedp, tree type)
10717 if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
10718 return type;
10720 if (TREE_CODE (type) == VECTOR_TYPE)
10722 tree inner = TREE_TYPE (type);
10723 tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
10724 if (!inner2)
10725 return NULL_TREE;
10726 if (inner == inner2)
10727 return type;
10728 return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
10731 if (!INTEGRAL_TYPE_P (type)
10732 && !POINTER_TYPE_P (type))
10733 return NULL_TREE;
10735 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
10738 /* If TYPE is an integral or pointer type, return an integer type with
10739 the same precision which is unsigned, or itself if TYPE is already an
10740 unsigned integer type. */
10742 tree
10743 unsigned_type_for (tree type)
10745 return signed_or_unsigned_type_for (1, type);
10748 /* If TYPE is an integral or pointer type, return an integer type with
10749 the same precision which is signed, or itself if TYPE is already a
10750 signed integer type. */
10752 tree
10753 signed_type_for (tree type)
10755 return signed_or_unsigned_type_for (0, type);
10758 /* If TYPE is a vector type, return a signed integer vector type with the
10759 same width and number of subparts. Otherwise return boolean_type_node. */
10761 tree
10762 truth_type_for (tree type)
10764 if (TREE_CODE (type) == VECTOR_TYPE)
10766 tree elem = lang_hooks.types.type_for_size
10767 (GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (type))), 0);
10768 return build_opaque_vector_type (elem, TYPE_VECTOR_SUBPARTS (type));
10770 else
10771 return boolean_type_node;
10774 /* Returns the largest value obtainable by casting something in INNER type to
10775 OUTER type. */
10777 tree
10778 upper_bound_in_type (tree outer, tree inner)
10780 double_int high;
10781 unsigned int det = 0;
10782 unsigned oprec = TYPE_PRECISION (outer);
10783 unsigned iprec = TYPE_PRECISION (inner);
10784 unsigned prec;
10786 /* Compute a unique number for every combination. */
10787 det |= (oprec > iprec) ? 4 : 0;
10788 det |= TYPE_UNSIGNED (outer) ? 2 : 0;
10789 det |= TYPE_UNSIGNED (inner) ? 1 : 0;
10791 /* Determine the exponent to use. */
10792 switch (det)
10794 case 0:
10795 case 1:
10796 /* oprec <= iprec, outer: signed, inner: don't care. */
10797 prec = oprec - 1;
10798 break;
10799 case 2:
10800 case 3:
10801 /* oprec <= iprec, outer: unsigned, inner: don't care. */
10802 prec = oprec;
10803 break;
10804 case 4:
10805 /* oprec > iprec, outer: signed, inner: signed. */
10806 prec = iprec - 1;
10807 break;
10808 case 5:
10809 /* oprec > iprec, outer: signed, inner: unsigned. */
10810 prec = iprec;
10811 break;
10812 case 6:
10813 /* oprec > iprec, outer: unsigned, inner: signed. */
10814 prec = oprec;
10815 break;
10816 case 7:
10817 /* oprec > iprec, outer: unsigned, inner: unsigned. */
10818 prec = iprec;
10819 break;
10820 default:
10821 gcc_unreachable ();
10824 /* Compute 2^^prec - 1. */
10825 if (prec <= HOST_BITS_PER_WIDE_INT)
10827 high.high = 0;
10828 high.low = ((~(unsigned HOST_WIDE_INT) 0)
10829 >> (HOST_BITS_PER_WIDE_INT - prec));
10831 else
10833 high.high = ((~(unsigned HOST_WIDE_INT) 0)
10834 >> (HOST_BITS_PER_DOUBLE_INT - prec));
10835 high.low = ~(unsigned HOST_WIDE_INT) 0;
10838 return double_int_to_tree (outer, high);
10841 /* Returns the smallest value obtainable by casting something in INNER type to
10842 OUTER type. */
10844 tree
10845 lower_bound_in_type (tree outer, tree inner)
10847 double_int low;
10848 unsigned oprec = TYPE_PRECISION (outer);
10849 unsigned iprec = TYPE_PRECISION (inner);
10851 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
10852 and obtain 0. */
10853 if (TYPE_UNSIGNED (outer)
10854 /* If we are widening something of an unsigned type, OUTER type
10855 contains all values of INNER type. In particular, both INNER
10856 and OUTER types have zero in common. */
10857 || (oprec > iprec && TYPE_UNSIGNED (inner)))
10858 low.low = low.high = 0;
10859 else
10861 /* If we are widening a signed type to another signed type, we
10862 want to obtain -2^^(iprec-1). If we are keeping the
10863 precision or narrowing to a signed type, we want to obtain
10864 -2^(oprec-1). */
10865 unsigned prec = oprec > iprec ? iprec : oprec;
10867 if (prec <= HOST_BITS_PER_WIDE_INT)
10869 low.high = ~(unsigned HOST_WIDE_INT) 0;
10870 low.low = (~(unsigned HOST_WIDE_INT) 0) << (prec - 1);
10872 else
10874 low.high = ((~(unsigned HOST_WIDE_INT) 0)
10875 << (prec - HOST_BITS_PER_WIDE_INT - 1));
10876 low.low = 0;
10880 return double_int_to_tree (outer, low);
10883 /* Return nonzero if two operands that are suitable for PHI nodes are
10884 necessarily equal. Specifically, both ARG0 and ARG1 must be either
10885 SSA_NAME or invariant. Note that this is strictly an optimization.
10886 That is, callers of this function can directly call operand_equal_p
10887 and get the same result, only slower. */
10890 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
10892 if (arg0 == arg1)
10893 return 1;
10894 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
10895 return 0;
10896 return operand_equal_p (arg0, arg1, 0);
10899 /* Returns number of zeros at the end of binary representation of X.
10901 ??? Use ffs if available? */
10903 tree
10904 num_ending_zeros (const_tree x)
10906 unsigned HOST_WIDE_INT fr, nfr;
10907 unsigned num, abits;
10908 tree type = TREE_TYPE (x);
10910 if (TREE_INT_CST_LOW (x) == 0)
10912 num = HOST_BITS_PER_WIDE_INT;
10913 fr = TREE_INT_CST_HIGH (x);
10915 else
10917 num = 0;
10918 fr = TREE_INT_CST_LOW (x);
10921 for (abits = HOST_BITS_PER_WIDE_INT / 2; abits; abits /= 2)
10923 nfr = fr >> abits;
10924 if (nfr << abits == fr)
10926 num += abits;
10927 fr = nfr;
10931 if (num > TYPE_PRECISION (type))
10932 num = TYPE_PRECISION (type);
10934 return build_int_cst_type (type, num);
10938 #define WALK_SUBTREE(NODE) \
10939 do \
10941 result = walk_tree_1 (&(NODE), func, data, pset, lh); \
10942 if (result) \
10943 return result; \
10945 while (0)
10947 /* This is a subroutine of walk_tree that walks field of TYPE that are to
10948 be walked whenever a type is seen in the tree. Rest of operands and return
10949 value are as for walk_tree. */
10951 static tree
10952 walk_type_fields (tree type, walk_tree_fn func, void *data,
10953 struct pointer_set_t *pset, walk_tree_lh lh)
10955 tree result = NULL_TREE;
10957 switch (TREE_CODE (type))
10959 case POINTER_TYPE:
10960 case REFERENCE_TYPE:
10961 /* We have to worry about mutually recursive pointers. These can't
10962 be written in C. They can in Ada. It's pathological, but
10963 there's an ACATS test (c38102a) that checks it. Deal with this
10964 by checking if we're pointing to another pointer, that one
10965 points to another pointer, that one does too, and we have no htab.
10966 If so, get a hash table. We check three levels deep to avoid
10967 the cost of the hash table if we don't need one. */
10968 if (POINTER_TYPE_P (TREE_TYPE (type))
10969 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
10970 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
10971 && !pset)
10973 result = walk_tree_without_duplicates (&TREE_TYPE (type),
10974 func, data);
10975 if (result)
10976 return result;
10978 break;
10981 /* ... fall through ... */
10983 case COMPLEX_TYPE:
10984 WALK_SUBTREE (TREE_TYPE (type));
10985 break;
10987 case METHOD_TYPE:
10988 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
10990 /* Fall through. */
10992 case FUNCTION_TYPE:
10993 WALK_SUBTREE (TREE_TYPE (type));
10995 tree arg;
10997 /* We never want to walk into default arguments. */
10998 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
10999 WALK_SUBTREE (TREE_VALUE (arg));
11001 break;
11003 case ARRAY_TYPE:
11004 /* Don't follow this nodes's type if a pointer for fear that
11005 we'll have infinite recursion. If we have a PSET, then we
11006 need not fear. */
11007 if (pset
11008 || (!POINTER_TYPE_P (TREE_TYPE (type))
11009 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
11010 WALK_SUBTREE (TREE_TYPE (type));
11011 WALK_SUBTREE (TYPE_DOMAIN (type));
11012 break;
11014 case OFFSET_TYPE:
11015 WALK_SUBTREE (TREE_TYPE (type));
11016 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
11017 break;
11019 default:
11020 break;
11023 return NULL_TREE;
11026 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is
11027 called with the DATA and the address of each sub-tree. If FUNC returns a
11028 non-NULL value, the traversal is stopped, and the value returned by FUNC
11029 is returned. If PSET is non-NULL it is used to record the nodes visited,
11030 and to avoid visiting a node more than once. */
11032 tree
11033 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
11034 struct pointer_set_t *pset, walk_tree_lh lh)
11036 enum tree_code code;
11037 int walk_subtrees;
11038 tree result;
11040 #define WALK_SUBTREE_TAIL(NODE) \
11041 do \
11043 tp = & (NODE); \
11044 goto tail_recurse; \
11046 while (0)
11048 tail_recurse:
11049 /* Skip empty subtrees. */
11050 if (!*tp)
11051 return NULL_TREE;
11053 /* Don't walk the same tree twice, if the user has requested
11054 that we avoid doing so. */
11055 if (pset && pointer_set_insert (pset, *tp))
11056 return NULL_TREE;
11058 /* Call the function. */
11059 walk_subtrees = 1;
11060 result = (*func) (tp, &walk_subtrees, data);
11062 /* If we found something, return it. */
11063 if (result)
11064 return result;
11066 code = TREE_CODE (*tp);
11068 /* Even if we didn't, FUNC may have decided that there was nothing
11069 interesting below this point in the tree. */
11070 if (!walk_subtrees)
11072 /* But we still need to check our siblings. */
11073 if (code == TREE_LIST)
11074 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11075 else if (code == OMP_CLAUSE)
11076 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11077 else
11078 return NULL_TREE;
11081 if (lh)
11083 result = (*lh) (tp, &walk_subtrees, func, data, pset);
11084 if (result || !walk_subtrees)
11085 return result;
11088 switch (code)
11090 case ERROR_MARK:
11091 case IDENTIFIER_NODE:
11092 case INTEGER_CST:
11093 case REAL_CST:
11094 case FIXED_CST:
11095 case VECTOR_CST:
11096 case STRING_CST:
11097 case BLOCK:
11098 case PLACEHOLDER_EXPR:
11099 case SSA_NAME:
11100 case FIELD_DECL:
11101 case RESULT_DECL:
11102 /* None of these have subtrees other than those already walked
11103 above. */
11104 break;
11106 case TREE_LIST:
11107 WALK_SUBTREE (TREE_VALUE (*tp));
11108 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11109 break;
11111 case TREE_VEC:
11113 int len = TREE_VEC_LENGTH (*tp);
11115 if (len == 0)
11116 break;
11118 /* Walk all elements but the first. */
11119 while (--len)
11120 WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
11122 /* Now walk the first one as a tail call. */
11123 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
11126 case COMPLEX_CST:
11127 WALK_SUBTREE (TREE_REALPART (*tp));
11128 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
11130 case CONSTRUCTOR:
11132 unsigned HOST_WIDE_INT idx;
11133 constructor_elt *ce;
11135 for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
11136 idx++)
11137 WALK_SUBTREE (ce->value);
11139 break;
11141 case SAVE_EXPR:
11142 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
11144 case BIND_EXPR:
11146 tree decl;
11147 for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
11149 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk
11150 into declarations that are just mentioned, rather than
11151 declared; they don't really belong to this part of the tree.
11152 And, we can see cycles: the initializer for a declaration
11153 can refer to the declaration itself. */
11154 WALK_SUBTREE (DECL_INITIAL (decl));
11155 WALK_SUBTREE (DECL_SIZE (decl));
11156 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
11158 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
11161 case STATEMENT_LIST:
11163 tree_stmt_iterator i;
11164 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
11165 WALK_SUBTREE (*tsi_stmt_ptr (i));
11167 break;
11169 case OMP_CLAUSE:
11170 switch (OMP_CLAUSE_CODE (*tp))
11172 case OMP_CLAUSE_PRIVATE:
11173 case OMP_CLAUSE_SHARED:
11174 case OMP_CLAUSE_FIRSTPRIVATE:
11175 case OMP_CLAUSE_COPYIN:
11176 case OMP_CLAUSE_COPYPRIVATE:
11177 case OMP_CLAUSE_FINAL:
11178 case OMP_CLAUSE_IF:
11179 case OMP_CLAUSE_NUM_THREADS:
11180 case OMP_CLAUSE_SCHEDULE:
11181 case OMP_CLAUSE_UNIFORM:
11182 case OMP_CLAUSE_DEPEND:
11183 case OMP_CLAUSE_NUM_TEAMS:
11184 case OMP_CLAUSE_THREAD_LIMIT:
11185 case OMP_CLAUSE_DEVICE:
11186 case OMP_CLAUSE_DIST_SCHEDULE:
11187 case OMP_CLAUSE_SAFELEN:
11188 case OMP_CLAUSE_SIMDLEN:
11189 case OMP_CLAUSE__LOOPTEMP_:
11190 case OMP_CLAUSE__SIMDUID_:
11191 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
11192 /* FALLTHRU */
11194 case OMP_CLAUSE_NOWAIT:
11195 case OMP_CLAUSE_ORDERED:
11196 case OMP_CLAUSE_DEFAULT:
11197 case OMP_CLAUSE_UNTIED:
11198 case OMP_CLAUSE_MERGEABLE:
11199 case OMP_CLAUSE_PROC_BIND:
11200 case OMP_CLAUSE_INBRANCH:
11201 case OMP_CLAUSE_NOTINBRANCH:
11202 case OMP_CLAUSE_FOR:
11203 case OMP_CLAUSE_PARALLEL:
11204 case OMP_CLAUSE_SECTIONS:
11205 case OMP_CLAUSE_TASKGROUP:
11206 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11208 case OMP_CLAUSE_LASTPRIVATE:
11209 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11210 WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
11211 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11213 case OMP_CLAUSE_COLLAPSE:
11215 int i;
11216 for (i = 0; i < 3; i++)
11217 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11218 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11221 case OMP_CLAUSE_ALIGNED:
11222 case OMP_CLAUSE_LINEAR:
11223 case OMP_CLAUSE_FROM:
11224 case OMP_CLAUSE_TO:
11225 case OMP_CLAUSE_MAP:
11226 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11227 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11228 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11230 case OMP_CLAUSE_REDUCTION:
11232 int i;
11233 for (i = 0; i < 4; i++)
11234 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11235 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11238 default:
11239 gcc_unreachable ();
11241 break;
11243 case TARGET_EXPR:
11245 int i, len;
11247 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
11248 But, we only want to walk once. */
11249 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
11250 for (i = 0; i < len; ++i)
11251 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11252 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
11255 case DECL_EXPR:
11256 /* If this is a TYPE_DECL, walk into the fields of the type that it's
11257 defining. We only want to walk into these fields of a type in this
11258 case and not in the general case of a mere reference to the type.
11260 The criterion is as follows: if the field can be an expression, it
11261 must be walked only here. This should be in keeping with the fields
11262 that are directly gimplified in gimplify_type_sizes in order for the
11263 mark/copy-if-shared/unmark machinery of the gimplifier to work with
11264 variable-sized types.
11266 Note that DECLs get walked as part of processing the BIND_EXPR. */
11267 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
11269 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
11270 if (TREE_CODE (*type_p) == ERROR_MARK)
11271 return NULL_TREE;
11273 /* Call the function for the type. See if it returns anything or
11274 doesn't want us to continue. If we are to continue, walk both
11275 the normal fields and those for the declaration case. */
11276 result = (*func) (type_p, &walk_subtrees, data);
11277 if (result || !walk_subtrees)
11278 return result;
11280 /* But do not walk a pointed-to type since it may itself need to
11281 be walked in the declaration case if it isn't anonymous. */
11282 if (!POINTER_TYPE_P (*type_p))
11284 result = walk_type_fields (*type_p, func, data, pset, lh);
11285 if (result)
11286 return result;
11289 /* If this is a record type, also walk the fields. */
11290 if (RECORD_OR_UNION_TYPE_P (*type_p))
11292 tree field;
11294 for (field = TYPE_FIELDS (*type_p); field;
11295 field = DECL_CHAIN (field))
11297 /* We'd like to look at the type of the field, but we can
11298 easily get infinite recursion. So assume it's pointed
11299 to elsewhere in the tree. Also, ignore things that
11300 aren't fields. */
11301 if (TREE_CODE (field) != FIELD_DECL)
11302 continue;
11304 WALK_SUBTREE (DECL_FIELD_OFFSET (field));
11305 WALK_SUBTREE (DECL_SIZE (field));
11306 WALK_SUBTREE (DECL_SIZE_UNIT (field));
11307 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
11308 WALK_SUBTREE (DECL_QUALIFIER (field));
11312 /* Same for scalar types. */
11313 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
11314 || TREE_CODE (*type_p) == ENUMERAL_TYPE
11315 || TREE_CODE (*type_p) == INTEGER_TYPE
11316 || TREE_CODE (*type_p) == FIXED_POINT_TYPE
11317 || TREE_CODE (*type_p) == REAL_TYPE)
11319 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
11320 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
11323 WALK_SUBTREE (TYPE_SIZE (*type_p));
11324 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
11326 /* FALLTHRU */
11328 default:
11329 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
11331 int i, len;
11333 /* Walk over all the sub-trees of this operand. */
11334 len = TREE_OPERAND_LENGTH (*tp);
11336 /* Go through the subtrees. We need to do this in forward order so
11337 that the scope of a FOR_EXPR is handled properly. */
11338 if (len)
11340 for (i = 0; i < len - 1; ++i)
11341 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11342 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
11345 /* If this is a type, walk the needed fields in the type. */
11346 else if (TYPE_P (*tp))
11347 return walk_type_fields (*tp, func, data, pset, lh);
11348 break;
11351 /* We didn't find what we were looking for. */
11352 return NULL_TREE;
11354 #undef WALK_SUBTREE_TAIL
11356 #undef WALK_SUBTREE
11358 /* Like walk_tree, but does not walk duplicate nodes more than once. */
11360 tree
11361 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
11362 walk_tree_lh lh)
11364 tree result;
11365 struct pointer_set_t *pset;
11367 pset = pointer_set_create ();
11368 result = walk_tree_1 (tp, func, data, pset, lh);
11369 pointer_set_destroy (pset);
11370 return result;
11374 tree
11375 tree_block (tree t)
11377 char const c = TREE_CODE_CLASS (TREE_CODE (t));
11379 if (IS_EXPR_CODE_CLASS (c))
11380 return LOCATION_BLOCK (t->exp.locus);
11381 gcc_unreachable ();
11382 return NULL;
11385 void
11386 tree_set_block (tree t, tree b)
11388 char const c = TREE_CODE_CLASS (TREE_CODE (t));
11390 if (IS_EXPR_CODE_CLASS (c))
11392 if (b)
11393 t->exp.locus = COMBINE_LOCATION_DATA (line_table, t->exp.locus, b);
11394 else
11395 t->exp.locus = LOCATION_LOCUS (t->exp.locus);
11397 else
11398 gcc_unreachable ();
11401 /* Create a nameless artificial label and put it in the current
11402 function context. The label has a location of LOC. Returns the
11403 newly created label. */
11405 tree
11406 create_artificial_label (location_t loc)
11408 tree lab = build_decl (loc,
11409 LABEL_DECL, NULL_TREE, void_type_node);
11411 DECL_ARTIFICIAL (lab) = 1;
11412 DECL_IGNORED_P (lab) = 1;
11413 DECL_CONTEXT (lab) = current_function_decl;
11414 return lab;
11417 /* Given a tree, try to return a useful variable name that we can use
11418 to prefix a temporary that is being assigned the value of the tree.
11419 I.E. given <temp> = &A, return A. */
11421 const char *
11422 get_name (tree t)
11424 tree stripped_decl;
11426 stripped_decl = t;
11427 STRIP_NOPS (stripped_decl);
11428 if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
11429 return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
11430 else if (TREE_CODE (stripped_decl) == SSA_NAME)
11432 tree name = SSA_NAME_IDENTIFIER (stripped_decl);
11433 if (!name)
11434 return NULL;
11435 return IDENTIFIER_POINTER (name);
11437 else
11439 switch (TREE_CODE (stripped_decl))
11441 case ADDR_EXPR:
11442 return get_name (TREE_OPERAND (stripped_decl, 0));
11443 default:
11444 return NULL;
11449 /* Return true if TYPE has a variable argument list. */
11451 bool
11452 stdarg_p (const_tree fntype)
11454 function_args_iterator args_iter;
11455 tree n = NULL_TREE, t;
11457 if (!fntype)
11458 return false;
11460 FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
11462 n = t;
11465 return n != NULL_TREE && n != void_type_node;
11468 /* Return true if TYPE has a prototype. */
11470 bool
11471 prototype_p (tree fntype)
11473 tree t;
11475 gcc_assert (fntype != NULL_TREE);
11477 t = TYPE_ARG_TYPES (fntype);
11478 return (t != NULL_TREE);
11481 /* If BLOCK is inlined from an __attribute__((__artificial__))
11482 routine, return pointer to location from where it has been
11483 called. */
11484 location_t *
11485 block_nonartificial_location (tree block)
11487 location_t *ret = NULL;
11489 while (block && TREE_CODE (block) == BLOCK
11490 && BLOCK_ABSTRACT_ORIGIN (block))
11492 tree ao = BLOCK_ABSTRACT_ORIGIN (block);
11494 while (TREE_CODE (ao) == BLOCK
11495 && BLOCK_ABSTRACT_ORIGIN (ao)
11496 && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
11497 ao = BLOCK_ABSTRACT_ORIGIN (ao);
11499 if (TREE_CODE (ao) == FUNCTION_DECL)
11501 /* If AO is an artificial inline, point RET to the
11502 call site locus at which it has been inlined and continue
11503 the loop, in case AO's caller is also an artificial
11504 inline. */
11505 if (DECL_DECLARED_INLINE_P (ao)
11506 && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
11507 ret = &BLOCK_SOURCE_LOCATION (block);
11508 else
11509 break;
11511 else if (TREE_CODE (ao) != BLOCK)
11512 break;
11514 block = BLOCK_SUPERCONTEXT (block);
11516 return ret;
11520 /* If EXP is inlined from an __attribute__((__artificial__))
11521 function, return the location of the original call expression. */
11523 location_t
11524 tree_nonartificial_location (tree exp)
11526 location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
11528 if (loc)
11529 return *loc;
11530 else
11531 return EXPR_LOCATION (exp);
11535 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
11536 nodes. */
11538 /* Return the hash code code X, an OPTIMIZATION_NODE or TARGET_OPTION code. */
11540 static hashval_t
11541 cl_option_hash_hash (const void *x)
11543 const_tree const t = (const_tree) x;
11544 const char *p;
11545 size_t i;
11546 size_t len = 0;
11547 hashval_t hash = 0;
11549 if (TREE_CODE (t) == OPTIMIZATION_NODE)
11551 p = (const char *)TREE_OPTIMIZATION (t);
11552 len = sizeof (struct cl_optimization);
11555 else if (TREE_CODE (t) == TARGET_OPTION_NODE)
11557 p = (const char *)TREE_TARGET_OPTION (t);
11558 len = sizeof (struct cl_target_option);
11561 else
11562 gcc_unreachable ();
11564 /* assume most opt flags are just 0/1, some are 2-3, and a few might be
11565 something else. */
11566 for (i = 0; i < len; i++)
11567 if (p[i])
11568 hash = (hash << 4) ^ ((i << 2) | p[i]);
11570 return hash;
11573 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
11574 TARGET_OPTION tree node) is the same as that given by *Y, which is the
11575 same. */
11577 static int
11578 cl_option_hash_eq (const void *x, const void *y)
11580 const_tree const xt = (const_tree) x;
11581 const_tree const yt = (const_tree) y;
11582 const char *xp;
11583 const char *yp;
11584 size_t len;
11586 if (TREE_CODE (xt) != TREE_CODE (yt))
11587 return 0;
11589 if (TREE_CODE (xt) == OPTIMIZATION_NODE)
11591 xp = (const char *)TREE_OPTIMIZATION (xt);
11592 yp = (const char *)TREE_OPTIMIZATION (yt);
11593 len = sizeof (struct cl_optimization);
11596 else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
11598 xp = (const char *)TREE_TARGET_OPTION (xt);
11599 yp = (const char *)TREE_TARGET_OPTION (yt);
11600 len = sizeof (struct cl_target_option);
11603 else
11604 gcc_unreachable ();
11606 return (memcmp (xp, yp, len) == 0);
11609 /* Build an OPTIMIZATION_NODE based on the options in OPTS. */
11611 tree
11612 build_optimization_node (struct gcc_options *opts)
11614 tree t;
11615 void **slot;
11617 /* Use the cache of optimization nodes. */
11619 cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
11620 opts);
11622 slot = htab_find_slot (cl_option_hash_table, cl_optimization_node, INSERT);
11623 t = (tree) *slot;
11624 if (!t)
11626 /* Insert this one into the hash table. */
11627 t = cl_optimization_node;
11628 *slot = t;
11630 /* Make a new node for next time round. */
11631 cl_optimization_node = make_node (OPTIMIZATION_NODE);
11634 return t;
11637 /* Build a TARGET_OPTION_NODE based on the options in OPTS. */
11639 tree
11640 build_target_option_node (struct gcc_options *opts)
11642 tree t;
11643 void **slot;
11645 /* Use the cache of optimization nodes. */
11647 cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
11648 opts);
11650 slot = htab_find_slot (cl_option_hash_table, cl_target_option_node, INSERT);
11651 t = (tree) *slot;
11652 if (!t)
11654 /* Insert this one into the hash table. */
11655 t = cl_target_option_node;
11656 *slot = t;
11658 /* Make a new node for next time round. */
11659 cl_target_option_node = make_node (TARGET_OPTION_NODE);
11662 return t;
11665 /* Determine the "ultimate origin" of a block. The block may be an inlined
11666 instance of an inlined instance of a block which is local to an inline
11667 function, so we have to trace all of the way back through the origin chain
11668 to find out what sort of node actually served as the original seed for the
11669 given block. */
11671 tree
11672 block_ultimate_origin (const_tree block)
11674 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
11676 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
11677 nodes in the function to point to themselves; ignore that if
11678 we're trying to output the abstract instance of this function. */
11679 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
11680 return NULL_TREE;
11682 if (immediate_origin == NULL_TREE)
11683 return NULL_TREE;
11684 else
11686 tree ret_val;
11687 tree lookahead = immediate_origin;
11691 ret_val = lookahead;
11692 lookahead = (TREE_CODE (ret_val) == BLOCK
11693 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
11695 while (lookahead != NULL && lookahead != ret_val);
11697 /* The block's abstract origin chain may not be the *ultimate* origin of
11698 the block. It could lead to a DECL that has an abstract origin set.
11699 If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
11700 will give us if it has one). Note that DECL's abstract origins are
11701 supposed to be the most distant ancestor (or so decl_ultimate_origin
11702 claims), so we don't need to loop following the DECL origins. */
11703 if (DECL_P (ret_val))
11704 return DECL_ORIGIN (ret_val);
11706 return ret_val;
11710 /* Return true if T1 and T2 are equivalent lists. */
11712 bool
11713 list_equal_p (const_tree t1, const_tree t2)
11715 for (; t1 && t2; t1 = TREE_CHAIN (t1) , t2 = TREE_CHAIN (t2))
11716 if (TREE_VALUE (t1) != TREE_VALUE (t2))
11717 return false;
11718 return !t1 && !t2;
11721 /* Return true iff conversion in EXP generates no instruction. Mark
11722 it inline so that we fully inline into the stripping functions even
11723 though we have two uses of this function. */
11725 static inline bool
11726 tree_nop_conversion (const_tree exp)
11728 tree outer_type, inner_type;
11730 if (!CONVERT_EXPR_P (exp)
11731 && TREE_CODE (exp) != NON_LVALUE_EXPR)
11732 return false;
11733 if (TREE_OPERAND (exp, 0) == error_mark_node)
11734 return false;
11736 outer_type = TREE_TYPE (exp);
11737 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
11739 if (!inner_type)
11740 return false;
11742 /* Use precision rather then machine mode when we can, which gives
11743 the correct answer even for submode (bit-field) types. */
11744 if ((INTEGRAL_TYPE_P (outer_type)
11745 || POINTER_TYPE_P (outer_type)
11746 || TREE_CODE (outer_type) == OFFSET_TYPE)
11747 && (INTEGRAL_TYPE_P (inner_type)
11748 || POINTER_TYPE_P (inner_type)
11749 || TREE_CODE (inner_type) == OFFSET_TYPE))
11750 return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
11752 /* Otherwise fall back on comparing machine modes (e.g. for
11753 aggregate types, floats). */
11754 return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
11757 /* Return true iff conversion in EXP generates no instruction. Don't
11758 consider conversions changing the signedness. */
11760 static bool
11761 tree_sign_nop_conversion (const_tree exp)
11763 tree outer_type, inner_type;
11765 if (!tree_nop_conversion (exp))
11766 return false;
11768 outer_type = TREE_TYPE (exp);
11769 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
11771 return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
11772 && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
11775 /* Strip conversions from EXP according to tree_nop_conversion and
11776 return the resulting expression. */
11778 tree
11779 tree_strip_nop_conversions (tree exp)
11781 while (tree_nop_conversion (exp))
11782 exp = TREE_OPERAND (exp, 0);
11783 return exp;
11786 /* Strip conversions from EXP according to tree_sign_nop_conversion
11787 and return the resulting expression. */
11789 tree
11790 tree_strip_sign_nop_conversions (tree exp)
11792 while (tree_sign_nop_conversion (exp))
11793 exp = TREE_OPERAND (exp, 0);
11794 return exp;
11797 /* Avoid any floating point extensions from EXP. */
11798 tree
11799 strip_float_extensions (tree exp)
11801 tree sub, expt, subt;
11803 /* For floating point constant look up the narrowest type that can hold
11804 it properly and handle it like (type)(narrowest_type)constant.
11805 This way we can optimize for instance a=a*2.0 where "a" is float
11806 but 2.0 is double constant. */
11807 if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
11809 REAL_VALUE_TYPE orig;
11810 tree type = NULL;
11812 orig = TREE_REAL_CST (exp);
11813 if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
11814 && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
11815 type = float_type_node;
11816 else if (TYPE_PRECISION (TREE_TYPE (exp))
11817 > TYPE_PRECISION (double_type_node)
11818 && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
11819 type = double_type_node;
11820 if (type)
11821 return build_real (type, real_value_truncate (TYPE_MODE (type), orig));
11824 if (!CONVERT_EXPR_P (exp))
11825 return exp;
11827 sub = TREE_OPERAND (exp, 0);
11828 subt = TREE_TYPE (sub);
11829 expt = TREE_TYPE (exp);
11831 if (!FLOAT_TYPE_P (subt))
11832 return exp;
11834 if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
11835 return exp;
11837 if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
11838 return exp;
11840 return strip_float_extensions (sub);
11843 /* Strip out all handled components that produce invariant
11844 offsets. */
11846 const_tree
11847 strip_invariant_refs (const_tree op)
11849 while (handled_component_p (op))
11851 switch (TREE_CODE (op))
11853 case ARRAY_REF:
11854 case ARRAY_RANGE_REF:
11855 if (!is_gimple_constant (TREE_OPERAND (op, 1))
11856 || TREE_OPERAND (op, 2) != NULL_TREE
11857 || TREE_OPERAND (op, 3) != NULL_TREE)
11858 return NULL;
11859 break;
11861 case COMPONENT_REF:
11862 if (TREE_OPERAND (op, 2) != NULL_TREE)
11863 return NULL;
11864 break;
11866 default:;
11868 op = TREE_OPERAND (op, 0);
11871 return op;
11874 static GTY(()) tree gcc_eh_personality_decl;
11876 /* Return the GCC personality function decl. */
11878 tree
11879 lhd_gcc_personality (void)
11881 if (!gcc_eh_personality_decl)
11882 gcc_eh_personality_decl = build_personality_function ("gcc");
11883 return gcc_eh_personality_decl;
11886 /* For languages with One Definition Rule, work out if
11887 trees are actually the same even if the tree representation
11888 differs. This handles only decls appearing in TYPE_NAME
11889 and TYPE_CONTEXT. That is NAMESPACE_DECL, TYPE_DECL,
11890 RECORD_TYPE and IDENTIFIER_NODE. */
11892 static bool
11893 same_for_odr (tree t1, tree t2)
11895 if (t1 == t2)
11896 return true;
11897 if (!t1 || !t2)
11898 return false;
11899 /* C and C++ FEs differ by using IDENTIFIER_NODE and TYPE_DECL. */
11900 if (TREE_CODE (t1) == IDENTIFIER_NODE
11901 && TREE_CODE (t2) == TYPE_DECL
11902 && DECL_FILE_SCOPE_P (t1))
11904 t2 = DECL_NAME (t2);
11905 gcc_assert (TREE_CODE (t2) == IDENTIFIER_NODE);
11907 if (TREE_CODE (t2) == IDENTIFIER_NODE
11908 && TREE_CODE (t1) == TYPE_DECL
11909 && DECL_FILE_SCOPE_P (t2))
11911 t1 = DECL_NAME (t1);
11912 gcc_assert (TREE_CODE (t1) == IDENTIFIER_NODE);
11914 if (TREE_CODE (t1) != TREE_CODE (t2))
11915 return false;
11916 if (TYPE_P (t1))
11917 return types_same_for_odr (t1, t2);
11918 if (DECL_P (t1))
11919 return decls_same_for_odr (t1, t2);
11920 return false;
11923 /* For languages with One Definition Rule, work out if
11924 decls are actually the same even if the tree representation
11925 differs. This handles only decls appearing in TYPE_NAME
11926 and TYPE_CONTEXT. That is NAMESPACE_DECL, TYPE_DECL,
11927 RECORD_TYPE and IDENTIFIER_NODE. */
11929 static bool
11930 decls_same_for_odr (tree decl1, tree decl2)
11932 if (decl1 && TREE_CODE (decl1) == TYPE_DECL
11933 && DECL_ORIGINAL_TYPE (decl1))
11934 decl1 = DECL_ORIGINAL_TYPE (decl1);
11935 if (decl2 && TREE_CODE (decl2) == TYPE_DECL
11936 && DECL_ORIGINAL_TYPE (decl2))
11937 decl2 = DECL_ORIGINAL_TYPE (decl2);
11938 if (decl1 == decl2)
11939 return true;
11940 if (!decl1 || !decl2)
11941 return false;
11942 gcc_checking_assert (DECL_P (decl1) && DECL_P (decl2));
11943 if (TREE_CODE (decl1) != TREE_CODE (decl2))
11944 return false;
11945 if (TREE_CODE (decl1) == TRANSLATION_UNIT_DECL)
11946 return true;
11947 if (TREE_CODE (decl1) != NAMESPACE_DECL
11948 && TREE_CODE (decl1) != TYPE_DECL)
11949 return false;
11950 if (!DECL_NAME (decl1))
11951 return false;
11952 gcc_checking_assert (TREE_CODE (DECL_NAME (decl1)) == IDENTIFIER_NODE);
11953 gcc_checking_assert (!DECL_NAME (decl2)
11954 || TREE_CODE (DECL_NAME (decl2)) == IDENTIFIER_NODE);
11955 if (DECL_NAME (decl1) != DECL_NAME (decl2))
11956 return false;
11957 return same_for_odr (DECL_CONTEXT (decl1),
11958 DECL_CONTEXT (decl2));
11961 /* For languages with One Definition Rule, work out if
11962 types are same even if the tree representation differs.
11963 This is non-trivial for LTO where minnor differences in
11964 the type representation may have prevented type merging
11965 to merge two copies of otherwise equivalent type. */
11967 bool
11968 types_same_for_odr (tree type1, tree type2)
11970 gcc_checking_assert (TYPE_P (type1) && TYPE_P (type2));
11971 type1 = TYPE_MAIN_VARIANT (type1);
11972 type2 = TYPE_MAIN_VARIANT (type2);
11973 if (type1 == type2)
11974 return true;
11976 #ifndef ENABLE_CHECKING
11977 if (!in_lto_p)
11978 return false;
11979 #endif
11981 /* Check for anonymous namespaces. Those have !TREE_PUBLIC
11982 on the corresponding TYPE_STUB_DECL. */
11983 if (type_in_anonymous_namespace_p (type1)
11984 || type_in_anonymous_namespace_p (type2))
11985 return false;
11986 /* When assembler name of virtual table is available, it is
11987 easy to compare types for equivalence. */
11988 if (TYPE_BINFO (type1) && TYPE_BINFO (type2)
11989 && BINFO_VTABLE (TYPE_BINFO (type1))
11990 && BINFO_VTABLE (TYPE_BINFO (type2)))
11992 tree v1 = BINFO_VTABLE (TYPE_BINFO (type1));
11993 tree v2 = BINFO_VTABLE (TYPE_BINFO (type2));
11995 if (TREE_CODE (v1) == POINTER_PLUS_EXPR)
11997 if (TREE_CODE (v2) != POINTER_PLUS_EXPR
11998 || !operand_equal_p (TREE_OPERAND (v1, 1),
11999 TREE_OPERAND (v2, 1), 0))
12000 return false;
12001 v1 = TREE_OPERAND (TREE_OPERAND (v1, 0), 0);
12002 v2 = TREE_OPERAND (TREE_OPERAND (v2, 0), 0);
12004 v1 = DECL_ASSEMBLER_NAME (v1);
12005 v2 = DECL_ASSEMBLER_NAME (v2);
12006 return (v1 == v2);
12009 /* FIXME: the code comparing type names consider all instantiations of the
12010 same template to have same name. This is because we have no access
12011 to template parameters. For types with no virtual method tables
12012 we thus can return false positives. At the moment we do not need
12013 to compare types in other scenarios than devirtualization. */
12015 /* If types are not structuraly same, do not bother to contnue.
12016 Match in the remainder of code would mean ODR violation. */
12017 if (!types_compatible_p (type1, type2))
12018 return false;
12019 if (!TYPE_NAME (type1))
12020 return false;
12021 if (!decls_same_for_odr (TYPE_NAME (type1), TYPE_NAME (type2)))
12022 return false;
12023 if (!same_for_odr (TYPE_CONTEXT (type1), TYPE_CONTEXT (type2)))
12024 return false;
12025 /* When not in LTO the MAIN_VARIANT check should be the same. */
12026 gcc_assert (in_lto_p);
12028 return true;
12031 /* TARGET is a call target of GIMPLE call statement
12032 (obtained by gimple_call_fn). Return true if it is
12033 OBJ_TYPE_REF representing an virtual call of C++ method.
12034 (As opposed to OBJ_TYPE_REF representing objc calls
12035 through a cast where middle-end devirtualization machinery
12036 can't apply.) */
12038 bool
12039 virtual_method_call_p (tree target)
12041 if (TREE_CODE (target) != OBJ_TYPE_REF)
12042 return false;
12043 target = TREE_TYPE (target);
12044 gcc_checking_assert (TREE_CODE (target) == POINTER_TYPE);
12045 target = TREE_TYPE (target);
12046 if (TREE_CODE (target) == FUNCTION_TYPE)
12047 return false;
12048 gcc_checking_assert (TREE_CODE (target) == METHOD_TYPE);
12049 return true;
12052 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to. */
12054 tree
12055 obj_type_ref_class (tree ref)
12057 gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF);
12058 ref = TREE_TYPE (ref);
12059 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12060 ref = TREE_TYPE (ref);
12061 /* We look for type THIS points to. ObjC also builds
12062 OBJ_TYPE_REF with non-method calls, Their first parameter
12063 ID however also corresponds to class type. */
12064 gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
12065 || TREE_CODE (ref) == FUNCTION_TYPE);
12066 ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
12067 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12068 return TREE_TYPE (ref);
12071 /* Return true if T is in anonymous namespace. */
12073 bool
12074 type_in_anonymous_namespace_p (tree t)
12076 return (TYPE_STUB_DECL (t) && !TREE_PUBLIC (TYPE_STUB_DECL (t)));
12079 /* Try to find a base info of BINFO that would have its field decl at offset
12080 OFFSET within the BINFO type and which is of EXPECTED_TYPE. If it can be
12081 found, return, otherwise return NULL_TREE. */
12083 tree
12084 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
12086 tree type = BINFO_TYPE (binfo);
12088 while (true)
12090 HOST_WIDE_INT pos, size;
12091 tree fld;
12092 int i;
12094 if (types_same_for_odr (type, expected_type))
12095 return binfo;
12096 if (offset < 0)
12097 return NULL_TREE;
12099 for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12101 if (TREE_CODE (fld) != FIELD_DECL)
12102 continue;
12104 pos = int_bit_position (fld);
12105 size = tree_low_cst (DECL_SIZE (fld), 1);
12106 if (pos <= offset && (pos + size) > offset)
12107 break;
12109 if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12110 return NULL_TREE;
12112 if (!DECL_ARTIFICIAL (fld))
12114 binfo = TYPE_BINFO (TREE_TYPE (fld));
12115 if (!binfo)
12116 return NULL_TREE;
12118 /* Offset 0 indicates the primary base, whose vtable contents are
12119 represented in the binfo for the derived class. */
12120 else if (offset != 0)
12122 tree base_binfo, found_binfo = NULL_TREE;
12123 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12124 if (types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12126 found_binfo = base_binfo;
12127 break;
12129 if (!found_binfo)
12130 return NULL_TREE;
12131 binfo = found_binfo;
12134 type = TREE_TYPE (fld);
12135 offset -= pos;
12139 /* Returns true if X is a typedef decl. */
12141 bool
12142 is_typedef_decl (tree x)
12144 return (x && TREE_CODE (x) == TYPE_DECL
12145 && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12148 /* Returns true iff TYPE is a type variant created for a typedef. */
12150 bool
12151 typedef_variant_p (tree type)
12153 return is_typedef_decl (TYPE_NAME (type));
12156 /* Warn about a use of an identifier which was marked deprecated. */
12157 void
12158 warn_deprecated_use (tree node, tree attr)
12160 const char *msg;
12162 if (node == 0 || !warn_deprecated_decl)
12163 return;
12165 if (!attr)
12167 if (DECL_P (node))
12168 attr = DECL_ATTRIBUTES (node);
12169 else if (TYPE_P (node))
12171 tree decl = TYPE_STUB_DECL (node);
12172 if (decl)
12173 attr = lookup_attribute ("deprecated",
12174 TYPE_ATTRIBUTES (TREE_TYPE (decl)));
12178 if (attr)
12179 attr = lookup_attribute ("deprecated", attr);
12181 if (attr)
12182 msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
12183 else
12184 msg = NULL;
12186 if (DECL_P (node))
12188 expanded_location xloc = expand_location (DECL_SOURCE_LOCATION (node));
12189 if (msg)
12190 warning (OPT_Wdeprecated_declarations,
12191 "%qD is deprecated (declared at %r%s:%d%R): %s",
12192 node, "locus", xloc.file, xloc.line, msg);
12193 else
12194 warning (OPT_Wdeprecated_declarations,
12195 "%qD is deprecated (declared at %r%s:%d%R)",
12196 node, "locus", xloc.file, xloc.line);
12198 else if (TYPE_P (node))
12200 tree what = NULL_TREE;
12201 tree decl = TYPE_STUB_DECL (node);
12203 if (TYPE_NAME (node))
12205 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
12206 what = TYPE_NAME (node);
12207 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
12208 && DECL_NAME (TYPE_NAME (node)))
12209 what = DECL_NAME (TYPE_NAME (node));
12212 if (decl)
12214 expanded_location xloc
12215 = expand_location (DECL_SOURCE_LOCATION (decl));
12216 if (what)
12218 if (msg)
12219 warning (OPT_Wdeprecated_declarations,
12220 "%qE is deprecated (declared at %r%s:%d%R): %s",
12221 what, "locus", xloc.file, xloc.line, msg);
12222 else
12223 warning (OPT_Wdeprecated_declarations,
12224 "%qE is deprecated (declared at %r%s:%d%R)",
12225 what, "locus", xloc.file, xloc.line);
12227 else
12229 if (msg)
12230 warning (OPT_Wdeprecated_declarations,
12231 "type is deprecated (declared at %r%s:%d%R): %s",
12232 "locus", xloc.file, xloc.line, msg);
12233 else
12234 warning (OPT_Wdeprecated_declarations,
12235 "type is deprecated (declared at %r%s:%d%R)",
12236 "locus", xloc.file, xloc.line);
12239 else
12241 if (what)
12243 if (msg)
12244 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
12245 what, msg);
12246 else
12247 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
12249 else
12251 if (msg)
12252 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
12253 msg);
12254 else
12255 warning (OPT_Wdeprecated_declarations, "type is deprecated");
12261 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
12262 somewhere in it. */
12264 bool
12265 contains_bitfld_component_ref_p (const_tree ref)
12267 while (handled_component_p (ref))
12269 if (TREE_CODE (ref) == COMPONENT_REF
12270 && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
12271 return true;
12272 ref = TREE_OPERAND (ref, 0);
12275 return false;
12278 /* Try to determine whether a TRY_CATCH expression can fall through.
12279 This is a subroutine of block_may_fallthru. */
12281 static bool
12282 try_catch_may_fallthru (const_tree stmt)
12284 tree_stmt_iterator i;
12286 /* If the TRY block can fall through, the whole TRY_CATCH can
12287 fall through. */
12288 if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
12289 return true;
12291 i = tsi_start (TREE_OPERAND (stmt, 1));
12292 switch (TREE_CODE (tsi_stmt (i)))
12294 case CATCH_EXPR:
12295 /* We expect to see a sequence of CATCH_EXPR trees, each with a
12296 catch expression and a body. The whole TRY_CATCH may fall
12297 through iff any of the catch bodies falls through. */
12298 for (; !tsi_end_p (i); tsi_next (&i))
12300 if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
12301 return true;
12303 return false;
12305 case EH_FILTER_EXPR:
12306 /* The exception filter expression only matters if there is an
12307 exception. If the exception does not match EH_FILTER_TYPES,
12308 we will execute EH_FILTER_FAILURE, and we will fall through
12309 if that falls through. If the exception does match
12310 EH_FILTER_TYPES, the stack unwinder will continue up the
12311 stack, so we will not fall through. We don't know whether we
12312 will throw an exception which matches EH_FILTER_TYPES or not,
12313 so we just ignore EH_FILTER_TYPES and assume that we might
12314 throw an exception which doesn't match. */
12315 return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
12317 default:
12318 /* This case represents statements to be executed when an
12319 exception occurs. Those statements are implicitly followed
12320 by a RESX statement to resume execution after the exception.
12321 So in this case the TRY_CATCH never falls through. */
12322 return false;
12326 /* Try to determine if we can fall out of the bottom of BLOCK. This guess
12327 need not be 100% accurate; simply be conservative and return true if we
12328 don't know. This is used only to avoid stupidly generating extra code.
12329 If we're wrong, we'll just delete the extra code later. */
12331 bool
12332 block_may_fallthru (const_tree block)
12334 /* This CONST_CAST is okay because expr_last returns its argument
12335 unmodified and we assign it to a const_tree. */
12336 const_tree stmt = expr_last (CONST_CAST_TREE (block));
12338 switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
12340 case GOTO_EXPR:
12341 case RETURN_EXPR:
12342 /* Easy cases. If the last statement of the block implies
12343 control transfer, then we can't fall through. */
12344 return false;
12346 case SWITCH_EXPR:
12347 /* If SWITCH_LABELS is set, this is lowered, and represents a
12348 branch to a selected label and hence can not fall through.
12349 Otherwise SWITCH_BODY is set, and the switch can fall
12350 through. */
12351 return SWITCH_LABELS (stmt) == NULL_TREE;
12353 case COND_EXPR:
12354 if (block_may_fallthru (COND_EXPR_THEN (stmt)))
12355 return true;
12356 return block_may_fallthru (COND_EXPR_ELSE (stmt));
12358 case BIND_EXPR:
12359 return block_may_fallthru (BIND_EXPR_BODY (stmt));
12361 case TRY_CATCH_EXPR:
12362 return try_catch_may_fallthru (stmt);
12364 case TRY_FINALLY_EXPR:
12365 /* The finally clause is always executed after the try clause,
12366 so if it does not fall through, then the try-finally will not
12367 fall through. Otherwise, if the try clause does not fall
12368 through, then when the finally clause falls through it will
12369 resume execution wherever the try clause was going. So the
12370 whole try-finally will only fall through if both the try
12371 clause and the finally clause fall through. */
12372 return (block_may_fallthru (TREE_OPERAND (stmt, 0))
12373 && block_may_fallthru (TREE_OPERAND (stmt, 1)));
12375 case MODIFY_EXPR:
12376 if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
12377 stmt = TREE_OPERAND (stmt, 1);
12378 else
12379 return true;
12380 /* FALLTHRU */
12382 case CALL_EXPR:
12383 /* Functions that do not return do not fall through. */
12384 return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
12386 case CLEANUP_POINT_EXPR:
12387 return block_may_fallthru (TREE_OPERAND (stmt, 0));
12389 case TARGET_EXPR:
12390 return block_may_fallthru (TREE_OPERAND (stmt, 1));
12392 case ERROR_MARK:
12393 return true;
12395 default:
12396 return lang_hooks.block_may_fallthru (stmt);
12400 /* True if we are using EH to handle cleanups. */
12401 static bool using_eh_for_cleanups_flag = false;
12403 /* This routine is called from front ends to indicate eh should be used for
12404 cleanups. */
12405 void
12406 using_eh_for_cleanups (void)
12408 using_eh_for_cleanups_flag = true;
12411 /* Query whether EH is used for cleanups. */
12412 bool
12413 using_eh_for_cleanups_p (void)
12415 return using_eh_for_cleanups_flag;
12418 /* Wrapper for tree_code_name to ensure that tree code is valid */
12419 const char *
12420 get_tree_code_name (enum tree_code code)
12422 const char *invalid = "<invalid tree code>";
12424 if (code >= MAX_TREE_CODES)
12425 return invalid;
12427 return tree_code_name[code];
12430 #include "gt-tree.h"