1 /* Language-independent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* This file contains the low level primitives for operating on tree nodes,
23 including allocation, list operations, interning of identifiers,
24 construction of data type nodes and statement nodes,
25 and construction of type conversion nodes. It also contains
26 tables index by tree code that describe how to take apart
29 It is intended to be language-independent, but occasionally
30 calls language-dependent routines defined (for C) in typecheck.c.
32 The low-level allocation routines oballoc and permalloc
33 are used also for allocating many other kinds of objects
34 by all passes of the compiler. */
49 #define obstack_chunk_alloc xmalloc
50 #define obstack_chunk_free free
51 /* obstack.[ch] explicitly declined to prototype this. */
52 extern int _obstack_allocated_p
PARAMS ((struct obstack
*h
, PTR obj
));
54 static void unsave_expr_now_r
PARAMS ((tree
));
56 /* Tree nodes of permanent duration are allocated in this obstack.
57 They are the identifier nodes, and everything outside of
58 the bodies and parameters of function definitions. */
60 struct obstack permanent_obstack
;
62 /* The initial RTL, and all ..._TYPE nodes, in a function
63 are allocated in this obstack. Usually they are freed at the
64 end of the function, but if the function is inline they are saved.
65 For top-level functions, this is maybepermanent_obstack.
66 Separate obstacks are made for nested functions. */
68 struct obstack
*function_maybepermanent_obstack
;
70 /* This is the function_maybepermanent_obstack for top-level functions. */
72 struct obstack maybepermanent_obstack
;
74 /* The contents of the current function definition are allocated
75 in this obstack, and all are freed at the end of the function.
76 For top-level functions, this is temporary_obstack.
77 Separate obstacks are made for nested functions. */
79 struct obstack
*function_obstack
;
81 /* This is used for reading initializers of global variables. */
83 struct obstack temporary_obstack
;
85 /* The tree nodes of an expression are allocated
86 in this obstack, and all are freed at the end of the expression. */
88 struct obstack momentary_obstack
;
90 /* The tree nodes of a declarator are allocated
91 in this obstack, and all are freed when the declarator
94 static struct obstack temp_decl_obstack
;
96 /* This points at either permanent_obstack
97 or the current function_maybepermanent_obstack. */
99 struct obstack
*saveable_obstack
;
101 /* This is same as saveable_obstack during parse and expansion phase;
102 it points to the current function's obstack during optimization.
103 This is the obstack to be used for creating rtl objects. */
105 struct obstack
*rtl_obstack
;
107 /* This points at either permanent_obstack or the current function_obstack. */
109 struct obstack
*current_obstack
;
111 /* This points at either permanent_obstack or the current function_obstack
112 or momentary_obstack. */
114 struct obstack
*expression_obstack
;
116 /* Stack of obstack selections for push_obstacks and pop_obstacks. */
120 struct obstack_stack
*next
;
121 struct obstack
*current
;
122 struct obstack
*saveable
;
123 struct obstack
*expression
;
127 struct obstack_stack
*obstack_stack
;
129 /* Obstack for allocating struct obstack_stack entries. */
131 static struct obstack obstack_stack_obstack
;
133 /* Addresses of first objects in some obstacks.
134 This is for freeing their entire contents. */
135 char *maybepermanent_firstobj
;
136 char *temporary_firstobj
;
137 char *momentary_firstobj
;
138 char *temp_decl_firstobj
;
140 /* This is used to preserve objects (mainly array initializers) that need to
141 live until the end of the current function, but no further. */
142 char *momentary_function_firstobj
;
144 /* Nonzero means all ..._TYPE nodes should be allocated permanently. */
146 int all_types_permanent
;
148 /* Stack of places to restore the momentary obstack back to. */
150 struct momentary_level
152 /* Pointer back to previous such level. */
153 struct momentary_level
*prev
;
154 /* First object allocated within this level. */
156 /* Value of expression_obstack saved at entry to this level. */
157 struct obstack
*obstack
;
160 struct momentary_level
*momentary_stack
;
162 /* Table indexed by tree code giving a string containing a character
163 classifying the tree code. Possibilities are
164 t, d, s, c, r, <, 1, 2 and e. See tree.def for details. */
166 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
168 char tree_code_type
[MAX_TREE_CODES
] = {
173 /* Table indexed by tree code giving number of expression
174 operands beyond the fixed part of the node structure.
175 Not used for types or decls. */
177 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
179 int tree_code_length
[MAX_TREE_CODES
] = {
184 /* Names of tree components.
185 Used for printing out the tree and error messages. */
186 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
188 const char *tree_code_name
[MAX_TREE_CODES
] = {
193 /* Statistics-gathering stuff. */
214 int tree_node_counts
[(int) all_kinds
];
215 int tree_node_sizes
[(int) all_kinds
];
216 int id_string_size
= 0;
218 static const char * const tree_node_kind_names
[] = {
236 /* Hash table for uniquizing IDENTIFIER_NODEs by name. */
238 #define MAX_HASH_TABLE 1009
239 static tree hash_table
[MAX_HASH_TABLE
]; /* id hash buckets */
241 /* 0 while creating built-in identifiers. */
242 static int do_identifier_warnings
;
244 /* Unique id for next decl created. */
245 static int next_decl_uid
;
246 /* Unique id for next type created. */
247 static int next_type_uid
= 1;
249 /* Pointer to function to check the format of printf, etc. This is
250 used by the backend, e.g. builtins.c. */
251 void (*check_function_format_ptr
) PARAMS ((int *, tree
, tree
, tree
)) = 0;
253 /* Here is how primitive or already-canonicalized types' hash
255 #define TYPE_HASH(TYPE) ((unsigned long) (TYPE) & 0777777)
257 /* Since we cannot rehash a type after it is in the table, we have to
258 keep the hash code. */
266 /* Initial size of the hash table (rounded to next prime). */
267 #define TYPE_HASH_INITIAL_SIZE 1000
269 /* Now here is the hash table. When recording a type, it is added to
270 the slot whose index is the hash code. Note that the hash table is
271 used for several kinds of types (function types, array types and
272 array index range types, for now). While all these live in the
273 same table, they are completely independent, and the hash code is
274 computed differently for each of these. */
276 htab_t type_hash_table
;
278 static void build_real_from_int_cst_1
PARAMS ((PTR
));
279 static void set_type_quals
PARAMS ((tree
, int));
280 static void append_random_chars
PARAMS ((char *));
281 static void mark_type_hash
PARAMS ((void *));
282 static int type_hash_eq
PARAMS ((const void*, const void*));
283 static unsigned int type_hash_hash
PARAMS ((const void*));
284 static void print_type_hash_statistics
PARAMS((void));
285 static int mark_hash_entry
PARAMS((void **, void *));
286 static void finish_vector_type
PARAMS((tree
));
288 /* If non-null, these are language-specific helper functions for
289 unsave_expr_now. If present, LANG_UNSAVE is called before its
290 argument (an UNSAVE_EXPR) is to be unsaved, and all other
291 processing in unsave_expr_now is aborted. LANG_UNSAVE_EXPR_NOW is
292 called from unsave_expr_1 for language-specific tree codes. */
293 void (*lang_unsave
) PARAMS ((tree
*));
294 void (*lang_unsave_expr_now
) PARAMS ((tree
));
296 /* The string used as a placeholder instead of a source file name for
297 built-in tree nodes. The variable, which is dynamically allocated,
298 should be used; the macro is only used to initialize it. */
300 static char *built_in_filename
;
301 #define BUILT_IN_FILENAME ("<built-in>")
303 tree global_trees
[TI_MAX
];
304 tree integer_types
[itk_none
];
306 /* Init the principal obstacks. */
311 gcc_obstack_init (&obstack_stack_obstack
);
312 gcc_obstack_init (&permanent_obstack
);
314 gcc_obstack_init (&temporary_obstack
);
315 temporary_firstobj
= (char *) obstack_alloc (&temporary_obstack
, 0);
316 gcc_obstack_init (&momentary_obstack
);
317 momentary_firstobj
= (char *) obstack_alloc (&momentary_obstack
, 0);
318 momentary_function_firstobj
= momentary_firstobj
;
319 gcc_obstack_init (&maybepermanent_obstack
);
320 maybepermanent_firstobj
321 = (char *) obstack_alloc (&maybepermanent_obstack
, 0);
322 gcc_obstack_init (&temp_decl_obstack
);
323 temp_decl_firstobj
= (char *) obstack_alloc (&temp_decl_obstack
, 0);
325 function_obstack
= &temporary_obstack
;
326 function_maybepermanent_obstack
= &maybepermanent_obstack
;
327 current_obstack
= &permanent_obstack
;
328 expression_obstack
= &permanent_obstack
;
329 rtl_obstack
= saveable_obstack
= &permanent_obstack
;
331 /* Init the hash table of identifiers. */
332 bzero ((char *) hash_table
, sizeof hash_table
);
333 ggc_add_tree_root (hash_table
, sizeof hash_table
/ sizeof (tree
));
335 /* Initialize the hash table of types. */
336 type_hash_table
= htab_create (TYPE_HASH_INITIAL_SIZE
, type_hash_hash
,
338 ggc_add_root (&type_hash_table
, 1, sizeof type_hash_table
, mark_type_hash
);
339 ggc_add_tree_root (global_trees
, TI_MAX
);
340 ggc_add_tree_root (integer_types
, itk_none
);
344 gcc_obstack_init (obstack
)
345 struct obstack
*obstack
;
347 /* Let particular systems override the size of a chunk. */
348 #ifndef OBSTACK_CHUNK_SIZE
349 #define OBSTACK_CHUNK_SIZE 0
351 /* Let them override the alloc and free routines too. */
352 #ifndef OBSTACK_CHUNK_ALLOC
353 #define OBSTACK_CHUNK_ALLOC xmalloc
355 #ifndef OBSTACK_CHUNK_FREE
356 #define OBSTACK_CHUNK_FREE free
358 _obstack_begin (obstack
, OBSTACK_CHUNK_SIZE
, 0,
359 (void *(*) PARAMS ((long))) OBSTACK_CHUNK_ALLOC
,
360 (void (*) PARAMS ((void *))) OBSTACK_CHUNK_FREE
);
363 /* Save all variables describing the current status into the structure
364 *P. This function is called whenever we start compiling one
365 function in the midst of compiling another. For example, when
366 compiling a nested function, or, in C++, a template instantiation
367 that is required by the function we are currently compiling.
369 CONTEXT is the decl_function_context for the function we're about to
370 compile; if it isn't current_function_decl, we have to play some games. */
376 p
->all_types_permanent
= all_types_permanent
;
377 p
->momentary_stack
= momentary_stack
;
378 p
->maybepermanent_firstobj
= maybepermanent_firstobj
;
379 p
->temporary_firstobj
= temporary_firstobj
;
380 p
->momentary_firstobj
= momentary_firstobj
;
381 p
->momentary_function_firstobj
= momentary_function_firstobj
;
382 p
->function_obstack
= function_obstack
;
383 p
->function_maybepermanent_obstack
= function_maybepermanent_obstack
;
384 p
->current_obstack
= current_obstack
;
385 p
->expression_obstack
= expression_obstack
;
386 p
->saveable_obstack
= saveable_obstack
;
387 p
->rtl_obstack
= rtl_obstack
;
389 function_maybepermanent_obstack
390 = (struct obstack
*) xmalloc (sizeof (struct obstack
));
391 gcc_obstack_init (function_maybepermanent_obstack
);
392 maybepermanent_firstobj
393 = (char *) obstack_finish (function_maybepermanent_obstack
);
395 function_obstack
= (struct obstack
*) xmalloc (sizeof (struct obstack
));
396 gcc_obstack_init (function_obstack
);
398 current_obstack
= &permanent_obstack
;
399 expression_obstack
= &permanent_obstack
;
400 rtl_obstack
= saveable_obstack
= &permanent_obstack
;
402 temporary_firstobj
= (char *) obstack_alloc (&temporary_obstack
, 0);
403 momentary_firstobj
= (char *) obstack_finish (&momentary_obstack
);
404 momentary_function_firstobj
= momentary_firstobj
;
407 /* Restore all variables describing the current status from the structure *P.
408 This is used after a nested function. */
411 restore_tree_status (p
)
414 all_types_permanent
= p
->all_types_permanent
;
415 momentary_stack
= p
->momentary_stack
;
417 obstack_free (&momentary_obstack
, momentary_function_firstobj
);
419 /* Free saveable storage used by the function just compiled and not
421 obstack_free (function_maybepermanent_obstack
, maybepermanent_firstobj
);
422 if (obstack_empty_p (function_maybepermanent_obstack
))
424 obstack_free (function_maybepermanent_obstack
, NULL
);
425 free (function_maybepermanent_obstack
);
428 obstack_free (&temporary_obstack
, temporary_firstobj
);
429 obstack_free (&momentary_obstack
, momentary_function_firstobj
);
431 obstack_free (function_obstack
, NULL
);
432 free (function_obstack
);
434 temporary_firstobj
= p
->temporary_firstobj
;
435 momentary_firstobj
= p
->momentary_firstobj
;
436 momentary_function_firstobj
= p
->momentary_function_firstobj
;
437 maybepermanent_firstobj
= p
->maybepermanent_firstobj
;
438 function_obstack
= p
->function_obstack
;
439 function_maybepermanent_obstack
= p
->function_maybepermanent_obstack
;
440 current_obstack
= p
->current_obstack
;
441 expression_obstack
= p
->expression_obstack
;
442 saveable_obstack
= p
->saveable_obstack
;
443 rtl_obstack
= p
->rtl_obstack
;
446 /* Start allocating on the temporary (per function) obstack.
447 This is done in start_function before parsing the function body,
448 and before each initialization at top level, and to go back
449 to temporary allocation after doing permanent_allocation. */
452 temporary_allocation ()
454 /* Note that function_obstack at top level points to temporary_obstack.
455 But within a nested function context, it is a separate obstack. */
456 current_obstack
= function_obstack
;
457 expression_obstack
= function_obstack
;
458 rtl_obstack
= saveable_obstack
= function_maybepermanent_obstack
;
462 /* Start allocating on the permanent obstack but don't
463 free the temporary data. After calling this, call
464 `permanent_allocation' to fully resume permanent allocation status. */
467 end_temporary_allocation ()
469 current_obstack
= &permanent_obstack
;
470 expression_obstack
= &permanent_obstack
;
471 rtl_obstack
= saveable_obstack
= &permanent_obstack
;
474 /* Resume allocating on the temporary obstack, undoing
475 effects of `end_temporary_allocation'. */
478 resume_temporary_allocation ()
480 current_obstack
= function_obstack
;
481 expression_obstack
= function_obstack
;
482 rtl_obstack
= saveable_obstack
= function_maybepermanent_obstack
;
485 /* While doing temporary allocation, switch to allocating in such a
486 way as to save all nodes if the function is inlined. Call
487 resume_temporary_allocation to go back to ordinary temporary
491 saveable_allocation ()
493 /* Note that function_obstack at top level points to temporary_obstack.
494 But within a nested function context, it is a separate obstack. */
495 expression_obstack
= current_obstack
= saveable_obstack
;
498 /* Switch to current obstack CURRENT and maybepermanent obstack SAVEABLE,
499 recording the previously current obstacks on a stack.
500 This does not free any storage in any obstack. */
503 push_obstacks (current
, saveable
)
504 struct obstack
*current
, *saveable
;
506 struct obstack_stack
*p
;
508 p
= (struct obstack_stack
*) obstack_alloc (&obstack_stack_obstack
,
509 (sizeof (struct obstack_stack
)));
511 p
->current
= current_obstack
;
512 p
->saveable
= saveable_obstack
;
513 p
->expression
= expression_obstack
;
514 p
->rtl
= rtl_obstack
;
515 p
->next
= obstack_stack
;
518 current_obstack
= current
;
519 expression_obstack
= current
;
520 rtl_obstack
= saveable_obstack
= saveable
;
523 /* Save the current set of obstacks, but don't change them. */
526 push_obstacks_nochange ()
528 struct obstack_stack
*p
;
530 p
= (struct obstack_stack
*) obstack_alloc (&obstack_stack_obstack
,
531 (sizeof (struct obstack_stack
)));
533 p
->current
= current_obstack
;
534 p
->saveable
= saveable_obstack
;
535 p
->expression
= expression_obstack
;
536 p
->rtl
= rtl_obstack
;
537 p
->next
= obstack_stack
;
541 /* Pop the obstack selection stack. */
546 struct obstack_stack
*p
;
549 obstack_stack
= p
->next
;
551 current_obstack
= p
->current
;
552 saveable_obstack
= p
->saveable
;
553 expression_obstack
= p
->expression
;
554 rtl_obstack
= p
->rtl
;
556 obstack_free (&obstack_stack_obstack
, p
);
559 /* Nonzero if temporary allocation is currently in effect.
560 Zero if currently doing permanent allocation. */
563 allocation_temporary_p ()
565 return current_obstack
!= &permanent_obstack
;
568 /* Go back to allocating on the permanent obstack
569 and free everything in the temporary obstack.
571 FUNCTION_END is true only if we have just finished compiling a function.
572 In that case, we also free preserved initial values on the momentary
576 permanent_allocation (function_end
)
579 /* Free up previous temporary obstack data */
580 obstack_free (&temporary_obstack
, temporary_firstobj
);
583 obstack_free (&momentary_obstack
, momentary_function_firstobj
);
584 momentary_firstobj
= momentary_function_firstobj
;
587 obstack_free (&momentary_obstack
, momentary_firstobj
);
589 obstack_free (function_maybepermanent_obstack
, maybepermanent_firstobj
);
590 obstack_free (&temp_decl_obstack
, temp_decl_firstobj
);
592 current_obstack
= &permanent_obstack
;
593 expression_obstack
= &permanent_obstack
;
594 rtl_obstack
= saveable_obstack
= &permanent_obstack
;
597 /* Save permanently everything on the maybepermanent_obstack. */
602 maybepermanent_firstobj
603 = (char *) obstack_alloc (function_maybepermanent_obstack
, 0);
607 preserve_initializer ()
609 struct momentary_level
*tem
;
613 = (char *) obstack_alloc (&temporary_obstack
, 0);
614 maybepermanent_firstobj
615 = (char *) obstack_alloc (function_maybepermanent_obstack
, 0);
617 old_momentary
= momentary_firstobj
;
619 = (char *) obstack_alloc (&momentary_obstack
, 0);
620 if (momentary_firstobj
!= old_momentary
)
621 for (tem
= momentary_stack
; tem
; tem
= tem
->prev
)
622 tem
->base
= momentary_firstobj
;
625 /* Start allocating new rtl in current_obstack.
626 Use resume_temporary_allocation
627 to go back to allocating rtl in saveable_obstack. */
630 rtl_in_current_obstack ()
632 rtl_obstack
= current_obstack
;
635 /* Start allocating rtl from saveable_obstack. Intended to be used after
636 a call to push_obstacks_nochange. */
639 rtl_in_saveable_obstack ()
641 rtl_obstack
= saveable_obstack
;
644 /* Allocate SIZE bytes in the current obstack
645 and return a pointer to them.
646 In practice the current obstack is always the temporary one. */
652 return (char *) obstack_alloc (current_obstack
, size
);
655 /* Free the object PTR in the current obstack
656 as well as everything allocated since PTR.
657 In practice the current obstack is always the temporary one. */
663 obstack_free (current_obstack
, ptr
);
666 /* Allocate SIZE bytes in the permanent obstack
667 and return a pointer to them. */
673 return (char *) obstack_alloc (&permanent_obstack
, size
);
676 /* Allocate NELEM items of SIZE bytes in the permanent obstack
677 and return a pointer to them. The storage is cleared before
678 returning the value. */
681 perm_calloc (nelem
, size
)
685 char *rval
= (char *) obstack_alloc (&permanent_obstack
, nelem
* size
);
686 bzero (rval
, nelem
* size
);
690 /* Allocate SIZE bytes in the saveable obstack
691 and return a pointer to them. */
697 return (char *) obstack_alloc (saveable_obstack
, size
);
700 /* Allocate SIZE bytes in the expression obstack
701 and return a pointer to them. */
707 return (char *) obstack_alloc (expression_obstack
, size
);
710 /* Print out which obstack an object is in. */
713 print_obstack_name (object
, file
, prefix
)
718 struct obstack
*obstack
= NULL
;
719 const char *obstack_name
= NULL
;
722 for (p
= outer_function_chain
; p
; p
= p
->next
)
724 if (_obstack_allocated_p (p
->function_obstack
, object
))
726 obstack
= p
->function_obstack
;
727 obstack_name
= "containing function obstack";
729 if (_obstack_allocated_p (p
->function_maybepermanent_obstack
, object
))
731 obstack
= p
->function_maybepermanent_obstack
;
732 obstack_name
= "containing function maybepermanent obstack";
736 if (_obstack_allocated_p (&obstack_stack_obstack
, object
))
738 obstack
= &obstack_stack_obstack
;
739 obstack_name
= "obstack_stack_obstack";
741 else if (_obstack_allocated_p (function_obstack
, object
))
743 obstack
= function_obstack
;
744 obstack_name
= "function obstack";
746 else if (_obstack_allocated_p (&permanent_obstack
, object
))
748 obstack
= &permanent_obstack
;
749 obstack_name
= "permanent_obstack";
751 else if (_obstack_allocated_p (&momentary_obstack
, object
))
753 obstack
= &momentary_obstack
;
754 obstack_name
= "momentary_obstack";
756 else if (_obstack_allocated_p (function_maybepermanent_obstack
, object
))
758 obstack
= function_maybepermanent_obstack
;
759 obstack_name
= "function maybepermanent obstack";
761 else if (_obstack_allocated_p (&temp_decl_obstack
, object
))
763 obstack
= &temp_decl_obstack
;
764 obstack_name
= "temp_decl_obstack";
767 /* Check to see if the object is in the free area of the obstack. */
770 if (object
>= obstack
->next_free
771 && object
< obstack
->chunk_limit
)
772 fprintf (file
, "%s in free portion of obstack %s",
773 prefix
, obstack_name
);
775 fprintf (file
, "%s allocated from %s", prefix
, obstack_name
);
778 fprintf (file
, "%s not allocated from any obstack", prefix
);
782 debug_obstack (object
)
785 print_obstack_name (object
, stderr
, "object");
786 fprintf (stderr
, ".\n");
789 /* Return 1 if OBJ is in the permanent obstack.
790 This is slow, and should be used only for debugging.
791 Use TREE_PERMANENT for other purposes. */
794 object_permanent_p (obj
)
797 return _obstack_allocated_p (&permanent_obstack
, obj
);
800 /* Start a level of momentary allocation.
801 In C, each compound statement has its own level
802 and that level is freed at the end of each statement.
803 All expression nodes are allocated in the momentary allocation level. */
808 struct momentary_level
*tem
809 = (struct momentary_level
*) obstack_alloc (&momentary_obstack
,
810 sizeof (struct momentary_level
));
811 tem
->prev
= momentary_stack
;
812 tem
->base
= (char *) obstack_base (&momentary_obstack
);
813 tem
->obstack
= expression_obstack
;
814 momentary_stack
= tem
;
815 expression_obstack
= &momentary_obstack
;
818 /* Set things up so the next clear_momentary will only clear memory
819 past our present position in momentary_obstack. */
822 preserve_momentary ()
824 momentary_stack
->base
= (char *) obstack_base (&momentary_obstack
);
827 /* Free all the storage in the current momentary-allocation level.
828 In C, this happens at the end of each statement. */
833 obstack_free (&momentary_obstack
, momentary_stack
->base
);
836 /* Discard a level of momentary allocation.
837 In C, this happens at the end of each compound statement.
838 Restore the status of expression node allocation
839 that was in effect before this level was created. */
844 struct momentary_level
*tem
= momentary_stack
;
845 momentary_stack
= tem
->prev
;
846 expression_obstack
= tem
->obstack
;
847 /* We can't free TEM from the momentary_obstack, because there might
848 be objects above it which have been saved. We can free back to the
849 stack of the level we are popping off though. */
850 obstack_free (&momentary_obstack
, tem
->base
);
853 /* Pop back to the previous level of momentary allocation,
854 but don't free any momentary data just yet. */
857 pop_momentary_nofree ()
859 struct momentary_level
*tem
= momentary_stack
;
860 momentary_stack
= tem
->prev
;
861 expression_obstack
= tem
->obstack
;
864 /* Call when starting to parse a declaration:
865 make expressions in the declaration last the length of the function.
866 Returns an argument that should be passed to resume_momentary later. */
871 register int tem
= expression_obstack
== &momentary_obstack
;
872 expression_obstack
= saveable_obstack
;
876 /* Call when finished parsing a declaration:
877 restore the treatment of node-allocation that was
878 in effect before the suspension.
879 YES should be the value previously returned by suspend_momentary. */
882 resume_momentary (yes
)
886 expression_obstack
= &momentary_obstack
;
889 /* Init the tables indexed by tree code.
890 Note that languages can add to these tables to define their own codes. */
896 = ggc_alloc_string (BUILT_IN_FILENAME
, sizeof (BUILT_IN_FILENAME
));
897 ggc_add_string_root (&built_in_filename
, 1);
900 /* Compute the number of bytes occupied by 'node'. This routine only
901 looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH. */
906 enum tree_code code
= TREE_CODE (node
);
908 switch (TREE_CODE_CLASS (code
))
910 case 'd': /* A decl node */
911 return sizeof (struct tree_decl
);
913 case 't': /* a type node */
914 return sizeof (struct tree_type
);
916 case 'b': /* a lexical block node */
917 return sizeof (struct tree_block
);
919 case 'r': /* a reference */
920 case 'e': /* an expression */
921 case 's': /* an expression with side effects */
922 case '<': /* a comparison expression */
923 case '1': /* a unary arithmetic expression */
924 case '2': /* a binary arithmetic expression */
925 return (sizeof (struct tree_exp
)
926 + (TREE_CODE_LENGTH (code
) - 1) * sizeof (char *));
928 case 'c': /* a constant */
929 /* We can't use TREE_CODE_LENGTH for INTEGER_CST, since the number of
930 words is machine-dependent due to varying length of HOST_WIDE_INT,
931 which might be wider than a pointer (e.g., long long). Similarly
932 for REAL_CST, since the number of words is machine-dependent due
933 to varying size and alignment of `double'. */
934 if (code
== INTEGER_CST
)
935 return sizeof (struct tree_int_cst
);
936 else if (code
== REAL_CST
)
937 return sizeof (struct tree_real_cst
);
939 return (sizeof (struct tree_common
)
940 + TREE_CODE_LENGTH (code
) * sizeof (char *));
942 case 'x': /* something random, like an identifier. */
945 length
= (sizeof (struct tree_common
)
946 + TREE_CODE_LENGTH (code
) * sizeof (char *));
947 if (code
== TREE_VEC
)
948 length
+= (TREE_VEC_LENGTH (node
) - 1) * sizeof (char *);
957 /* Return a newly allocated node of code CODE.
958 Initialize the node's unique id and its TREE_PERMANENT flag.
959 Note that if garbage collection is in use, TREE_PERMANENT will
960 always be zero - we want to eliminate use of TREE_PERMANENT.
961 For decl and type nodes, some other fields are initialized.
962 The rest of the node is initialized to zero.
964 Achoo! I got a code in the node. */
971 register int type
= TREE_CODE_CLASS (code
);
972 register size_t length
;
973 #ifdef GATHER_STATISTICS
974 register tree_node_kind kind
;
976 struct tree_common ttmp
;
978 /* We can't allocate a TREE_VEC without knowing how many elements
980 if (code
== TREE_VEC
)
983 TREE_SET_CODE ((tree
)&ttmp
, code
);
984 length
= tree_size ((tree
)&ttmp
);
986 #ifdef GATHER_STATISTICS
989 case 'd': /* A decl node */
993 case 't': /* a type node */
997 case 'b': /* a lexical block */
1001 case 's': /* an expression with side effects */
1005 case 'r': /* a reference */
1009 case 'e': /* an expression */
1010 case '<': /* a comparison expression */
1011 case '1': /* a unary arithmetic expression */
1012 case '2': /* a binary arithmetic expression */
1016 case 'c': /* a constant */
1020 case 'x': /* something random, like an identifier. */
1021 if (code
== IDENTIFIER_NODE
)
1023 else if (code
== OP_IDENTIFIER
)
1025 else if (code
== TREE_VEC
)
1035 tree_node_counts
[(int) kind
]++;
1036 tree_node_sizes
[(int) kind
] += length
;
1039 t
= ggc_alloc_tree (length
);
1041 memset ((PTR
) t
, 0, length
);
1043 TREE_SET_CODE (t
, code
);
1044 TREE_SET_PERMANENT (t
);
1049 TREE_SIDE_EFFECTS (t
) = 1;
1050 TREE_TYPE (t
) = void_type_node
;
1054 if (code
!= FUNCTION_DECL
)
1056 DECL_USER_ALIGN (t
) = 0;
1057 DECL_IN_SYSTEM_HEADER (t
) = in_system_header
;
1058 DECL_SOURCE_LINE (t
) = lineno
;
1059 DECL_SOURCE_FILE (t
) =
1060 (input_filename
) ? input_filename
: built_in_filename
;
1061 DECL_UID (t
) = next_decl_uid
++;
1062 /* Note that we have not yet computed the alias set for this
1064 DECL_POINTER_ALIAS_SET (t
) = -1;
1068 TYPE_UID (t
) = next_type_uid
++;
1070 TYPE_USER_ALIGN (t
) = 0;
1071 TYPE_MAIN_VARIANT (t
) = t
;
1072 TYPE_ATTRIBUTES (t
) = NULL_TREE
;
1073 #ifdef SET_DEFAULT_TYPE_ATTRIBUTES
1074 SET_DEFAULT_TYPE_ATTRIBUTES (t
);
1076 /* Note that we have not yet computed the alias set for this
1078 TYPE_ALIAS_SET (t
) = -1;
1082 TREE_CONSTANT (t
) = 1;
1092 case PREDECREMENT_EXPR
:
1093 case PREINCREMENT_EXPR
:
1094 case POSTDECREMENT_EXPR
:
1095 case POSTINCREMENT_EXPR
:
1096 /* All of these have side-effects, no matter what their
1098 TREE_SIDE_EFFECTS (t
) = 1;
1110 /* A front-end can reset this to an appropriate function if types need
1111 special handling. */
1113 tree (*make_lang_type_fn
) PARAMS ((enum tree_code
)) = make_node
;
1115 /* Return a new type (with the indicated CODE), doing whatever
1116 language-specific processing is required. */
1119 make_lang_type (code
)
1120 enum tree_code code
;
1122 return (*make_lang_type_fn
) (code
);
1125 /* Return a new node with the same contents as NODE except that its
1126 TREE_CHAIN is zero and it has a fresh uid. Unlike make_node, this
1127 function always performs the allocation on the CURRENT_OBSTACK;
1128 it's up to the caller to pick the right obstack before calling this
1136 register enum tree_code code
= TREE_CODE (node
);
1137 register size_t length
;
1139 length
= tree_size (node
);
1141 t
= ggc_alloc_tree (length
);
1143 t
= (tree
) obstack_alloc (current_obstack
, length
);
1144 memcpy (t
, node
, length
);
1147 TREE_ASM_WRITTEN (t
) = 0;
1149 if (TREE_CODE_CLASS (code
) == 'd')
1150 DECL_UID (t
) = next_decl_uid
++;
1151 else if (TREE_CODE_CLASS (code
) == 't')
1153 TYPE_UID (t
) = next_type_uid
++;
1154 TYPE_OBSTACK (t
) = current_obstack
;
1156 /* The following is so that the debug code for
1157 the copy is different from the original type.
1158 The two statements usually duplicate each other
1159 (because they clear fields of the same union),
1160 but the optimizer should catch that. */
1161 TYPE_SYMTAB_POINTER (t
) = 0;
1162 TYPE_SYMTAB_ADDRESS (t
) = 0;
1165 TREE_SET_PERMANENT (t
);
1170 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1171 For example, this can copy a list made of TREE_LIST nodes. */
1178 register tree prev
, next
;
1183 head
= prev
= copy_node (list
);
1184 next
= TREE_CHAIN (list
);
1187 TREE_CHAIN (prev
) = copy_node (next
);
1188 prev
= TREE_CHAIN (prev
);
1189 next
= TREE_CHAIN (next
);
1196 /* Return an IDENTIFIER_NODE whose name is TEXT (a null-terminated string).
1197 If an identifier with that name has previously been referred to,
1198 the same node is returned this time. */
1201 get_identifier (text
)
1202 register const char *text
;
1207 register int len
, hash_len
;
1209 /* Compute length of text in len. */
1210 len
= strlen (text
);
1212 /* Decide how much of that length to hash on */
1214 if (warn_id_clash
&& len
> id_clash_len
)
1215 hash_len
= id_clash_len
;
1217 /* Compute hash code */
1218 hi
= hash_len
* 613 + (unsigned) text
[0];
1219 for (i
= 1; i
< hash_len
; i
+= 2)
1220 hi
= ((hi
* 613) + (unsigned) (text
[i
]));
1222 hi
&= (1 << HASHBITS
) - 1;
1223 hi
%= MAX_HASH_TABLE
;
1225 /* Search table for identifier. */
1226 for (idp
= hash_table
[hi
]; idp
; idp
= TREE_CHAIN (idp
))
1227 if (IDENTIFIER_LENGTH (idp
) == len
1228 && IDENTIFIER_POINTER (idp
)[0] == text
[0]
1229 && !bcmp (IDENTIFIER_POINTER (idp
), text
, len
))
1230 /* Return if found. */
1233 /* Not found; optionally warn about a similar identifier. */
1234 if (warn_id_clash
&& do_identifier_warnings
&& len
>= id_clash_len
)
1235 for (idp
= hash_table
[hi
]; idp
; idp
= TREE_CHAIN (idp
))
1236 if (!strncmp (IDENTIFIER_POINTER (idp
), text
, id_clash_len
))
1238 warning ("`%s' and `%s' identical in first %d characters",
1239 IDENTIFIER_POINTER (idp
), text
, id_clash_len
);
1243 if (TREE_CODE_LENGTH (IDENTIFIER_NODE
) < 0)
1244 abort (); /* set_identifier_size hasn't been called. */
1246 /* Not found, create one, add to chain */
1247 idp
= make_node (IDENTIFIER_NODE
);
1248 IDENTIFIER_LENGTH (idp
) = len
;
1249 #ifdef GATHER_STATISTICS
1250 id_string_size
+= len
;
1254 IDENTIFIER_POINTER (idp
) = ggc_alloc_string (text
, len
);
1256 IDENTIFIER_POINTER (idp
) = obstack_copy0 (&permanent_obstack
, text
, len
);
1258 TREE_CHAIN (idp
) = hash_table
[hi
];
1259 hash_table
[hi
] = idp
;
1260 return idp
; /* <-- return if created */
1263 /* If an identifier with the name TEXT (a null-terminated string) has
1264 previously been referred to, return that node; otherwise return
1268 maybe_get_identifier (text
)
1269 register const char *text
;
1274 register int len
, hash_len
;
1276 /* Compute length of text in len. */
1277 len
= strlen (text
);
1279 /* Decide how much of that length to hash on */
1281 if (warn_id_clash
&& len
> id_clash_len
)
1282 hash_len
= id_clash_len
;
1284 /* Compute hash code */
1285 hi
= hash_len
* 613 + (unsigned) text
[0];
1286 for (i
= 1; i
< hash_len
; i
+= 2)
1287 hi
= ((hi
* 613) + (unsigned) (text
[i
]));
1289 hi
&= (1 << HASHBITS
) - 1;
1290 hi
%= MAX_HASH_TABLE
;
1292 /* Search table for identifier. */
1293 for (idp
= hash_table
[hi
]; idp
; idp
= TREE_CHAIN (idp
))
1294 if (IDENTIFIER_LENGTH (idp
) == len
1295 && IDENTIFIER_POINTER (idp
)[0] == text
[0]
1296 && !bcmp (IDENTIFIER_POINTER (idp
), text
, len
))
1297 return idp
; /* <-- return if found */
1302 /* Enable warnings on similar identifiers (if requested).
1303 Done after the built-in identifiers are created. */
1306 start_identifier_warnings ()
1308 do_identifier_warnings
= 1;
1311 /* Record the size of an identifier node for the language in use.
1312 SIZE is the total size in bytes.
1313 This is called by the language-specific files. This must be
1314 called before allocating any identifiers. */
1317 set_identifier_size (size
)
1320 tree_code_length
[(int) IDENTIFIER_NODE
]
1321 = (size
- sizeof (struct tree_common
)) / sizeof (tree
);
1324 /* Return a newly constructed INTEGER_CST node whose constant value
1325 is specified by the two ints LOW and HI.
1326 The TREE_TYPE is set to `int'.
1328 This function should be used via the `build_int_2' macro. */
1331 build_int_2_wide (low
, hi
)
1332 unsigned HOST_WIDE_INT low
;
1335 register tree t
= make_node (INTEGER_CST
);
1337 TREE_INT_CST_LOW (t
) = low
;
1338 TREE_INT_CST_HIGH (t
) = hi
;
1339 TREE_TYPE (t
) = integer_type_node
;
1343 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1346 build_real (type
, d
)
1353 /* Check for valid float value for this type on this target machine;
1354 if not, can print error message and store a valid value in D. */
1355 #ifdef CHECK_FLOAT_VALUE
1356 CHECK_FLOAT_VALUE (TYPE_MODE (type
), d
, overflow
);
1359 v
= make_node (REAL_CST
);
1360 TREE_TYPE (v
) = type
;
1361 TREE_REAL_CST (v
) = d
;
1362 TREE_OVERFLOW (v
) = TREE_CONSTANT_OVERFLOW (v
) = overflow
;
1366 /* Return a new REAL_CST node whose type is TYPE
1367 and whose value is the integer value of the INTEGER_CST node I. */
1369 #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
1372 real_value_from_int_cst (type
, i
)
1373 tree type ATTRIBUTE_UNUSED
, i
;
1377 #ifdef REAL_ARITHMETIC
1378 /* Clear all bits of the real value type so that we can later do
1379 bitwise comparisons to see if two values are the same. */
1380 bzero ((char *) &d
, sizeof d
);
1382 if (! TREE_UNSIGNED (TREE_TYPE (i
)))
1383 REAL_VALUE_FROM_INT (d
, TREE_INT_CST_LOW (i
), TREE_INT_CST_HIGH (i
),
1386 REAL_VALUE_FROM_UNSIGNED_INT (d
, TREE_INT_CST_LOW (i
),
1387 TREE_INT_CST_HIGH (i
), TYPE_MODE (type
));
1388 #else /* not REAL_ARITHMETIC */
1389 /* Some 386 compilers mishandle unsigned int to float conversions,
1390 so introduce a temporary variable E to avoid those bugs. */
1391 if (TREE_INT_CST_HIGH (i
) < 0 && ! TREE_UNSIGNED (TREE_TYPE (i
)))
1395 d
= (double) (~TREE_INT_CST_HIGH (i
));
1396 e
= ((double) ((HOST_WIDE_INT
) 1 << (HOST_BITS_PER_WIDE_INT
/ 2))
1397 * (double) ((HOST_WIDE_INT
) 1 << (HOST_BITS_PER_WIDE_INT
/ 2)));
1399 e
= (double) (~TREE_INT_CST_LOW (i
));
1407 d
= (double) (unsigned HOST_WIDE_INT
) TREE_INT_CST_HIGH (i
);
1408 e
= ((double) ((HOST_WIDE_INT
) 1 << (HOST_BITS_PER_WIDE_INT
/ 2))
1409 * (double) ((HOST_WIDE_INT
) 1 << (HOST_BITS_PER_WIDE_INT
/ 2)));
1411 e
= (double) TREE_INT_CST_LOW (i
);
1414 #endif /* not REAL_ARITHMETIC */
1418 /* Args to pass to and from build_real_from_int_cst_1. */
1422 tree type
; /* Input: type to conver to. */
1423 tree i
; /* Input: operand to convert. */
1424 REAL_VALUE_TYPE d
; /* Output: floating point value. */
1427 /* Convert an integer to a floating point value while protected by a floating
1428 point exception handler. */
1431 build_real_from_int_cst_1 (data
)
1434 struct brfic_args
*args
= (struct brfic_args
*) data
;
1436 #ifdef REAL_ARITHMETIC
1437 args
->d
= real_value_from_int_cst (args
->type
, args
->i
);
1440 = REAL_VALUE_TRUNCATE (TYPE_MODE (args
->type
),
1441 real_value_from_int_cst (args
->type
, args
->i
));
1445 /* Given a tree representing an integer constant I, return a tree
1446 representing the same value as a floating-point constant of type TYPE.
1447 We cannot perform this operation if there is no way of doing arithmetic
1448 on floating-point values. */
1451 build_real_from_int_cst (type
, i
)
1456 int overflow
= TREE_OVERFLOW (i
);
1458 struct brfic_args args
;
1460 v
= make_node (REAL_CST
);
1461 TREE_TYPE (v
) = type
;
1463 /* Setup input for build_real_from_int_cst_1() */
1467 if (do_float_handler (build_real_from_int_cst_1
, (PTR
) &args
))
1468 /* Receive output from build_real_from_int_cst_1() */
1472 /* We got an exception from build_real_from_int_cst_1() */
1477 /* Check for valid float value for this type on this target machine. */
1479 #ifdef CHECK_FLOAT_VALUE
1480 CHECK_FLOAT_VALUE (TYPE_MODE (type
), d
, overflow
);
1483 TREE_REAL_CST (v
) = d
;
1484 TREE_OVERFLOW (v
) = TREE_CONSTANT_OVERFLOW (v
) = overflow
;
1488 #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
1490 /* Return a newly constructed STRING_CST node whose value is
1491 the LEN characters at STR.
1492 The TREE_TYPE is not initialized. */
1495 build_string (len
, str
)
1499 /* Put the string in saveable_obstack since it will be placed in the RTL
1500 for an "asm" statement and will also be kept around a while if
1501 deferring constant output in varasm.c. */
1503 register tree s
= make_node (STRING_CST
);
1505 TREE_STRING_LENGTH (s
) = len
;
1507 TREE_STRING_POINTER (s
) = ggc_alloc_string (str
, len
);
1509 TREE_STRING_POINTER (s
) = obstack_copy0 (saveable_obstack
, str
, len
);
1514 /* Return a newly constructed COMPLEX_CST node whose value is
1515 specified by the real and imaginary parts REAL and IMAG.
1516 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1517 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1520 build_complex (type
, real
, imag
)
1524 register tree t
= make_node (COMPLEX_CST
);
1526 TREE_REALPART (t
) = real
;
1527 TREE_IMAGPART (t
) = imag
;
1528 TREE_TYPE (t
) = type
? type
: build_complex_type (TREE_TYPE (real
));
1529 TREE_OVERFLOW (t
) = TREE_OVERFLOW (real
) | TREE_OVERFLOW (imag
);
1530 TREE_CONSTANT_OVERFLOW (t
)
1531 = TREE_CONSTANT_OVERFLOW (real
) | TREE_CONSTANT_OVERFLOW (imag
);
1535 /* Build a newly constructed TREE_VEC node of length LEN. */
1542 register int length
= (len
-1) * sizeof (tree
) + sizeof (struct tree_vec
);
1543 register struct obstack
*obstack
= current_obstack
;
1545 #ifdef GATHER_STATISTICS
1546 tree_node_counts
[(int)vec_kind
]++;
1547 tree_node_sizes
[(int)vec_kind
] += length
;
1551 t
= ggc_alloc_tree (length
);
1553 t
= (tree
) obstack_alloc (obstack
, length
);
1555 memset ((PTR
) t
, 0, length
);
1556 TREE_SET_CODE (t
, TREE_VEC
);
1557 TREE_VEC_LENGTH (t
) = len
;
1558 TREE_SET_PERMANENT (t
);
1563 /* Return 1 if EXPR is the integer constant zero or a complex constant
1567 integer_zerop (expr
)
1572 return ((TREE_CODE (expr
) == INTEGER_CST
1573 && ! TREE_CONSTANT_OVERFLOW (expr
)
1574 && TREE_INT_CST_LOW (expr
) == 0
1575 && TREE_INT_CST_HIGH (expr
) == 0)
1576 || (TREE_CODE (expr
) == COMPLEX_CST
1577 && integer_zerop (TREE_REALPART (expr
))
1578 && integer_zerop (TREE_IMAGPART (expr
))));
1581 /* Return 1 if EXPR is the integer constant one or the corresponding
1582 complex constant. */
1590 return ((TREE_CODE (expr
) == INTEGER_CST
1591 && ! TREE_CONSTANT_OVERFLOW (expr
)
1592 && TREE_INT_CST_LOW (expr
) == 1
1593 && TREE_INT_CST_HIGH (expr
) == 0)
1594 || (TREE_CODE (expr
) == COMPLEX_CST
1595 && integer_onep (TREE_REALPART (expr
))
1596 && integer_zerop (TREE_IMAGPART (expr
))));
1599 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1600 it contains. Likewise for the corresponding complex constant. */
1603 integer_all_onesp (expr
)
1611 if (TREE_CODE (expr
) == COMPLEX_CST
1612 && integer_all_onesp (TREE_REALPART (expr
))
1613 && integer_zerop (TREE_IMAGPART (expr
)))
1616 else if (TREE_CODE (expr
) != INTEGER_CST
1617 || TREE_CONSTANT_OVERFLOW (expr
))
1620 uns
= TREE_UNSIGNED (TREE_TYPE (expr
));
1622 return (TREE_INT_CST_LOW (expr
) == ~(unsigned HOST_WIDE_INT
) 0
1623 && TREE_INT_CST_HIGH (expr
) == -1);
1625 /* Note that using TYPE_PRECISION here is wrong. We care about the
1626 actual bits, not the (arbitrary) range of the type. */
1627 prec
= GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr
)));
1628 if (prec
>= HOST_BITS_PER_WIDE_INT
)
1630 HOST_WIDE_INT high_value
;
1633 shift_amount
= prec
- HOST_BITS_PER_WIDE_INT
;
1635 if (shift_amount
> HOST_BITS_PER_WIDE_INT
)
1636 /* Can not handle precisions greater than twice the host int size. */
1638 else if (shift_amount
== HOST_BITS_PER_WIDE_INT
)
1639 /* Shifting by the host word size is undefined according to the ANSI
1640 standard, so we must handle this as a special case. */
1643 high_value
= ((HOST_WIDE_INT
) 1 << shift_amount
) - 1;
1645 return (TREE_INT_CST_LOW (expr
) == ~(unsigned HOST_WIDE_INT
) 0
1646 && TREE_INT_CST_HIGH (expr
) == high_value
);
1649 return TREE_INT_CST_LOW (expr
) == ((unsigned HOST_WIDE_INT
) 1 << prec
) - 1;
1652 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1656 integer_pow2p (expr
)
1660 HOST_WIDE_INT high
, low
;
1664 if (TREE_CODE (expr
) == COMPLEX_CST
1665 && integer_pow2p (TREE_REALPART (expr
))
1666 && integer_zerop (TREE_IMAGPART (expr
)))
1669 if (TREE_CODE (expr
) != INTEGER_CST
|| TREE_CONSTANT_OVERFLOW (expr
))
1672 prec
= (POINTER_TYPE_P (TREE_TYPE (expr
))
1673 ? POINTER_SIZE
: TYPE_PRECISION (TREE_TYPE (expr
)));
1674 high
= TREE_INT_CST_HIGH (expr
);
1675 low
= TREE_INT_CST_LOW (expr
);
1677 /* First clear all bits that are beyond the type's precision in case
1678 we've been sign extended. */
1680 if (prec
== 2 * HOST_BITS_PER_WIDE_INT
)
1682 else if (prec
> HOST_BITS_PER_WIDE_INT
)
1683 high
&= ~((HOST_WIDE_INT
) (-1) << (prec
- HOST_BITS_PER_WIDE_INT
));
1687 if (prec
< HOST_BITS_PER_WIDE_INT
)
1688 low
&= ~((HOST_WIDE_INT
) (-1) << prec
);
1691 if (high
== 0 && low
== 0)
1694 return ((high
== 0 && (low
& (low
- 1)) == 0)
1695 || (low
== 0 && (high
& (high
- 1)) == 0));
1698 /* Return the power of two represented by a tree node known to be a
1706 HOST_WIDE_INT high
, low
;
1710 if (TREE_CODE (expr
) == COMPLEX_CST
)
1711 return tree_log2 (TREE_REALPART (expr
));
1713 prec
= (POINTER_TYPE_P (TREE_TYPE (expr
))
1714 ? POINTER_SIZE
: TYPE_PRECISION (TREE_TYPE (expr
)));
1716 high
= TREE_INT_CST_HIGH (expr
);
1717 low
= TREE_INT_CST_LOW (expr
);
1719 /* First clear all bits that are beyond the type's precision in case
1720 we've been sign extended. */
1722 if (prec
== 2 * HOST_BITS_PER_WIDE_INT
)
1724 else if (prec
> HOST_BITS_PER_WIDE_INT
)
1725 high
&= ~((HOST_WIDE_INT
) (-1) << (prec
- HOST_BITS_PER_WIDE_INT
));
1729 if (prec
< HOST_BITS_PER_WIDE_INT
)
1730 low
&= ~((HOST_WIDE_INT
) (-1) << prec
);
1733 return (high
!= 0 ? HOST_BITS_PER_WIDE_INT
+ exact_log2 (high
)
1734 : exact_log2 (low
));
1737 /* Similar, but return the largest integer Y such that 2 ** Y is less
1738 than or equal to EXPR. */
1741 tree_floor_log2 (expr
)
1745 HOST_WIDE_INT high
, low
;
1749 if (TREE_CODE (expr
) == COMPLEX_CST
)
1750 return tree_log2 (TREE_REALPART (expr
));
1752 prec
= (POINTER_TYPE_P (TREE_TYPE (expr
))
1753 ? POINTER_SIZE
: TYPE_PRECISION (TREE_TYPE (expr
)));
1755 high
= TREE_INT_CST_HIGH (expr
);
1756 low
= TREE_INT_CST_LOW (expr
);
1758 /* First clear all bits that are beyond the type's precision in case
1759 we've been sign extended. Ignore if type's precision hasn't been set
1760 since what we are doing is setting it. */
1762 if (prec
== 2 * HOST_BITS_PER_WIDE_INT
|| prec
== 0)
1764 else if (prec
> HOST_BITS_PER_WIDE_INT
)
1765 high
&= ~((HOST_WIDE_INT
) (-1) << (prec
- HOST_BITS_PER_WIDE_INT
));
1769 if (prec
< HOST_BITS_PER_WIDE_INT
)
1770 low
&= ~((HOST_WIDE_INT
) (-1) << prec
);
1773 return (high
!= 0 ? HOST_BITS_PER_WIDE_INT
+ floor_log2 (high
)
1774 : floor_log2 (low
));
1777 /* Return 1 if EXPR is the real constant zero. */
1785 return ((TREE_CODE (expr
) == REAL_CST
1786 && ! TREE_CONSTANT_OVERFLOW (expr
)
1787 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr
), dconst0
))
1788 || (TREE_CODE (expr
) == COMPLEX_CST
1789 && real_zerop (TREE_REALPART (expr
))
1790 && real_zerop (TREE_IMAGPART (expr
))));
1793 /* Return 1 if EXPR is the real constant one in real or complex form. */
1801 return ((TREE_CODE (expr
) == REAL_CST
1802 && ! TREE_CONSTANT_OVERFLOW (expr
)
1803 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr
), dconst1
))
1804 || (TREE_CODE (expr
) == COMPLEX_CST
1805 && real_onep (TREE_REALPART (expr
))
1806 && real_zerop (TREE_IMAGPART (expr
))));
1809 /* Return 1 if EXPR is the real constant two. */
1817 return ((TREE_CODE (expr
) == REAL_CST
1818 && ! TREE_CONSTANT_OVERFLOW (expr
)
1819 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr
), dconst2
))
1820 || (TREE_CODE (expr
) == COMPLEX_CST
1821 && real_twop (TREE_REALPART (expr
))
1822 && real_zerop (TREE_IMAGPART (expr
))));
1825 /* Nonzero if EXP is a constant or a cast of a constant. */
1828 really_constant_p (exp
)
1831 /* This is not quite the same as STRIP_NOPS. It does more. */
1832 while (TREE_CODE (exp
) == NOP_EXPR
1833 || TREE_CODE (exp
) == CONVERT_EXPR
1834 || TREE_CODE (exp
) == NON_LVALUE_EXPR
)
1835 exp
= TREE_OPERAND (exp
, 0);
1836 return TREE_CONSTANT (exp
);
1839 /* Return first list element whose TREE_VALUE is ELEM.
1840 Return 0 if ELEM is not in LIST. */
1843 value_member (elem
, list
)
1848 if (elem
== TREE_VALUE (list
))
1850 list
= TREE_CHAIN (list
);
1855 /* Return first list element whose TREE_PURPOSE is ELEM.
1856 Return 0 if ELEM is not in LIST. */
1859 purpose_member (elem
, list
)
1864 if (elem
== TREE_PURPOSE (list
))
1866 list
= TREE_CHAIN (list
);
1871 /* Return first list element whose BINFO_TYPE is ELEM.
1872 Return 0 if ELEM is not in LIST. */
1875 binfo_member (elem
, list
)
1880 if (elem
== BINFO_TYPE (list
))
1882 list
= TREE_CHAIN (list
);
1887 /* Return nonzero if ELEM is part of the chain CHAIN. */
1890 chain_member (elem
, chain
)
1897 chain
= TREE_CHAIN (chain
);
1903 /* Return nonzero if ELEM is equal to TREE_VALUE (CHAIN) for any piece of
1904 chain CHAIN. This and the next function are currently unused, but
1905 are retained for completeness. */
1908 chain_member_value (elem
, chain
)
1913 if (elem
== TREE_VALUE (chain
))
1915 chain
= TREE_CHAIN (chain
);
1921 /* Return nonzero if ELEM is equal to TREE_PURPOSE (CHAIN)
1922 for any piece of chain CHAIN. */
1925 chain_member_purpose (elem
, chain
)
1930 if (elem
== TREE_PURPOSE (chain
))
1932 chain
= TREE_CHAIN (chain
);
1938 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1939 We expect a null pointer to mark the end of the chain.
1940 This is the Lisp primitive `length'. */
1947 register int len
= 0;
1949 for (tail
= t
; tail
; tail
= TREE_CHAIN (tail
))
1955 /* Returns the number of FIELD_DECLs in TYPE. */
1958 fields_length (type
)
1961 tree t
= TYPE_FIELDS (type
);
1964 for (; t
; t
= TREE_CHAIN (t
))
1965 if (TREE_CODE (t
) == FIELD_DECL
)
1971 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1972 by modifying the last node in chain 1 to point to chain 2.
1973 This is the Lisp primitive `nconc'. */
1983 #ifdef ENABLE_TREE_CHECKING
1987 for (t1
= op1
; TREE_CHAIN (t1
); t1
= TREE_CHAIN (t1
))
1989 TREE_CHAIN (t1
) = op2
;
1990 #ifdef ENABLE_TREE_CHECKING
1991 for (t2
= op2
; t2
; t2
= TREE_CHAIN (t2
))
1993 abort (); /* Circularity created. */
2001 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
2005 register tree chain
;
2009 while ((next
= TREE_CHAIN (chain
)))
2014 /* Reverse the order of elements in the chain T,
2015 and return the new head of the chain (old last element). */
2021 register tree prev
= 0, decl
, next
;
2022 for (decl
= t
; decl
; decl
= next
)
2024 next
= TREE_CHAIN (decl
);
2025 TREE_CHAIN (decl
) = prev
;
2031 /* Given a chain CHAIN of tree nodes,
2032 construct and return a list of those nodes. */
2038 tree result
= NULL_TREE
;
2039 tree in_tail
= chain
;
2040 tree out_tail
= NULL_TREE
;
2044 tree next
= tree_cons (NULL_TREE
, in_tail
, NULL_TREE
);
2046 TREE_CHAIN (out_tail
) = next
;
2050 in_tail
= TREE_CHAIN (in_tail
);
2056 /* Return a newly created TREE_LIST node whose
2057 purpose and value fields are PARM and VALUE. */
2060 build_tree_list (parm
, value
)
2063 register tree t
= make_node (TREE_LIST
);
2064 TREE_PURPOSE (t
) = parm
;
2065 TREE_VALUE (t
) = value
;
2069 /* Similar, but build on the temp_decl_obstack. */
2072 build_decl_list (parm
, value
)
2076 register struct obstack
*ambient_obstack
= current_obstack
;
2078 current_obstack
= &temp_decl_obstack
;
2079 node
= build_tree_list (parm
, value
);
2080 current_obstack
= ambient_obstack
;
2084 /* Similar, but build on the expression_obstack. */
2087 build_expr_list (parm
, value
)
2091 register struct obstack
*ambient_obstack
= current_obstack
;
2093 current_obstack
= expression_obstack
;
2094 node
= build_tree_list (parm
, value
);
2095 current_obstack
= ambient_obstack
;
2099 /* Return a newly created TREE_LIST node whose
2100 purpose and value fields are PARM and VALUE
2101 and whose TREE_CHAIN is CHAIN. */
2104 tree_cons (purpose
, value
, chain
)
2105 tree purpose
, value
, chain
;
2110 node
= ggc_alloc_tree (sizeof (struct tree_list
));
2112 node
= (tree
) obstack_alloc (current_obstack
, sizeof (struct tree_list
));
2114 memset (node
, 0, sizeof (struct tree_common
));
2116 #ifdef GATHER_STATISTICS
2117 tree_node_counts
[(int) x_kind
]++;
2118 tree_node_sizes
[(int) x_kind
] += sizeof (struct tree_list
);
2121 TREE_SET_CODE (node
, TREE_LIST
);
2122 TREE_SET_PERMANENT (node
);
2124 TREE_CHAIN (node
) = chain
;
2125 TREE_PURPOSE (node
) = purpose
;
2126 TREE_VALUE (node
) = value
;
2130 /* Similar, but build on the temp_decl_obstack. */
2133 decl_tree_cons (purpose
, value
, chain
)
2134 tree purpose
, value
, chain
;
2137 register struct obstack
*ambient_obstack
= current_obstack
;
2139 current_obstack
= &temp_decl_obstack
;
2140 node
= tree_cons (purpose
, value
, chain
);
2141 current_obstack
= ambient_obstack
;
2145 /* Similar, but build on the expression_obstack. */
2148 expr_tree_cons (purpose
, value
, chain
)
2149 tree purpose
, value
, chain
;
2152 register struct obstack
*ambient_obstack
= current_obstack
;
2154 current_obstack
= expression_obstack
;
2155 node
= tree_cons (purpose
, value
, chain
);
2156 current_obstack
= ambient_obstack
;
2160 /* Same as `tree_cons' but make a permanent object. */
2163 perm_tree_cons (purpose
, value
, chain
)
2164 tree purpose
, value
, chain
;
2167 register struct obstack
*ambient_obstack
= current_obstack
;
2169 current_obstack
= &permanent_obstack
;
2170 node
= tree_cons (purpose
, value
, chain
);
2171 current_obstack
= ambient_obstack
;
2175 /* Same as `tree_cons', but make this node temporary, regardless. */
2178 temp_tree_cons (purpose
, value
, chain
)
2179 tree purpose
, value
, chain
;
2182 register struct obstack
*ambient_obstack
= current_obstack
;
2184 current_obstack
= &temporary_obstack
;
2185 node
= tree_cons (purpose
, value
, chain
);
2186 current_obstack
= ambient_obstack
;
2190 /* Same as `tree_cons', but save this node if the function's RTL is saved. */
2193 saveable_tree_cons (purpose
, value
, chain
)
2194 tree purpose
, value
, chain
;
2197 register struct obstack
*ambient_obstack
= current_obstack
;
2199 current_obstack
= saveable_obstack
;
2200 node
= tree_cons (purpose
, value
, chain
);
2201 current_obstack
= ambient_obstack
;
2205 /* Return the size nominally occupied by an object of type TYPE
2206 when it resides in memory. The value is measured in units of bytes,
2207 and its data type is that normally used for type sizes
2208 (which is the first type created by make_signed_type or
2209 make_unsigned_type). */
2212 size_in_bytes (type
)
2217 if (type
== error_mark_node
)
2218 return integer_zero_node
;
2220 type
= TYPE_MAIN_VARIANT (type
);
2221 t
= TYPE_SIZE_UNIT (type
);
2225 incomplete_type_error (NULL_TREE
, type
);
2226 return size_zero_node
;
2229 if (TREE_CODE (t
) == INTEGER_CST
)
2230 force_fit_type (t
, 0);
2235 /* Return the size of TYPE (in bytes) as a wide integer
2236 or return -1 if the size can vary or is larger than an integer. */
2239 int_size_in_bytes (type
)
2244 if (type
== error_mark_node
)
2247 type
= TYPE_MAIN_VARIANT (type
);
2248 t
= TYPE_SIZE_UNIT (type
);
2250 || TREE_CODE (t
) != INTEGER_CST
2251 || TREE_OVERFLOW (t
)
2252 || TREE_INT_CST_HIGH (t
) != 0
2253 /* If the result would appear negative, it's too big to represent. */
2254 || (HOST_WIDE_INT
) TREE_INT_CST_LOW (t
) < 0)
2257 return TREE_INT_CST_LOW (t
);
2260 /* Return the bit position of FIELD, in bits from the start of the record.
2261 This is a tree of type bitsizetype. */
2264 bit_position (field
)
2268 return bit_from_pos (DECL_FIELD_OFFSET (field
),
2269 DECL_FIELD_BIT_OFFSET (field
));
2272 /* Likewise, but return as an integer. Abort if it cannot be represented
2273 in that way (since it could be a signed value, we don't have the option
2274 of returning -1 like int_size_in_byte can. */
2277 int_bit_position (field
)
2280 return tree_low_cst (bit_position (field
), 0);
2283 /* Return the byte position of FIELD, in bytes from the start of the record.
2284 This is a tree of type sizetype. */
2287 byte_position (field
)
2290 return byte_from_pos (DECL_FIELD_OFFSET (field
),
2291 DECL_FIELD_BIT_OFFSET (field
));
2294 /* Likewise, but return as an integer. Abort if it cannot be represented
2295 in that way (since it could be a signed value, we don't have the option
2296 of returning -1 like int_size_in_byte can. */
2299 int_byte_position (field
)
2302 return tree_low_cst (byte_position (field
), 0);
2305 /* Return the strictest alignment, in bits, that T is known to have. */
2311 unsigned int align0
, align1
;
2313 switch (TREE_CODE (t
))
2315 case NOP_EXPR
: case CONVERT_EXPR
: case NON_LVALUE_EXPR
:
2316 /* If we have conversions, we know that the alignment of the
2317 object must meet each of the alignments of the types. */
2318 align0
= expr_align (TREE_OPERAND (t
, 0));
2319 align1
= TYPE_ALIGN (TREE_TYPE (t
));
2320 return MAX (align0
, align1
);
2322 case SAVE_EXPR
: case COMPOUND_EXPR
: case MODIFY_EXPR
:
2323 case INIT_EXPR
: case TARGET_EXPR
: case WITH_CLEANUP_EXPR
:
2324 case WITH_RECORD_EXPR
: case CLEANUP_POINT_EXPR
: case UNSAVE_EXPR
:
2325 /* These don't change the alignment of an object. */
2326 return expr_align (TREE_OPERAND (t
, 0));
2329 /* The best we can do is say that the alignment is the least aligned
2331 align0
= expr_align (TREE_OPERAND (t
, 1));
2332 align1
= expr_align (TREE_OPERAND (t
, 2));
2333 return MIN (align0
, align1
);
2335 case LABEL_DECL
: case CONST_DECL
:
2336 case VAR_DECL
: case PARM_DECL
: case RESULT_DECL
:
2337 if (DECL_ALIGN (t
) != 0)
2338 return DECL_ALIGN (t
);
2342 return FUNCTION_BOUNDARY
;
2348 /* Otherwise take the alignment from that of the type. */
2349 return TYPE_ALIGN (TREE_TYPE (t
));
2352 /* Return, as a tree node, the number of elements for TYPE (which is an
2353 ARRAY_TYPE) minus one. This counts only elements of the top array. */
2356 array_type_nelts (type
)
2359 tree index_type
, min
, max
;
2361 /* If they did it with unspecified bounds, then we should have already
2362 given an error about it before we got here. */
2363 if (! TYPE_DOMAIN (type
))
2364 return error_mark_node
;
2366 index_type
= TYPE_DOMAIN (type
);
2367 min
= TYPE_MIN_VALUE (index_type
);
2368 max
= TYPE_MAX_VALUE (index_type
);
2370 return (integer_zerop (min
)
2372 : fold (build (MINUS_EXPR
, TREE_TYPE (max
), max
, min
)));
2375 /* Return nonzero if arg is static -- a reference to an object in
2376 static storage. This is not the same as the C meaning of `static'. */
2382 switch (TREE_CODE (arg
))
2385 /* Nested functions aren't static, since taking their address
2386 involves a trampoline. */
2387 return (decl_function_context (arg
) == 0 || DECL_NO_STATIC_CHAIN (arg
))
2388 && ! DECL_NON_ADDR_CONST_P (arg
);
2391 return (TREE_STATIC (arg
) || DECL_EXTERNAL (arg
))
2392 && ! DECL_NON_ADDR_CONST_P (arg
);
2395 return TREE_STATIC (arg
);
2401 /* If we are referencing a bitfield, we can't evaluate an
2402 ADDR_EXPR at compile time and so it isn't a constant. */
2404 return (! DECL_BIT_FIELD (TREE_OPERAND (arg
, 1))
2405 && staticp (TREE_OPERAND (arg
, 0)));
2411 /* This case is technically correct, but results in setting
2412 TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
2415 return TREE_CONSTANT (TREE_OPERAND (arg
, 0));
2419 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg
))) == INTEGER_CST
2420 && TREE_CODE (TREE_OPERAND (arg
, 1)) == INTEGER_CST
)
2421 return staticp (TREE_OPERAND (arg
, 0));
2428 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2429 Do this to any expression which may be used in more than one place,
2430 but must be evaluated only once.
2432 Normally, expand_expr would reevaluate the expression each time.
2433 Calling save_expr produces something that is evaluated and recorded
2434 the first time expand_expr is called on it. Subsequent calls to
2435 expand_expr just reuse the recorded value.
2437 The call to expand_expr that generates code that actually computes
2438 the value is the first call *at compile time*. Subsequent calls
2439 *at compile time* generate code to use the saved value.
2440 This produces correct result provided that *at run time* control
2441 always flows through the insns made by the first expand_expr
2442 before reaching the other places where the save_expr was evaluated.
2443 You, the caller of save_expr, must make sure this is so.
2445 Constants, and certain read-only nodes, are returned with no
2446 SAVE_EXPR because that is safe. Expressions containing placeholders
2447 are not touched; see tree.def for an explanation of what these
2454 register tree t
= fold (expr
);
2456 /* We don't care about whether this can be used as an lvalue in this
2458 while (TREE_CODE (t
) == NON_LVALUE_EXPR
)
2459 t
= TREE_OPERAND (t
, 0);
2461 /* If the tree evaluates to a constant, then we don't want to hide that
2462 fact (i.e. this allows further folding, and direct checks for constants).
2463 However, a read-only object that has side effects cannot be bypassed.
2464 Since it is no problem to reevaluate literals, we just return the
2467 if (TREE_CONSTANT (t
) || (TREE_READONLY (t
) && ! TREE_SIDE_EFFECTS (t
))
2468 || TREE_CODE (t
) == SAVE_EXPR
|| TREE_CODE (t
) == ERROR_MARK
)
2471 /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2472 it means that the size or offset of some field of an object depends on
2473 the value within another field.
2475 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2476 and some variable since it would then need to be both evaluated once and
2477 evaluated more than once. Front-ends must assure this case cannot
2478 happen by surrounding any such subexpressions in their own SAVE_EXPR
2479 and forcing evaluation at the proper time. */
2480 if (contains_placeholder_p (t
))
2483 t
= build (SAVE_EXPR
, TREE_TYPE (expr
), t
, current_function_decl
, NULL_TREE
);
2485 /* This expression might be placed ahead of a jump to ensure that the
2486 value was computed on both sides of the jump. So make sure it isn't
2487 eliminated as dead. */
2488 TREE_SIDE_EFFECTS (t
) = 1;
2492 /* Arrange for an expression to be expanded multiple independent
2493 times. This is useful for cleanup actions, as the backend can
2494 expand them multiple times in different places. */
2502 /* If this is already protected, no sense in protecting it again. */
2503 if (TREE_CODE (expr
) == UNSAVE_EXPR
)
2506 t
= build1 (UNSAVE_EXPR
, TREE_TYPE (expr
), expr
);
2507 TREE_SIDE_EFFECTS (t
) = TREE_SIDE_EFFECTS (expr
);
2511 /* Returns the index of the first non-tree operand for CODE, or the number
2512 of operands if all are trees. */
2516 enum tree_code code
;
2522 case GOTO_SUBROUTINE_EXPR
:
2527 case WITH_CLEANUP_EXPR
:
2528 /* Should be defined to be 2. */
2530 case METHOD_CALL_EXPR
:
2533 return TREE_CODE_LENGTH (code
);
2537 /* Perform any modifications to EXPR required when it is unsaved. Does
2538 not recurse into EXPR's subtrees. */
2541 unsave_expr_1 (expr
)
2544 switch (TREE_CODE (expr
))
2547 if (! SAVE_EXPR_PERSISTENT_P (expr
))
2548 SAVE_EXPR_RTL (expr
) = 0;
2552 /* Don't mess with a TARGET_EXPR that hasn't been expanded.
2553 It's OK for this to happen if it was part of a subtree that
2554 isn't immediately expanded, such as operand 2 of another
2556 if (TREE_OPERAND (expr
, 1))
2559 TREE_OPERAND (expr
, 1) = TREE_OPERAND (expr
, 3);
2560 TREE_OPERAND (expr
, 3) = NULL_TREE
;
2564 /* I don't yet know how to emit a sequence multiple times. */
2565 if (RTL_EXPR_SEQUENCE (expr
) != 0)
2570 CALL_EXPR_RTL (expr
) = 0;
2574 if (lang_unsave_expr_now
!= 0)
2575 (*lang_unsave_expr_now
) (expr
);
2580 /* Helper function for unsave_expr_now. */
2583 unsave_expr_now_r (expr
)
2586 enum tree_code code
;
2588 /* There's nothing to do for NULL_TREE. */
2592 unsave_expr_1 (expr
);
2594 code
= TREE_CODE (expr
);
2595 switch (TREE_CODE_CLASS (code
))
2597 case 'c': /* a constant */
2598 case 't': /* a type node */
2599 case 'd': /* A decl node */
2600 case 'b': /* A block node */
2603 case 'x': /* miscellaneous: e.g., identifier, TREE_LIST or ERROR_MARK. */
2604 if (code
== TREE_LIST
)
2606 unsave_expr_now_r (TREE_VALUE (expr
));
2607 unsave_expr_now_r (TREE_CHAIN (expr
));
2611 case 'e': /* an expression */
2612 case 'r': /* a reference */
2613 case 's': /* an expression with side effects */
2614 case '<': /* a comparison expression */
2615 case '2': /* a binary arithmetic expression */
2616 case '1': /* a unary arithmetic expression */
2620 for (i
= first_rtl_op (code
) - 1; i
>= 0; i
--)
2621 unsave_expr_now_r (TREE_OPERAND (expr
, i
));
2630 /* Modify a tree in place so that all the evaluate only once things
2631 are cleared out. Return the EXPR given. */
2634 unsave_expr_now (expr
)
2637 if (lang_unsave
!= 0)
2638 (*lang_unsave
) (&expr
);
2640 unsave_expr_now_r (expr
);
2645 /* Return 0 if it is safe to evaluate EXPR multiple times,
2646 return 1 if it is safe if EXPR is unsaved afterward, or
2647 return 2 if it is completely unsafe.
2649 This assumes that CALL_EXPRs and TARGET_EXPRs are never replicated in
2650 an expression tree, so that it safe to unsave them and the surrounding
2651 context will be correct.
2653 SAVE_EXPRs basically *only* appear replicated in an expression tree,
2654 occasionally across the whole of a function. It is therefore only
2655 safe to unsave a SAVE_EXPR if you know that all occurrences appear
2656 below the UNSAVE_EXPR.
2658 RTL_EXPRs consume their rtl during evaluation. It is therefore
2659 never possible to unsave them. */
2662 unsafe_for_reeval (expr
)
2666 enum tree_code code
;
2671 if (expr
== NULL_TREE
)
2674 code
= TREE_CODE (expr
);
2675 first_rtl
= first_rtl_op (code
);
2684 for (exp
= expr
; exp
!= 0; exp
= TREE_CHAIN (exp
))
2686 tmp
= unsafe_for_reeval (TREE_VALUE (exp
));
2687 unsafeness
= MAX (tmp
, unsafeness
);
2693 tmp
= unsafe_for_reeval (TREE_OPERAND (expr
, 1));
2694 return MAX (tmp
, 1);
2701 /* ??? Add a lang hook if it becomes necessary. */
2705 switch (TREE_CODE_CLASS (code
))
2707 case 'c': /* a constant */
2708 case 't': /* a type node */
2709 case 'x': /* something random, like an identifier or an ERROR_MARK. */
2710 case 'd': /* A decl node */
2711 case 'b': /* A block node */
2714 case 'e': /* an expression */
2715 case 'r': /* a reference */
2716 case 's': /* an expression with side effects */
2717 case '<': /* a comparison expression */
2718 case '2': /* a binary arithmetic expression */
2719 case '1': /* a unary arithmetic expression */
2720 for (i
= first_rtl
- 1; i
>= 0; i
--)
2722 tmp
= unsafe_for_reeval (TREE_OPERAND (expr
, i
));
2723 unsafeness
= MAX (tmp
, unsafeness
);
2733 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2734 or offset that depends on a field within a record. */
2737 contains_placeholder_p (exp
)
2740 register enum tree_code code
;
2746 /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
2747 in it since it is supplying a value for it. */
2748 code
= TREE_CODE (exp
);
2749 if (code
== WITH_RECORD_EXPR
)
2751 else if (code
== PLACEHOLDER_EXPR
)
2754 switch (TREE_CODE_CLASS (code
))
2757 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2758 position computations since they will be converted into a
2759 WITH_RECORD_EXPR involving the reference, which will assume
2760 here will be valid. */
2761 return contains_placeholder_p (TREE_OPERAND (exp
, 0));
2764 if (code
== TREE_LIST
)
2765 return (contains_placeholder_p (TREE_VALUE (exp
))
2766 || (TREE_CHAIN (exp
) != 0
2767 && contains_placeholder_p (TREE_CHAIN (exp
))));
2776 /* Ignoring the first operand isn't quite right, but works best. */
2777 return contains_placeholder_p (TREE_OPERAND (exp
, 1));
2784 return (contains_placeholder_p (TREE_OPERAND (exp
, 0))
2785 || contains_placeholder_p (TREE_OPERAND (exp
, 1))
2786 || contains_placeholder_p (TREE_OPERAND (exp
, 2)));
2789 /* If we already know this doesn't have a placeholder, don't
2791 if (SAVE_EXPR_NOPLACEHOLDER (exp
) || SAVE_EXPR_RTL (exp
) != 0)
2794 SAVE_EXPR_NOPLACEHOLDER (exp
) = 1;
2795 result
= contains_placeholder_p (TREE_OPERAND (exp
, 0));
2797 SAVE_EXPR_NOPLACEHOLDER (exp
) = 0;
2802 return (TREE_OPERAND (exp
, 1) != 0
2803 && contains_placeholder_p (TREE_OPERAND (exp
, 1)));
2809 switch (TREE_CODE_LENGTH (code
))
2812 return contains_placeholder_p (TREE_OPERAND (exp
, 0));
2814 return (contains_placeholder_p (TREE_OPERAND (exp
, 0))
2815 || contains_placeholder_p (TREE_OPERAND (exp
, 1)));
2826 /* Return 1 if EXP contains any expressions that produce cleanups for an
2827 outer scope to deal with. Used by fold. */
2835 if (! TREE_SIDE_EFFECTS (exp
))
2838 switch (TREE_CODE (exp
))
2841 case GOTO_SUBROUTINE_EXPR
:
2842 case WITH_CLEANUP_EXPR
:
2845 case CLEANUP_POINT_EXPR
:
2849 for (exp
= TREE_OPERAND (exp
, 1); exp
; exp
= TREE_CHAIN (exp
))
2851 cmp
= has_cleanups (TREE_VALUE (exp
));
2861 /* This general rule works for most tree codes. All exceptions should be
2862 handled above. If this is a language-specific tree code, we can't
2863 trust what might be in the operand, so say we don't know
2865 if ((int) TREE_CODE (exp
) >= (int) LAST_AND_UNUSED_TREE_CODE
)
2868 nops
= first_rtl_op (TREE_CODE (exp
));
2869 for (i
= 0; i
< nops
; i
++)
2870 if (TREE_OPERAND (exp
, i
) != 0)
2872 int type
= TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp
, i
)));
2873 if (type
== 'e' || type
== '<' || type
== '1' || type
== '2'
2874 || type
== 'r' || type
== 's')
2876 cmp
= has_cleanups (TREE_OPERAND (exp
, i
));
2885 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2886 return a tree with all occurrences of references to F in a
2887 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
2888 contains only arithmetic expressions or a CALL_EXPR with a
2889 PLACEHOLDER_EXPR occurring only in its arglist. */
2892 substitute_in_expr (exp
, f
, r
)
2897 enum tree_code code
= TREE_CODE (exp
);
2902 switch (TREE_CODE_CLASS (code
))
2909 if (code
== PLACEHOLDER_EXPR
)
2911 else if (code
== TREE_LIST
)
2913 op0
= (TREE_CHAIN (exp
) == 0
2914 ? 0 : substitute_in_expr (TREE_CHAIN (exp
), f
, r
));
2915 op1
= substitute_in_expr (TREE_VALUE (exp
), f
, r
);
2916 if (op0
== TREE_CHAIN (exp
) && op1
== TREE_VALUE (exp
))
2919 return tree_cons (TREE_PURPOSE (exp
), op1
, op0
);
2928 switch (TREE_CODE_LENGTH (code
))
2931 op0
= substitute_in_expr (TREE_OPERAND (exp
, 0), f
, r
);
2932 if (op0
== TREE_OPERAND (exp
, 0))
2935 new = fold (build1 (code
, TREE_TYPE (exp
), op0
));
2939 /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
2940 could, but we don't support it. */
2941 if (code
== RTL_EXPR
)
2943 else if (code
== CONSTRUCTOR
)
2946 op0
= substitute_in_expr (TREE_OPERAND (exp
, 0), f
, r
);
2947 op1
= substitute_in_expr (TREE_OPERAND (exp
, 1), f
, r
);
2948 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1))
2951 new = fold (build (code
, TREE_TYPE (exp
), op0
, op1
));
2955 /* It cannot be that anything inside a SAVE_EXPR contains a
2956 PLACEHOLDER_EXPR. */
2957 if (code
== SAVE_EXPR
)
2960 else if (code
== CALL_EXPR
)
2962 op1
= substitute_in_expr (TREE_OPERAND (exp
, 1), f
, r
);
2963 if (op1
== TREE_OPERAND (exp
, 1))
2966 return build (code
, TREE_TYPE (exp
),
2967 TREE_OPERAND (exp
, 0), op1
, NULL_TREE
);
2970 else if (code
!= COND_EXPR
)
2973 op0
= substitute_in_expr (TREE_OPERAND (exp
, 0), f
, r
);
2974 op1
= substitute_in_expr (TREE_OPERAND (exp
, 1), f
, r
);
2975 op2
= substitute_in_expr (TREE_OPERAND (exp
, 2), f
, r
);
2976 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1)
2977 && op2
== TREE_OPERAND (exp
, 2))
2980 new = fold (build (code
, TREE_TYPE (exp
), op0
, op1
, op2
));
2993 /* If this expression is getting a value from a PLACEHOLDER_EXPR
2994 and it is the right field, replace it with R. */
2995 for (inner
= TREE_OPERAND (exp
, 0);
2996 TREE_CODE_CLASS (TREE_CODE (inner
)) == 'r';
2997 inner
= TREE_OPERAND (inner
, 0))
2999 if (TREE_CODE (inner
) == PLACEHOLDER_EXPR
3000 && TREE_OPERAND (exp
, 1) == f
)
3003 /* If this expression hasn't been completed let, leave it
3005 if (TREE_CODE (inner
) == PLACEHOLDER_EXPR
3006 && TREE_TYPE (inner
) == 0)
3009 op0
= substitute_in_expr (TREE_OPERAND (exp
, 0), f
, r
);
3010 if (op0
== TREE_OPERAND (exp
, 0))
3013 new = fold (build (code
, TREE_TYPE (exp
), op0
,
3014 TREE_OPERAND (exp
, 1)));
3018 op0
= substitute_in_expr (TREE_OPERAND (exp
, 0), f
, r
);
3019 op1
= substitute_in_expr (TREE_OPERAND (exp
, 1), f
, r
);
3020 op2
= substitute_in_expr (TREE_OPERAND (exp
, 2), f
, r
);
3021 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1)
3022 && op2
== TREE_OPERAND (exp
, 2))
3025 new = fold (build (code
, TREE_TYPE (exp
), op0
, op1
, op2
));
3030 op0
= substitute_in_expr (TREE_OPERAND (exp
, 0), f
, r
);
3031 if (op0
== TREE_OPERAND (exp
, 0))
3034 new = fold (build1 (code
, TREE_TYPE (exp
), op0
));
3046 TREE_READONLY (new) = TREE_READONLY (exp
);
3050 /* Stabilize a reference so that we can use it any number of times
3051 without causing its operands to be evaluated more than once.
3052 Returns the stabilized reference. This works by means of save_expr,
3053 so see the caveats in the comments about save_expr.
3055 Also allows conversion expressions whose operands are references.
3056 Any other kind of expression is returned unchanged. */
3059 stabilize_reference (ref
)
3062 register tree result
;
3063 register enum tree_code code
= TREE_CODE (ref
);
3070 /* No action is needed in this case. */
3076 case FIX_TRUNC_EXPR
:
3077 case FIX_FLOOR_EXPR
:
3078 case FIX_ROUND_EXPR
:
3080 result
= build_nt (code
, stabilize_reference (TREE_OPERAND (ref
, 0)));
3084 result
= build_nt (INDIRECT_REF
,
3085 stabilize_reference_1 (TREE_OPERAND (ref
, 0)));
3089 result
= build_nt (COMPONENT_REF
,
3090 stabilize_reference (TREE_OPERAND (ref
, 0)),
3091 TREE_OPERAND (ref
, 1));
3095 result
= build_nt (BIT_FIELD_REF
,
3096 stabilize_reference (TREE_OPERAND (ref
, 0)),
3097 stabilize_reference_1 (TREE_OPERAND (ref
, 1)),
3098 stabilize_reference_1 (TREE_OPERAND (ref
, 2)));
3102 result
= build_nt (ARRAY_REF
,
3103 stabilize_reference (TREE_OPERAND (ref
, 0)),
3104 stabilize_reference_1 (TREE_OPERAND (ref
, 1)));
3108 /* We cannot wrap the first expression in a SAVE_EXPR, as then
3109 it wouldn't be ignored. This matters when dealing with
3111 return stabilize_reference_1 (ref
);
3114 result
= build1 (INDIRECT_REF
, TREE_TYPE (ref
),
3115 save_expr (build1 (ADDR_EXPR
,
3116 build_pointer_type (TREE_TYPE (ref
)),
3120 /* If arg isn't a kind of lvalue we recognize, make no change.
3121 Caller should recognize the error for an invalid lvalue. */
3126 return error_mark_node
;
3129 TREE_TYPE (result
) = TREE_TYPE (ref
);
3130 TREE_READONLY (result
) = TREE_READONLY (ref
);
3131 TREE_SIDE_EFFECTS (result
) = TREE_SIDE_EFFECTS (ref
);
3132 TREE_THIS_VOLATILE (result
) = TREE_THIS_VOLATILE (ref
);
3137 /* Subroutine of stabilize_reference; this is called for subtrees of
3138 references. Any expression with side-effects must be put in a SAVE_EXPR
3139 to ensure that it is only evaluated once.
3141 We don't put SAVE_EXPR nodes around everything, because assigning very
3142 simple expressions to temporaries causes us to miss good opportunities
3143 for optimizations. Among other things, the opportunity to fold in the
3144 addition of a constant into an addressing mode often gets lost, e.g.
3145 "y[i+1] += x;". In general, we take the approach that we should not make
3146 an assignment unless we are forced into it - i.e., that any non-side effect
3147 operator should be allowed, and that cse should take care of coalescing
3148 multiple utterances of the same expression should that prove fruitful. */
3151 stabilize_reference_1 (e
)
3154 register tree result
;
3155 register enum tree_code code
= TREE_CODE (e
);
3157 /* We cannot ignore const expressions because it might be a reference
3158 to a const array but whose index contains side-effects. But we can
3159 ignore things that are actual constant or that already have been
3160 handled by this function. */
3162 if (TREE_CONSTANT (e
) || code
== SAVE_EXPR
)
3165 switch (TREE_CODE_CLASS (code
))
3175 /* If the expression has side-effects, then encase it in a SAVE_EXPR
3176 so that it will only be evaluated once. */
3177 /* The reference (r) and comparison (<) classes could be handled as
3178 below, but it is generally faster to only evaluate them once. */
3179 if (TREE_SIDE_EFFECTS (e
))
3180 return save_expr (e
);
3184 /* Constants need no processing. In fact, we should never reach
3189 /* Division is slow and tends to be compiled with jumps,
3190 especially the division by powers of 2 that is often
3191 found inside of an array reference. So do it just once. */
3192 if (code
== TRUNC_DIV_EXPR
|| code
== TRUNC_MOD_EXPR
3193 || code
== FLOOR_DIV_EXPR
|| code
== FLOOR_MOD_EXPR
3194 || code
== CEIL_DIV_EXPR
|| code
== CEIL_MOD_EXPR
3195 || code
== ROUND_DIV_EXPR
|| code
== ROUND_MOD_EXPR
)
3196 return save_expr (e
);
3197 /* Recursively stabilize each operand. */
3198 result
= build_nt (code
, stabilize_reference_1 (TREE_OPERAND (e
, 0)),
3199 stabilize_reference_1 (TREE_OPERAND (e
, 1)));
3203 /* Recursively stabilize each operand. */
3204 result
= build_nt (code
, stabilize_reference_1 (TREE_OPERAND (e
, 0)));
3211 TREE_TYPE (result
) = TREE_TYPE (e
);
3212 TREE_READONLY (result
) = TREE_READONLY (e
);
3213 TREE_SIDE_EFFECTS (result
) = TREE_SIDE_EFFECTS (e
);
3214 TREE_THIS_VOLATILE (result
) = TREE_THIS_VOLATILE (e
);
3219 /* Low-level constructors for expressions. */
3221 /* Build an expression of code CODE, data type TYPE,
3222 and operands as specified by the arguments ARG1 and following arguments.
3223 Expressions and reference nodes can be created this way.
3224 Constants, decls, types and misc nodes cannot be. */
3227 build
VPARAMS ((enum tree_code code
, tree tt
, ...))
3229 #ifndef ANSI_PROTOTYPES
3230 enum tree_code code
;
3235 register int length
;
3241 #ifndef ANSI_PROTOTYPES
3242 code
= va_arg (p
, enum tree_code
);
3243 tt
= va_arg (p
, tree
);
3246 t
= make_node (code
);
3247 length
= TREE_CODE_LENGTH (code
);
3250 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_RAISED for
3251 the result based on those same flags for the arguments. But, if
3252 the arguments aren't really even `tree' expressions, we shouldn't
3253 be trying to do this. */
3254 fro
= first_rtl_op (code
);
3258 /* This is equivalent to the loop below, but faster. */
3259 register tree arg0
= va_arg (p
, tree
);
3260 register tree arg1
= va_arg (p
, tree
);
3261 TREE_OPERAND (t
, 0) = arg0
;
3262 TREE_OPERAND (t
, 1) = arg1
;
3263 if (arg0
&& fro
> 0)
3265 if (TREE_SIDE_EFFECTS (arg0
))
3266 TREE_SIDE_EFFECTS (t
) = 1;
3268 if (arg1
&& fro
> 1)
3270 if (TREE_SIDE_EFFECTS (arg1
))
3271 TREE_SIDE_EFFECTS (t
) = 1;
3274 else if (length
== 1)
3276 register tree arg0
= va_arg (p
, tree
);
3278 /* Call build1 for this! */
3279 if (TREE_CODE_CLASS (code
) != 's')
3281 TREE_OPERAND (t
, 0) = arg0
;
3284 if (arg0
&& TREE_SIDE_EFFECTS (arg0
))
3285 TREE_SIDE_EFFECTS (t
) = 1;
3290 for (i
= 0; i
< length
; i
++)
3292 register tree operand
= va_arg (p
, tree
);
3293 TREE_OPERAND (t
, i
) = operand
;
3294 if (operand
&& fro
> i
)
3296 if (TREE_SIDE_EFFECTS (operand
))
3297 TREE_SIDE_EFFECTS (t
) = 1;
3305 /* Same as above, but only builds for unary operators.
3306 Saves lions share of calls to `build'; cuts down use
3307 of varargs, which is expensive for RISC machines. */
3310 build1 (code
, type
, node
)
3311 enum tree_code code
;
3315 register struct obstack
*obstack
= expression_obstack
;
3316 register int length
;
3317 #ifdef GATHER_STATISTICS
3318 register tree_node_kind kind
;
3322 #ifdef GATHER_STATISTICS
3323 if (TREE_CODE_CLASS (code
) == 'r')
3329 length
= sizeof (struct tree_exp
);
3332 t
= ggc_alloc_tree (length
);
3334 t
= (tree
) obstack_alloc (obstack
, length
);
3336 memset ((PTR
) t
, 0, sizeof (struct tree_common
));
3338 #ifdef GATHER_STATISTICS
3339 tree_node_counts
[(int) kind
]++;
3340 tree_node_sizes
[(int) kind
] += length
;
3343 TREE_SET_CODE (t
, code
);
3344 TREE_SET_PERMANENT (t
);
3346 TREE_TYPE (t
) = type
;
3347 TREE_COMPLEXITY (t
) = 0;
3348 TREE_OPERAND (t
, 0) = node
;
3349 if (node
&& first_rtl_op (code
) != 0 && TREE_SIDE_EFFECTS (node
))
3350 TREE_SIDE_EFFECTS (t
) = 1;
3358 case PREDECREMENT_EXPR
:
3359 case PREINCREMENT_EXPR
:
3360 case POSTDECREMENT_EXPR
:
3361 case POSTINCREMENT_EXPR
:
3362 /* All of these have side-effects, no matter what their
3364 TREE_SIDE_EFFECTS (t
) = 1;
3374 /* Similar except don't specify the TREE_TYPE
3375 and leave the TREE_SIDE_EFFECTS as 0.
3376 It is permissible for arguments to be null,
3377 or even garbage if their values do not matter. */
3380 build_nt
VPARAMS ((enum tree_code code
, ...))
3382 #ifndef ANSI_PROTOTYPES
3383 enum tree_code code
;
3387 register int length
;
3392 #ifndef ANSI_PROTOTYPES
3393 code
= va_arg (p
, enum tree_code
);
3396 t
= make_node (code
);
3397 length
= TREE_CODE_LENGTH (code
);
3399 for (i
= 0; i
< length
; i
++)
3400 TREE_OPERAND (t
, i
) = va_arg (p
, tree
);
3406 /* Similar to `build_nt', except we build
3407 on the temp_decl_obstack, regardless. */
3410 build_parse_node
VPARAMS ((enum tree_code code
, ...))
3412 #ifndef ANSI_PROTOTYPES
3413 enum tree_code code
;
3415 register struct obstack
*ambient_obstack
= expression_obstack
;
3418 register int length
;
3423 #ifndef ANSI_PROTOTYPES
3424 code
= va_arg (p
, enum tree_code
);
3427 expression_obstack
= &temp_decl_obstack
;
3429 t
= make_node (code
);
3430 length
= TREE_CODE_LENGTH (code
);
3432 for (i
= 0; i
< length
; i
++)
3433 TREE_OPERAND (t
, i
) = va_arg (p
, tree
);
3436 expression_obstack
= ambient_obstack
;
3441 /* Commented out because this wants to be done very
3442 differently. See cp-lex.c. */
3444 build_op_identifier (op1
, op2
)
3447 register tree t
= make_node (OP_IDENTIFIER
);
3448 TREE_PURPOSE (t
) = op1
;
3449 TREE_VALUE (t
) = op2
;
3454 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3455 We do NOT enter this node in any sort of symbol table.
3457 layout_decl is used to set up the decl's storage layout.
3458 Other slots are initialized to 0 or null pointers. */
3461 build_decl (code
, name
, type
)
3462 enum tree_code code
;
3467 t
= make_node (code
);
3469 /* if (type == error_mark_node)
3470 type = integer_type_node; */
3471 /* That is not done, deliberately, so that having error_mark_node
3472 as the type can suppress useless errors in the use of this variable. */
3474 DECL_NAME (t
) = name
;
3475 DECL_ASSEMBLER_NAME (t
) = name
;
3476 TREE_TYPE (t
) = type
;
3478 if (code
== VAR_DECL
|| code
== PARM_DECL
|| code
== RESULT_DECL
)
3480 else if (code
== FUNCTION_DECL
)
3481 DECL_MODE (t
) = FUNCTION_MODE
;
3486 /* BLOCK nodes are used to represent the structure of binding contours
3487 and declarations, once those contours have been exited and their contents
3488 compiled. This information is used for outputting debugging info. */
3491 build_block (vars
, tags
, subblocks
, supercontext
, chain
)
3492 tree vars
, tags ATTRIBUTE_UNUSED
, subblocks
, supercontext
, chain
;
3494 register tree block
= make_node (BLOCK
);
3496 BLOCK_VARS (block
) = vars
;
3497 BLOCK_SUBBLOCKS (block
) = subblocks
;
3498 BLOCK_SUPERCONTEXT (block
) = supercontext
;
3499 BLOCK_CHAIN (block
) = chain
;
3503 /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
3504 location where an expression or an identifier were encountered. It
3505 is necessary for languages where the frontend parser will handle
3506 recursively more than one file (Java is one of them). */
3509 build_expr_wfl (node
, file
, line
, col
)
3514 static const char *last_file
= 0;
3515 static tree last_filenode
= NULL_TREE
;
3516 register tree wfl
= make_node (EXPR_WITH_FILE_LOCATION
);
3518 EXPR_WFL_NODE (wfl
) = node
;
3519 EXPR_WFL_SET_LINECOL (wfl
, line
, col
);
3520 if (file
!= last_file
)
3523 last_filenode
= file
? get_identifier (file
) : NULL_TREE
;
3526 EXPR_WFL_FILENAME_NODE (wfl
) = last_filenode
;
3529 TREE_SIDE_EFFECTS (wfl
) = TREE_SIDE_EFFECTS (node
);
3530 TREE_TYPE (wfl
) = TREE_TYPE (node
);
3536 /* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE
3540 build_decl_attribute_variant (ddecl
, attribute
)
3541 tree ddecl
, attribute
;
3543 DECL_MACHINE_ATTRIBUTES (ddecl
) = attribute
;
3547 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3550 Record such modified types already made so we don't make duplicates. */
3553 build_type_attribute_variant (ttype
, attribute
)
3554 tree ttype
, attribute
;
3556 if ( ! attribute_list_equal (TYPE_ATTRIBUTES (ttype
), attribute
))
3558 unsigned int hashcode
;
3561 push_obstacks (TYPE_OBSTACK (ttype
), TYPE_OBSTACK (ttype
));
3562 ntype
= copy_node (ttype
);
3564 TYPE_POINTER_TO (ntype
) = 0;
3565 TYPE_REFERENCE_TO (ntype
) = 0;
3566 TYPE_ATTRIBUTES (ntype
) = attribute
;
3568 /* Create a new main variant of TYPE. */
3569 TYPE_MAIN_VARIANT (ntype
) = ntype
;
3570 TYPE_NEXT_VARIANT (ntype
) = 0;
3571 set_type_quals (ntype
, TYPE_UNQUALIFIED
);
3573 hashcode
= (TYPE_HASH (TREE_CODE (ntype
))
3574 + TYPE_HASH (TREE_TYPE (ntype
))
3575 + attribute_hash_list (attribute
));
3577 switch (TREE_CODE (ntype
))
3580 hashcode
+= TYPE_HASH (TYPE_ARG_TYPES (ntype
));
3583 hashcode
+= TYPE_HASH (TYPE_DOMAIN (ntype
));
3586 hashcode
+= TYPE_HASH (TYPE_MAX_VALUE (ntype
));
3589 hashcode
+= TYPE_HASH (TYPE_PRECISION (ntype
));
3595 ntype
= type_hash_canon (hashcode
, ntype
);
3596 ttype
= build_qualified_type (ntype
, TYPE_QUALS (ttype
));
3603 /* Return a 1 if ATTR_NAME and ATTR_ARGS is valid for either declaration DECL
3604 or type TYPE and 0 otherwise. Validity is determined the configuration
3605 macros VALID_MACHINE_DECL_ATTRIBUTE and VALID_MACHINE_TYPE_ATTRIBUTE. */
3608 valid_machine_attribute (attr_name
, attr_args
, decl
, type
)
3610 tree attr_args ATTRIBUTE_UNUSED
;
3611 tree decl ATTRIBUTE_UNUSED
;
3612 tree type ATTRIBUTE_UNUSED
;
3615 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3616 tree decl_attr_list
= decl
!= 0 ? DECL_MACHINE_ATTRIBUTES (decl
) : 0;
3618 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3619 tree type_attr_list
= TYPE_ATTRIBUTES (type
);
3622 if (TREE_CODE (attr_name
) != IDENTIFIER_NODE
)
3625 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3627 && VALID_MACHINE_DECL_ATTRIBUTE (decl
, decl_attr_list
, attr_name
,
3630 tree attr
= lookup_attribute (IDENTIFIER_POINTER (attr_name
),
3633 if (attr
!= NULL_TREE
)
3635 /* Override existing arguments. Declarations are unique so we can
3636 modify this in place. */
3637 TREE_VALUE (attr
) = attr_args
;
3641 decl_attr_list
= tree_cons (attr_name
, attr_args
, decl_attr_list
);
3642 decl
= build_decl_attribute_variant (decl
, decl_attr_list
);
3649 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3651 /* Don't apply the attribute to both the decl and the type. */
3653 else if (VALID_MACHINE_TYPE_ATTRIBUTE (type
, type_attr_list
, attr_name
,
3656 tree attr
= lookup_attribute (IDENTIFIER_POINTER (attr_name
),
3659 if (attr
!= NULL_TREE
)
3661 /* Override existing arguments.
3662 ??? This currently works since attribute arguments are not
3663 included in `attribute_hash_list'. Something more complicated
3664 may be needed in the future. */
3665 TREE_VALUE (attr
) = attr_args
;
3669 /* If this is part of a declaration, create a type variant,
3670 otherwise, this is part of a type definition, so add it
3671 to the base type. */
3672 type_attr_list
= tree_cons (attr_name
, attr_args
, type_attr_list
);
3674 type
= build_type_attribute_variant (type
, type_attr_list
);
3676 TYPE_ATTRIBUTES (type
) = type_attr_list
;
3680 TREE_TYPE (decl
) = type
;
3685 /* Handle putting a type attribute on pointer-to-function-type by putting
3686 the attribute on the function type. */
3687 else if (POINTER_TYPE_P (type
)
3688 && TREE_CODE (TREE_TYPE (type
)) == FUNCTION_TYPE
3689 && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type
), type_attr_list
,
3690 attr_name
, attr_args
))
3692 tree inner_type
= TREE_TYPE (type
);
3693 tree inner_attr_list
= TYPE_ATTRIBUTES (inner_type
);
3694 tree attr
= lookup_attribute (IDENTIFIER_POINTER (attr_name
),
3697 if (attr
!= NULL_TREE
)
3698 TREE_VALUE (attr
) = attr_args
;
3701 inner_attr_list
= tree_cons (attr_name
, attr_args
, inner_attr_list
);
3702 inner_type
= build_type_attribute_variant (inner_type
,
3707 TREE_TYPE (decl
) = build_pointer_type (inner_type
);
3710 /* Clear TYPE_POINTER_TO for the old inner type, since
3711 `type' won't be pointing to it anymore. */
3712 TYPE_POINTER_TO (TREE_TYPE (type
)) = NULL_TREE
;
3713 TREE_TYPE (type
) = inner_type
;
3723 /* Return non-zero if IDENT is a valid name for attribute ATTR,
3726 We try both `text' and `__text__', ATTR may be either one. */
3727 /* ??? It might be a reasonable simplification to require ATTR to be only
3728 `text'. One might then also require attribute lists to be stored in
3729 their canonicalized form. */
3732 is_attribute_p (attr
, ident
)
3736 int ident_len
, attr_len
;
3739 if (TREE_CODE (ident
) != IDENTIFIER_NODE
)
3742 if (strcmp (attr
, IDENTIFIER_POINTER (ident
)) == 0)
3745 p
= IDENTIFIER_POINTER (ident
);
3746 ident_len
= strlen (p
);
3747 attr_len
= strlen (attr
);
3749 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
3753 || attr
[attr_len
- 2] != '_'
3754 || attr
[attr_len
- 1] != '_')
3756 if (ident_len
== attr_len
- 4
3757 && strncmp (attr
+ 2, p
, attr_len
- 4) == 0)
3762 if (ident_len
== attr_len
+ 4
3763 && p
[0] == '_' && p
[1] == '_'
3764 && p
[ident_len
- 2] == '_' && p
[ident_len
- 1] == '_'
3765 && strncmp (attr
, p
+ 2, attr_len
) == 0)
3772 /* Given an attribute name and a list of attributes, return a pointer to the
3773 attribute's list element if the attribute is part of the list, or NULL_TREE
3777 lookup_attribute (attr_name
, list
)
3778 const char *attr_name
;
3783 for (l
= list
; l
; l
= TREE_CHAIN (l
))
3785 if (TREE_CODE (TREE_PURPOSE (l
)) != IDENTIFIER_NODE
)
3787 if (is_attribute_p (attr_name
, TREE_PURPOSE (l
)))
3794 /* Return an attribute list that is the union of a1 and a2. */
3797 merge_attributes (a1
, a2
)
3798 register tree a1
, a2
;
3802 /* Either one unset? Take the set one. */
3804 if ((attributes
= a1
) == 0)
3807 /* One that completely contains the other? Take it. */
3809 else if (a2
!= 0 && ! attribute_list_contained (a1
, a2
))
3811 if (attribute_list_contained (a2
, a1
))
3815 /* Pick the longest list, and hang on the other list. */
3816 /* ??? For the moment we punt on the issue of attrs with args. */
3818 if (list_length (a1
) < list_length (a2
))
3819 attributes
= a2
, a2
= a1
;
3821 for (; a2
!= 0; a2
= TREE_CHAIN (a2
))
3822 if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2
)),
3823 attributes
) == NULL_TREE
)
3825 a1
= copy_node (a2
);
3826 TREE_CHAIN (a1
) = attributes
;
3834 /* Given types T1 and T2, merge their attributes and return
3838 merge_machine_type_attributes (t1
, t2
)
3841 #ifdef MERGE_MACHINE_TYPE_ATTRIBUTES
3842 return MERGE_MACHINE_TYPE_ATTRIBUTES (t1
, t2
);
3844 return merge_attributes (TYPE_ATTRIBUTES (t1
),
3845 TYPE_ATTRIBUTES (t2
));
3849 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3853 merge_machine_decl_attributes (olddecl
, newdecl
)
3854 tree olddecl
, newdecl
;
3856 #ifdef MERGE_MACHINE_DECL_ATTRIBUTES
3857 return MERGE_MACHINE_DECL_ATTRIBUTES (olddecl
, newdecl
);
3859 return merge_attributes (DECL_MACHINE_ATTRIBUTES (olddecl
),
3860 DECL_MACHINE_ATTRIBUTES (newdecl
));
3864 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3865 of the various TYPE_QUAL values. */
3868 set_type_quals (type
, type_quals
)
3872 TYPE_READONLY (type
) = (type_quals
& TYPE_QUAL_CONST
) != 0;
3873 TYPE_VOLATILE (type
) = (type_quals
& TYPE_QUAL_VOLATILE
) != 0;
3874 TYPE_RESTRICT (type
) = (type_quals
& TYPE_QUAL_RESTRICT
) != 0;
3877 /* Given a type node TYPE and a TYPE_QUALIFIER_SET, return a type for
3878 the same kind of data as TYPE describes. Variants point to the
3879 "main variant" (which has no qualifiers set) via TYPE_MAIN_VARIANT,
3880 and it points to a chain of other variants so that duplicate
3881 variants are never made. Only main variants should ever appear as
3882 types of expressions. */
3885 build_qualified_type (type
, type_quals
)
3891 /* Search the chain of variants to see if there is already one there just
3892 like the one we need to have. If so, use that existing one. We must
3893 preserve the TYPE_NAME, since there is code that depends on this. */
3895 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
3896 if (TYPE_QUALS (t
) == type_quals
&& TYPE_NAME (t
) == TYPE_NAME (type
))
3899 /* We need a new one. */
3900 t
= build_type_copy (type
);
3901 set_type_quals (t
, type_quals
);
3905 /* Create a new variant of TYPE, equivalent but distinct.
3906 This is so the caller can modify it. */
3909 build_type_copy (type
)
3912 register tree t
, m
= TYPE_MAIN_VARIANT (type
);
3913 register struct obstack
*ambient_obstack
= current_obstack
;
3915 current_obstack
= TYPE_OBSTACK (type
);
3916 t
= copy_node (type
);
3917 current_obstack
= ambient_obstack
;
3919 TYPE_POINTER_TO (t
) = 0;
3920 TYPE_REFERENCE_TO (t
) = 0;
3922 /* Add this type to the chain of variants of TYPE. */
3923 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (m
);
3924 TYPE_NEXT_VARIANT (m
) = t
;
3929 /* Hashing of types so that we don't make duplicates.
3930 The entry point is `type_hash_canon'. */
3932 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3933 with types in the TREE_VALUE slots), by adding the hash codes
3934 of the individual types. */
3937 type_hash_list (list
)
3940 unsigned int hashcode
;
3943 for (hashcode
= 0, tail
= list
; tail
; tail
= TREE_CHAIN (tail
))
3944 hashcode
+= TYPE_HASH (TREE_VALUE (tail
));
3949 /* These are the Hashtable callback functions. */
3951 /* Returns true if the types are equal. */
3954 type_hash_eq (va
, vb
)
3958 const struct type_hash
*a
= va
, *b
= vb
;
3959 if (a
->hash
== b
->hash
3960 && TREE_CODE (a
->type
) == TREE_CODE (b
->type
)
3961 && TREE_TYPE (a
->type
) == TREE_TYPE (b
->type
)
3962 && attribute_list_equal (TYPE_ATTRIBUTES (a
->type
),
3963 TYPE_ATTRIBUTES (b
->type
))
3964 && TYPE_ALIGN (a
->type
) == TYPE_ALIGN (b
->type
)
3965 && (TYPE_MAX_VALUE (a
->type
) == TYPE_MAX_VALUE (b
->type
)
3966 || tree_int_cst_equal (TYPE_MAX_VALUE (a
->type
),
3967 TYPE_MAX_VALUE (b
->type
)))
3968 && (TYPE_MIN_VALUE (a
->type
) == TYPE_MIN_VALUE (b
->type
)
3969 || tree_int_cst_equal (TYPE_MIN_VALUE (a
->type
),
3970 TYPE_MIN_VALUE (b
->type
)))
3971 /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE. */
3972 && (TYPE_DOMAIN (a
->type
) == TYPE_DOMAIN (b
->type
)
3973 || (TYPE_DOMAIN (a
->type
)
3974 && TREE_CODE (TYPE_DOMAIN (a
->type
)) == TREE_LIST
3975 && TYPE_DOMAIN (b
->type
)
3976 && TREE_CODE (TYPE_DOMAIN (b
->type
)) == TREE_LIST
3977 && type_list_equal (TYPE_DOMAIN (a
->type
),
3978 TYPE_DOMAIN (b
->type
)))))
3983 /* Return the cached hash value. */
3986 type_hash_hash (item
)
3989 return ((const struct type_hash
*) item
)->hash
;
3992 /* Look in the type hash table for a type isomorphic to TYPE.
3993 If one is found, return it. Otherwise return 0. */
3996 type_hash_lookup (hashcode
, type
)
3997 unsigned int hashcode
;
4000 struct type_hash
*h
, in
;
4002 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
4003 must call that routine before comparing TYPE_ALIGNs. */
4009 h
= htab_find_with_hash (type_hash_table
, &in
, hashcode
);
4015 /* Add an entry to the type-hash-table
4016 for a type TYPE whose hash code is HASHCODE. */
4019 type_hash_add (hashcode
, type
)
4020 unsigned int hashcode
;
4023 struct type_hash
*h
;
4026 h
= (struct type_hash
*) permalloc (sizeof (struct type_hash
));
4029 loc
= htab_find_slot_with_hash (type_hash_table
, h
, hashcode
, INSERT
);
4030 *(struct type_hash
**) loc
= h
;
4033 /* Given TYPE, and HASHCODE its hash code, return the canonical
4034 object for an identical type if one already exists.
4035 Otherwise, return TYPE, and record it as the canonical object
4036 if it is a permanent object.
4038 To use this function, first create a type of the sort you want.
4039 Then compute its hash code from the fields of the type that
4040 make it different from other similar types.
4041 Then call this function and use the value.
4042 This function frees the type you pass in if it is a duplicate. */
4044 /* Set to 1 to debug without canonicalization. Never set by program. */
4045 int debug_no_type_hash
= 0;
4048 type_hash_canon (hashcode
, type
)
4049 unsigned int hashcode
;
4054 if (debug_no_type_hash
)
4057 t1
= type_hash_lookup (hashcode
, type
);
4061 obstack_free (TYPE_OBSTACK (type
), type
);
4063 #ifdef GATHER_STATISTICS
4064 tree_node_counts
[(int) t_kind
]--;
4065 tree_node_sizes
[(int) t_kind
] -= sizeof (struct tree_type
);
4070 /* If this is a permanent type, record it for later reuse. */
4071 if (ggc_p
|| TREE_PERMANENT (type
))
4072 type_hash_add (hashcode
, type
);
4077 /* Callback function for htab_traverse. */
4080 mark_hash_entry (entry
, param
)
4082 void *param ATTRIBUTE_UNUSED
;
4084 struct type_hash
*p
= *(struct type_hash
**) entry
;
4086 ggc_mark_tree (p
->type
);
4088 /* Continue scan. */
4092 /* Mark ARG (which is really a htab_t *) for GC. */
4095 mark_type_hash (arg
)
4098 htab_t t
= *(htab_t
*) arg
;
4100 htab_traverse (t
, mark_hash_entry
, 0);
4104 print_type_hash_statistics ()
4106 fprintf (stderr
, "Type hash: size %ld, %ld elements, %f collisions\n",
4107 (long) htab_size (type_hash_table
),
4108 (long) htab_elements (type_hash_table
),
4109 htab_collisions (type_hash_table
));
4112 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
4113 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
4114 by adding the hash codes of the individual attributes. */
4117 attribute_hash_list (list
)
4120 unsigned int hashcode
;
4123 for (hashcode
= 0, tail
= list
; tail
; tail
= TREE_CHAIN (tail
))
4124 /* ??? Do we want to add in TREE_VALUE too? */
4125 hashcode
+= TYPE_HASH (TREE_PURPOSE (tail
));
4129 /* Given two lists of attributes, return true if list l2 is
4130 equivalent to l1. */
4133 attribute_list_equal (l1
, l2
)
4136 return attribute_list_contained (l1
, l2
)
4137 && attribute_list_contained (l2
, l1
);
4140 /* Given two lists of attributes, return true if list L2 is
4141 completely contained within L1. */
4142 /* ??? This would be faster if attribute names were stored in a canonicalized
4143 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
4144 must be used to show these elements are equivalent (which they are). */
4145 /* ??? It's not clear that attributes with arguments will always be handled
4149 attribute_list_contained (l1
, l2
)
4152 register tree t1
, t2
;
4154 /* First check the obvious, maybe the lists are identical. */
4158 /* Maybe the lists are similar. */
4159 for (t1
= l1
, t2
= l2
;
4161 && TREE_PURPOSE (t1
) == TREE_PURPOSE (t2
)
4162 && TREE_VALUE (t1
) == TREE_VALUE (t2
);
4163 t1
= TREE_CHAIN (t1
), t2
= TREE_CHAIN (t2
));
4165 /* Maybe the lists are equal. */
4166 if (t1
== 0 && t2
== 0)
4169 for (; t2
!= 0; t2
= TREE_CHAIN (t2
))
4172 = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2
)), l1
);
4177 if (simple_cst_equal (TREE_VALUE (t2
), TREE_VALUE (attr
)) != 1)
4184 /* Given two lists of types
4185 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
4186 return 1 if the lists contain the same types in the same order.
4187 Also, the TREE_PURPOSEs must match. */
4190 type_list_equal (l1
, l2
)
4193 register tree t1
, t2
;
4195 for (t1
= l1
, t2
= l2
; t1
&& t2
; t1
= TREE_CHAIN (t1
), t2
= TREE_CHAIN (t2
))
4196 if (TREE_VALUE (t1
) != TREE_VALUE (t2
)
4197 || (TREE_PURPOSE (t1
) != TREE_PURPOSE (t2
)
4198 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1
), TREE_PURPOSE (t2
))
4199 && (TREE_TYPE (TREE_PURPOSE (t1
))
4200 == TREE_TYPE (TREE_PURPOSE (t2
))))))
4206 /* Nonzero if integer constants T1 and T2
4207 represent the same constant value. */
4210 tree_int_cst_equal (t1
, t2
)
4216 if (t1
== 0 || t2
== 0)
4219 if (TREE_CODE (t1
) == INTEGER_CST
4220 && TREE_CODE (t2
) == INTEGER_CST
4221 && TREE_INT_CST_LOW (t1
) == TREE_INT_CST_LOW (t2
)
4222 && TREE_INT_CST_HIGH (t1
) == TREE_INT_CST_HIGH (t2
))
4228 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
4229 The precise way of comparison depends on their data type. */
4232 tree_int_cst_lt (t1
, t2
)
4238 if (! TREE_UNSIGNED (TREE_TYPE (t1
)))
4239 return INT_CST_LT (t1
, t2
);
4241 return INT_CST_LT_UNSIGNED (t1
, t2
);
4244 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
4247 tree_int_cst_compare (t1
, t2
)
4251 if (tree_int_cst_lt (t1
, t2
))
4253 else if (tree_int_cst_lt (t2
, t1
))
4259 /* Return 1 if T is an INTEGER_CST that can be represented in a single
4260 HOST_WIDE_INT value. If POS is nonzero, the result must be positive. */
4263 host_integerp (t
, pos
)
4267 return (TREE_CODE (t
) == INTEGER_CST
4268 && ! TREE_OVERFLOW (t
)
4269 && ((TREE_INT_CST_HIGH (t
) == 0
4270 && (HOST_WIDE_INT
) TREE_INT_CST_LOW (t
) >= 0)
4271 || (! pos
&& TREE_INT_CST_HIGH (t
) == -1
4272 && (HOST_WIDE_INT
) TREE_INT_CST_LOW (t
) < 0)
4273 || (! pos
&& TREE_INT_CST_HIGH (t
) == 0
4274 && TREE_UNSIGNED (TREE_TYPE (t
)))));
4277 /* Return the HOST_WIDE_INT least significant bits of T if it is an
4278 INTEGER_CST and there is no overflow. POS is nonzero if the result must
4279 be positive. Abort if we cannot satisfy the above conditions. */
4282 tree_low_cst (t
, pos
)
4286 if (host_integerp (t
, pos
))
4287 return TREE_INT_CST_LOW (t
);
4292 /* Return the most significant bit of the integer constant T. */
4295 tree_int_cst_msb (t
)
4300 unsigned HOST_WIDE_INT l
;
4302 /* Note that using TYPE_PRECISION here is wrong. We care about the
4303 actual bits, not the (arbitrary) range of the type. */
4304 prec
= GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t
))) - 1;
4305 rshift_double (TREE_INT_CST_LOW (t
), TREE_INT_CST_HIGH (t
), prec
,
4306 2 * HOST_BITS_PER_WIDE_INT
, &l
, &h
, 0);
4307 return (l
& 1) == 1;
4310 /* Return an indication of the sign of the integer constant T.
4311 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
4312 Note that -1 will never be returned it T's type is unsigned. */
4315 tree_int_cst_sgn (t
)
4318 if (TREE_INT_CST_LOW (t
) == 0 && TREE_INT_CST_HIGH (t
) == 0)
4320 else if (TREE_UNSIGNED (TREE_TYPE (t
)))
4322 else if (TREE_INT_CST_HIGH (t
) < 0)
4328 /* Compare two constructor-element-type constants. Return 1 if the lists
4329 are known to be equal; otherwise return 0. */
4332 simple_cst_list_equal (l1
, l2
)
4335 while (l1
!= NULL_TREE
&& l2
!= NULL_TREE
)
4337 if (simple_cst_equal (TREE_VALUE (l1
), TREE_VALUE (l2
)) != 1)
4340 l1
= TREE_CHAIN (l1
);
4341 l2
= TREE_CHAIN (l2
);
4347 /* Return truthvalue of whether T1 is the same tree structure as T2.
4348 Return 1 if they are the same.
4349 Return 0 if they are understandably different.
4350 Return -1 if either contains tree structure not understood by
4354 simple_cst_equal (t1
, t2
)
4357 register enum tree_code code1
, code2
;
4363 if (t1
== 0 || t2
== 0)
4366 code1
= TREE_CODE (t1
);
4367 code2
= TREE_CODE (t2
);
4369 if (code1
== NOP_EXPR
|| code1
== CONVERT_EXPR
|| code1
== NON_LVALUE_EXPR
)
4371 if (code2
== NOP_EXPR
|| code2
== CONVERT_EXPR
4372 || code2
== NON_LVALUE_EXPR
)
4373 return simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
4375 return simple_cst_equal (TREE_OPERAND (t1
, 0), t2
);
4378 else if (code2
== NOP_EXPR
|| code2
== CONVERT_EXPR
4379 || code2
== NON_LVALUE_EXPR
)
4380 return simple_cst_equal (t1
, TREE_OPERAND (t2
, 0));
4388 return (TREE_INT_CST_LOW (t1
) == TREE_INT_CST_LOW (t2
)
4389 && TREE_INT_CST_HIGH (t1
) == TREE_INT_CST_HIGH (t2
));
4392 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1
), TREE_REAL_CST (t2
));
4395 return (TREE_STRING_LENGTH (t1
) == TREE_STRING_LENGTH (t2
)
4396 && ! bcmp (TREE_STRING_POINTER (t1
), TREE_STRING_POINTER (t2
),
4397 TREE_STRING_LENGTH (t1
)));
4400 if (CONSTRUCTOR_ELTS (t1
) == CONSTRUCTOR_ELTS (t2
))
4406 return simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
4409 cmp
= simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
4413 simple_cst_list_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
4416 /* Special case: if either target is an unallocated VAR_DECL,
4417 it means that it's going to be unified with whatever the
4418 TARGET_EXPR is really supposed to initialize, so treat it
4419 as being equivalent to anything. */
4420 if ((TREE_CODE (TREE_OPERAND (t1
, 0)) == VAR_DECL
4421 && DECL_NAME (TREE_OPERAND (t1
, 0)) == NULL_TREE
4422 && DECL_RTL (TREE_OPERAND (t1
, 0)) == 0)
4423 || (TREE_CODE (TREE_OPERAND (t2
, 0)) == VAR_DECL
4424 && DECL_NAME (TREE_OPERAND (t2
, 0)) == NULL_TREE
4425 && DECL_RTL (TREE_OPERAND (t2
, 0)) == 0))
4428 cmp
= simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
4433 return simple_cst_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
4435 case WITH_CLEANUP_EXPR
:
4436 cmp
= simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
4440 return simple_cst_equal (TREE_OPERAND (t1
, 2), TREE_OPERAND (t1
, 2));
4443 if (TREE_OPERAND (t1
, 1) == TREE_OPERAND (t2
, 1))
4444 return simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
4458 /* This general rule works for most tree codes. All exceptions should be
4459 handled above. If this is a language-specific tree code, we can't
4460 trust what might be in the operand, so say we don't know
4462 if ((int) code1
>= (int) LAST_AND_UNUSED_TREE_CODE
)
4465 switch (TREE_CODE_CLASS (code1
))
4474 for (i
= 0; i
< TREE_CODE_LENGTH (code1
); i
++)
4476 cmp
= simple_cst_equal (TREE_OPERAND (t1
, i
), TREE_OPERAND (t2
, i
));
4488 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
4489 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
4490 than U, respectively. */
4493 compare_tree_int (t
, u
)
4497 if (tree_int_cst_sgn (t
) < 0)
4499 else if (TREE_INT_CST_HIGH (t
) != 0)
4501 else if (TREE_INT_CST_LOW (t
) == u
)
4503 else if (TREE_INT_CST_LOW (t
) < u
)
4509 /* Constructors for pointer, array and function types.
4510 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
4511 constructed by language-dependent code, not here.) */
4513 /* Construct, lay out and return the type of pointers to TO_TYPE.
4514 If such a type has already been constructed, reuse it. */
4517 build_pointer_type (to_type
)
4520 register tree t
= TYPE_POINTER_TO (to_type
);
4522 /* First, if we already have a type for pointers to TO_TYPE, use it. */
4527 /* We need a new one. Put this in the same obstack as TO_TYPE. */
4528 push_obstacks (TYPE_OBSTACK (to_type
), TYPE_OBSTACK (to_type
));
4529 t
= make_node (POINTER_TYPE
);
4532 TREE_TYPE (t
) = to_type
;
4534 /* Record this type as the pointer to TO_TYPE. */
4535 TYPE_POINTER_TO (to_type
) = t
;
4537 /* Lay out the type. This function has many callers that are concerned
4538 with expression-construction, and this simplifies them all.
4539 Also, it guarantees the TYPE_SIZE is in the same obstack as the type. */
4545 /* Build the node for the type of references-to-TO_TYPE. */
4548 build_reference_type (to_type
)
4551 register tree t
= TYPE_REFERENCE_TO (to_type
);
4553 /* First, if we already have a type for pointers to TO_TYPE, use it. */
4558 /* We need a new one. Put this in the same obstack as TO_TYPE. */
4559 push_obstacks (TYPE_OBSTACK (to_type
), TYPE_OBSTACK (to_type
));
4560 t
= make_node (REFERENCE_TYPE
);
4563 TREE_TYPE (t
) = to_type
;
4565 /* Record this type as the pointer to TO_TYPE. */
4566 TYPE_REFERENCE_TO (to_type
) = t
;
4573 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4574 MAXVAL should be the maximum value in the domain
4575 (one less than the length of the array).
4577 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4578 We don't enforce this limit, that is up to caller (e.g. language front end).
4579 The limit exists because the result is a signed type and we don't handle
4580 sizes that use more than one HOST_WIDE_INT. */
4583 build_index_type (maxval
)
4586 register tree itype
= make_node (INTEGER_TYPE
);
4588 TREE_TYPE (itype
) = sizetype
;
4589 TYPE_PRECISION (itype
) = TYPE_PRECISION (sizetype
);
4590 TYPE_MIN_VALUE (itype
) = size_zero_node
;
4592 push_obstacks (TYPE_OBSTACK (itype
), TYPE_OBSTACK (itype
));
4593 TYPE_MAX_VALUE (itype
) = convert (sizetype
, maxval
);
4596 TYPE_MODE (itype
) = TYPE_MODE (sizetype
);
4597 TYPE_SIZE (itype
) = TYPE_SIZE (sizetype
);
4598 TYPE_SIZE_UNIT (itype
) = TYPE_SIZE_UNIT (sizetype
);
4599 TYPE_ALIGN (itype
) = TYPE_ALIGN (sizetype
);
4600 TYPE_USER_ALIGN (itype
) = TYPE_USER_ALIGN (sizetype
);
4602 if (host_integerp (maxval
, 1))
4603 return type_hash_canon (tree_low_cst (maxval
, 1), itype
);
4608 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4609 ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4610 low bound LOWVAL and high bound HIGHVAL.
4611 if TYPE==NULL_TREE, sizetype is used. */
4614 build_range_type (type
, lowval
, highval
)
4615 tree type
, lowval
, highval
;
4617 register tree itype
= make_node (INTEGER_TYPE
);
4619 TREE_TYPE (itype
) = type
;
4620 if (type
== NULL_TREE
)
4623 push_obstacks (TYPE_OBSTACK (itype
), TYPE_OBSTACK (itype
));
4624 TYPE_MIN_VALUE (itype
) = convert (type
, lowval
);
4625 TYPE_MAX_VALUE (itype
) = highval
? convert (type
, highval
) : NULL
;
4628 TYPE_PRECISION (itype
) = TYPE_PRECISION (type
);
4629 TYPE_MODE (itype
) = TYPE_MODE (type
);
4630 TYPE_SIZE (itype
) = TYPE_SIZE (type
);
4631 TYPE_SIZE_UNIT (itype
) = TYPE_SIZE_UNIT (type
);
4632 TYPE_ALIGN (itype
) = TYPE_ALIGN (type
);
4633 TYPE_USER_ALIGN (itype
) = TYPE_USER_ALIGN (type
);
4635 if (host_integerp (lowval
, 0) && highval
!= 0 && host_integerp (highval
, 0))
4636 return type_hash_canon (tree_low_cst (highval
, 0)
4637 - tree_low_cst (lowval
, 0),
4643 /* Just like build_index_type, but takes lowval and highval instead
4644 of just highval (maxval). */
4647 build_index_2_type (lowval
,highval
)
4648 tree lowval
, highval
;
4650 return build_range_type (sizetype
, lowval
, highval
);
4653 /* Return nonzero iff ITYPE1 and ITYPE2 are equal (in the LISP sense).
4654 Needed because when index types are not hashed, equal index types
4655 built at different times appear distinct, even though structurally,
4659 index_type_equal (itype1
, itype2
)
4660 tree itype1
, itype2
;
4662 if (TREE_CODE (itype1
) != TREE_CODE (itype2
))
4665 if (TREE_CODE (itype1
) == INTEGER_TYPE
)
4667 if (TYPE_PRECISION (itype1
) != TYPE_PRECISION (itype2
)
4668 || TYPE_MODE (itype1
) != TYPE_MODE (itype2
)
4669 || simple_cst_equal (TYPE_SIZE (itype1
), TYPE_SIZE (itype2
)) != 1
4670 || TYPE_ALIGN (itype1
) != TYPE_ALIGN (itype2
))
4673 if (1 == simple_cst_equal (TYPE_MIN_VALUE (itype1
),
4674 TYPE_MIN_VALUE (itype2
))
4675 && 1 == simple_cst_equal (TYPE_MAX_VALUE (itype1
),
4676 TYPE_MAX_VALUE (itype2
)))
4683 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
4684 and number of elements specified by the range of values of INDEX_TYPE.
4685 If such a type has already been constructed, reuse it. */
4688 build_array_type (elt_type
, index_type
)
4689 tree elt_type
, index_type
;
4692 unsigned int hashcode
;
4694 if (TREE_CODE (elt_type
) == FUNCTION_TYPE
)
4696 error ("arrays of functions are not meaningful");
4697 elt_type
= integer_type_node
;
4700 /* Make sure TYPE_POINTER_TO (elt_type) is filled in. */
4701 build_pointer_type (elt_type
);
4703 /* Allocate the array after the pointer type,
4704 in case we free it in type_hash_canon. */
4705 t
= make_node (ARRAY_TYPE
);
4706 TREE_TYPE (t
) = elt_type
;
4707 TYPE_DOMAIN (t
) = index_type
;
4709 if (index_type
== 0)
4714 hashcode
= TYPE_HASH (elt_type
) + TYPE_HASH (index_type
);
4715 t
= type_hash_canon (hashcode
, t
);
4717 if (!COMPLETE_TYPE_P (t
))
4722 /* Return the TYPE of the elements comprising
4723 the innermost dimension of ARRAY. */
4726 get_inner_array_type (array
)
4729 tree type
= TREE_TYPE (array
);
4731 while (TREE_CODE (type
) == ARRAY_TYPE
)
4732 type
= TREE_TYPE (type
);
4737 /* Construct, lay out and return
4738 the type of functions returning type VALUE_TYPE
4739 given arguments of types ARG_TYPES.
4740 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
4741 are data type nodes for the arguments of the function.
4742 If such a type has already been constructed, reuse it. */
4745 build_function_type (value_type
, arg_types
)
4746 tree value_type
, arg_types
;
4749 unsigned int hashcode
;
4751 if (TREE_CODE (value_type
) == FUNCTION_TYPE
)
4753 error ("function return type cannot be function");
4754 value_type
= integer_type_node
;
4757 /* Make a node of the sort we want. */
4758 t
= make_node (FUNCTION_TYPE
);
4759 TREE_TYPE (t
) = value_type
;
4760 TYPE_ARG_TYPES (t
) = arg_types
;
4762 /* If we already have such a type, use the old one and free this one. */
4763 hashcode
= TYPE_HASH (value_type
) + type_hash_list (arg_types
);
4764 t
= type_hash_canon (hashcode
, t
);
4766 if (!COMPLETE_TYPE_P (t
))
4771 /* Construct, lay out and return the type of methods belonging to class
4772 BASETYPE and whose arguments and values are described by TYPE.
4773 If that type exists already, reuse it.
4774 TYPE must be a FUNCTION_TYPE node. */
4777 build_method_type (basetype
, type
)
4778 tree basetype
, type
;
4781 unsigned int hashcode
;
4783 /* Make a node of the sort we want. */
4784 t
= make_node (METHOD_TYPE
);
4786 if (TREE_CODE (type
) != FUNCTION_TYPE
)
4789 TYPE_METHOD_BASETYPE (t
) = TYPE_MAIN_VARIANT (basetype
);
4790 TREE_TYPE (t
) = TREE_TYPE (type
);
4792 /* The actual arglist for this function includes a "hidden" argument
4793 which is "this". Put it into the list of argument types. */
4796 = tree_cons (NULL_TREE
,
4797 build_pointer_type (basetype
), TYPE_ARG_TYPES (type
));
4799 /* If we already have such a type, use the old one and free this one. */
4800 hashcode
= TYPE_HASH (basetype
) + TYPE_HASH (type
);
4801 t
= type_hash_canon (hashcode
, t
);
4803 if (!COMPLETE_TYPE_P (t
))
4809 /* Construct, lay out and return the type of offsets to a value
4810 of type TYPE, within an object of type BASETYPE.
4811 If a suitable offset type exists already, reuse it. */
4814 build_offset_type (basetype
, type
)
4815 tree basetype
, type
;
4818 unsigned int hashcode
;
4820 /* Make a node of the sort we want. */
4821 t
= make_node (OFFSET_TYPE
);
4823 TYPE_OFFSET_BASETYPE (t
) = TYPE_MAIN_VARIANT (basetype
);
4824 TREE_TYPE (t
) = type
;
4826 /* If we already have such a type, use the old one and free this one. */
4827 hashcode
= TYPE_HASH (basetype
) + TYPE_HASH (type
);
4828 t
= type_hash_canon (hashcode
, t
);
4830 if (!COMPLETE_TYPE_P (t
))
4836 /* Create a complex type whose components are COMPONENT_TYPE. */
4839 build_complex_type (component_type
)
4840 tree component_type
;
4843 unsigned int hashcode
;
4845 /* Make a node of the sort we want. */
4846 t
= make_node (COMPLEX_TYPE
);
4848 TREE_TYPE (t
) = TYPE_MAIN_VARIANT (component_type
);
4849 set_type_quals (t
, TYPE_QUALS (component_type
));
4851 /* If we already have such a type, use the old one and free this one. */
4852 hashcode
= TYPE_HASH (component_type
);
4853 t
= type_hash_canon (hashcode
, t
);
4855 if (!COMPLETE_TYPE_P (t
))
4858 /* If we are writing Dwarf2 output we need to create a name,
4859 since complex is a fundamental type. */
4860 if (write_symbols
== DWARF2_DEBUG
&& ! TYPE_NAME (t
))
4863 if (component_type
== char_type_node
)
4864 name
= "complex char";
4865 else if (component_type
== signed_char_type_node
)
4866 name
= "complex signed char";
4867 else if (component_type
== unsigned_char_type_node
)
4868 name
= "complex unsigned char";
4869 else if (component_type
== short_integer_type_node
)
4870 name
= "complex short int";
4871 else if (component_type
== short_unsigned_type_node
)
4872 name
= "complex short unsigned int";
4873 else if (component_type
== integer_type_node
)
4874 name
= "complex int";
4875 else if (component_type
== unsigned_type_node
)
4876 name
= "complex unsigned int";
4877 else if (component_type
== long_integer_type_node
)
4878 name
= "complex long int";
4879 else if (component_type
== long_unsigned_type_node
)
4880 name
= "complex long unsigned int";
4881 else if (component_type
== long_long_integer_type_node
)
4882 name
= "complex long long int";
4883 else if (component_type
== long_long_unsigned_type_node
)
4884 name
= "complex long long unsigned int";
4889 TYPE_NAME (t
) = get_identifier (name
);
4895 /* Return OP, stripped of any conversions to wider types as much as is safe.
4896 Converting the value back to OP's type makes a value equivalent to OP.
4898 If FOR_TYPE is nonzero, we return a value which, if converted to
4899 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4901 If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4902 narrowest type that can hold the value, even if they don't exactly fit.
4903 Otherwise, bit-field references are changed to a narrower type
4904 only if they can be fetched directly from memory in that type.
4906 OP must have integer, real or enumeral type. Pointers are not allowed!
4908 There are some cases where the obvious value we could return
4909 would regenerate to OP if converted to OP's type,
4910 but would not extend like OP to wider types.
4911 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4912 For example, if OP is (unsigned short)(signed char)-1,
4913 we avoid returning (signed char)-1 if FOR_TYPE is int,
4914 even though extending that to an unsigned short would regenerate OP,
4915 since the result of extending (signed char)-1 to (int)
4916 is different from (int) OP. */
4919 get_unwidened (op
, for_type
)
4923 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
4924 register tree type
= TREE_TYPE (op
);
4925 register unsigned final_prec
4926 = TYPE_PRECISION (for_type
!= 0 ? for_type
: type
);
4928 = (for_type
!= 0 && for_type
!= type
4929 && final_prec
> TYPE_PRECISION (type
)
4930 && TREE_UNSIGNED (type
));
4931 register tree win
= op
;
4933 while (TREE_CODE (op
) == NOP_EXPR
)
4935 register int bitschange
4936 = TYPE_PRECISION (TREE_TYPE (op
))
4937 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op
, 0)));
4939 /* Truncations are many-one so cannot be removed.
4940 Unless we are later going to truncate down even farther. */
4942 && final_prec
> TYPE_PRECISION (TREE_TYPE (op
)))
4945 /* See what's inside this conversion. If we decide to strip it,
4947 op
= TREE_OPERAND (op
, 0);
4949 /* If we have not stripped any zero-extensions (uns is 0),
4950 we can strip any kind of extension.
4951 If we have previously stripped a zero-extension,
4952 only zero-extensions can safely be stripped.
4953 Any extension can be stripped if the bits it would produce
4954 are all going to be discarded later by truncating to FOR_TYPE. */
4958 if (! uns
|| final_prec
<= TYPE_PRECISION (TREE_TYPE (op
)))
4960 /* TREE_UNSIGNED says whether this is a zero-extension.
4961 Let's avoid computing it if it does not affect WIN
4962 and if UNS will not be needed again. */
4963 if ((uns
|| TREE_CODE (op
) == NOP_EXPR
)
4964 && TREE_UNSIGNED (TREE_TYPE (op
)))
4972 if (TREE_CODE (op
) == COMPONENT_REF
4973 /* Since type_for_size always gives an integer type. */
4974 && TREE_CODE (type
) != REAL_TYPE
4975 /* Don't crash if field not laid out yet. */
4976 && DECL_SIZE (TREE_OPERAND (op
, 1)) != 0)
4978 unsigned int innerprec
4979 = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op
, 1)));
4981 type
= type_for_size (innerprec
, TREE_UNSIGNED (TREE_OPERAND (op
, 1)));
4983 /* We can get this structure field in the narrowest type it fits in.
4984 If FOR_TYPE is 0, do this only for a field that matches the
4985 narrower type exactly and is aligned for it
4986 The resulting extension to its nominal type (a fullword type)
4987 must fit the same conditions as for other extensions. */
4989 if (innerprec
< TYPE_PRECISION (TREE_TYPE (op
))
4990 && (for_type
|| ! DECL_BIT_FIELD (TREE_OPERAND (op
, 1)))
4991 && (! uns
|| final_prec
<= innerprec
4992 || TREE_UNSIGNED (TREE_OPERAND (op
, 1)))
4995 win
= build (COMPONENT_REF
, type
, TREE_OPERAND (op
, 0),
4996 TREE_OPERAND (op
, 1));
4997 TREE_SIDE_EFFECTS (win
) = TREE_SIDE_EFFECTS (op
);
4998 TREE_THIS_VOLATILE (win
) = TREE_THIS_VOLATILE (op
);
5004 /* Return OP or a simpler expression for a narrower value
5005 which can be sign-extended or zero-extended to give back OP.
5006 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
5007 or 0 if the value should be sign-extended. */
5010 get_narrower (op
, unsignedp_ptr
)
5014 register int uns
= 0;
5016 register tree win
= op
;
5018 while (TREE_CODE (op
) == NOP_EXPR
)
5020 register int bitschange
5021 = (TYPE_PRECISION (TREE_TYPE (op
))
5022 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op
, 0))));
5024 /* Truncations are many-one so cannot be removed. */
5028 /* See what's inside this conversion. If we decide to strip it,
5030 op
= TREE_OPERAND (op
, 0);
5034 /* An extension: the outermost one can be stripped,
5035 but remember whether it is zero or sign extension. */
5037 uns
= TREE_UNSIGNED (TREE_TYPE (op
));
5038 /* Otherwise, if a sign extension has been stripped,
5039 only sign extensions can now be stripped;
5040 if a zero extension has been stripped, only zero-extensions. */
5041 else if (uns
!= TREE_UNSIGNED (TREE_TYPE (op
)))
5045 else /* bitschange == 0 */
5047 /* A change in nominal type can always be stripped, but we must
5048 preserve the unsignedness. */
5050 uns
= TREE_UNSIGNED (TREE_TYPE (op
));
5057 if (TREE_CODE (op
) == COMPONENT_REF
5058 /* Since type_for_size always gives an integer type. */
5059 && TREE_CODE (TREE_TYPE (op
)) != REAL_TYPE
)
5061 unsigned int innerprec
5062 = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op
, 1)));
5064 tree type
= type_for_size (innerprec
, TREE_UNSIGNED (op
));
5066 /* We can get this structure field in a narrower type that fits it,
5067 but the resulting extension to its nominal type (a fullword type)
5068 must satisfy the same conditions as for other extensions.
5070 Do this only for fields that are aligned (not bit-fields),
5071 because when bit-field insns will be used there is no
5072 advantage in doing this. */
5074 if (innerprec
< TYPE_PRECISION (TREE_TYPE (op
))
5075 && ! DECL_BIT_FIELD (TREE_OPERAND (op
, 1))
5076 && (first
|| uns
== TREE_UNSIGNED (TREE_OPERAND (op
, 1)))
5080 uns
= TREE_UNSIGNED (TREE_OPERAND (op
, 1));
5081 win
= build (COMPONENT_REF
, type
, TREE_OPERAND (op
, 0),
5082 TREE_OPERAND (op
, 1));
5083 TREE_SIDE_EFFECTS (win
) = TREE_SIDE_EFFECTS (op
);
5084 TREE_THIS_VOLATILE (win
) = TREE_THIS_VOLATILE (op
);
5087 *unsignedp_ptr
= uns
;
5091 /* Nonzero if integer constant C has a value that is permissible
5092 for type TYPE (an INTEGER_TYPE). */
5095 int_fits_type_p (c
, type
)
5098 if (TREE_UNSIGNED (type
))
5099 return (! (TREE_CODE (TYPE_MAX_VALUE (type
)) == INTEGER_CST
5100 && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type
), c
))
5101 && ! (TREE_CODE (TYPE_MIN_VALUE (type
)) == INTEGER_CST
5102 && INT_CST_LT_UNSIGNED (c
, TYPE_MIN_VALUE (type
)))
5103 /* Negative ints never fit unsigned types. */
5104 && ! (TREE_INT_CST_HIGH (c
) < 0
5105 && ! TREE_UNSIGNED (TREE_TYPE (c
))));
5107 return (! (TREE_CODE (TYPE_MAX_VALUE (type
)) == INTEGER_CST
5108 && INT_CST_LT (TYPE_MAX_VALUE (type
), c
))
5109 && ! (TREE_CODE (TYPE_MIN_VALUE (type
)) == INTEGER_CST
5110 && INT_CST_LT (c
, TYPE_MIN_VALUE (type
)))
5111 /* Unsigned ints with top bit set never fit signed types. */
5112 && ! (TREE_INT_CST_HIGH (c
) < 0
5113 && TREE_UNSIGNED (TREE_TYPE (c
))));
5116 /* Given a DECL or TYPE, return the scope in which it was declared, or
5117 NULL_TREE if there is no containing scope. */
5120 get_containing_scope (t
)
5123 return (TYPE_P (t
) ? TYPE_CONTEXT (t
) : DECL_CONTEXT (t
));
5126 /* Return the innermost context enclosing DECL that is
5127 a FUNCTION_DECL, or zero if none. */
5130 decl_function_context (decl
)
5135 if (TREE_CODE (decl
) == ERROR_MARK
)
5138 if (TREE_CODE (decl
) == SAVE_EXPR
)
5139 context
= SAVE_EXPR_CONTEXT (decl
);
5141 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
5142 where we look up the function at runtime. Such functions always take
5143 a first argument of type 'pointer to real context'.
5145 C++ should really be fixed to use DECL_CONTEXT for the real context,
5146 and use something else for the "virtual context". */
5147 else if (TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_VINDEX (decl
))
5150 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl
)))));
5152 context
= DECL_CONTEXT (decl
);
5154 while (context
&& TREE_CODE (context
) != FUNCTION_DECL
)
5156 if (TREE_CODE (context
) == BLOCK
)
5157 context
= BLOCK_SUPERCONTEXT (context
);
5159 context
= get_containing_scope (context
);
5165 /* Return the innermost context enclosing DECL that is
5166 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
5167 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
5170 decl_type_context (decl
)
5173 tree context
= DECL_CONTEXT (decl
);
5177 if (TREE_CODE (context
) == RECORD_TYPE
5178 || TREE_CODE (context
) == UNION_TYPE
5179 || TREE_CODE (context
) == QUAL_UNION_TYPE
)
5182 if (TREE_CODE (context
) == TYPE_DECL
5183 || TREE_CODE (context
) == FUNCTION_DECL
)
5184 context
= DECL_CONTEXT (context
);
5186 else if (TREE_CODE (context
) == BLOCK
)
5187 context
= BLOCK_SUPERCONTEXT (context
);
5190 /* Unhandled CONTEXT!? */
5196 /* CALL is a CALL_EXPR. Return the declaration for the function
5197 called, or NULL_TREE if the called function cannot be
5201 get_callee_fndecl (call
)
5206 /* It's invalid to call this function with anything but a
5208 if (TREE_CODE (call
) != CALL_EXPR
)
5211 /* The first operand to the CALL is the address of the function
5213 addr
= TREE_OPERAND (call
, 0);
5217 /* If this is a readonly function pointer, extract its initial value. */
5218 if (DECL_P (addr
) && TREE_CODE (addr
) != FUNCTION_DECL
5219 && TREE_READONLY (addr
) && ! TREE_THIS_VOLATILE (addr
)
5220 && DECL_INITIAL (addr
))
5221 addr
= DECL_INITIAL (addr
);
5223 /* If the address is just `&f' for some function `f', then we know
5224 that `f' is being called. */
5225 if (TREE_CODE (addr
) == ADDR_EXPR
5226 && TREE_CODE (TREE_OPERAND (addr
, 0)) == FUNCTION_DECL
)
5227 return TREE_OPERAND (addr
, 0);
5229 /* We couldn't figure out what was being called. */
5233 /* Print debugging information about the obstack O, named STR. */
5236 print_obstack_statistics (str
, o
)
5240 struct _obstack_chunk
*chunk
= o
->chunk
;
5244 n_alloc
+= o
->next_free
- chunk
->contents
;
5245 chunk
= chunk
->prev
;
5249 n_alloc
+= chunk
->limit
- &chunk
->contents
[0];
5250 chunk
= chunk
->prev
;
5252 fprintf (stderr
, "obstack %s: %u bytes, %d chunks\n",
5253 str
, n_alloc
, n_chunks
);
5256 /* Print debugging information about tree nodes generated during the compile,
5257 and any language-specific information. */
5260 dump_tree_statistics ()
5262 #ifdef GATHER_STATISTICS
5264 int total_nodes
, total_bytes
;
5267 fprintf (stderr
, "\n??? tree nodes created\n\n");
5268 #ifdef GATHER_STATISTICS
5269 fprintf (stderr
, "Kind Nodes Bytes\n");
5270 fprintf (stderr
, "-------------------------------------\n");
5271 total_nodes
= total_bytes
= 0;
5272 for (i
= 0; i
< (int) all_kinds
; i
++)
5274 fprintf (stderr
, "%-20s %6d %9d\n", tree_node_kind_names
[i
],
5275 tree_node_counts
[i
], tree_node_sizes
[i
]);
5276 total_nodes
+= tree_node_counts
[i
];
5277 total_bytes
+= tree_node_sizes
[i
];
5279 fprintf (stderr
, "%-20s %9d\n", "identifier names", id_string_size
);
5280 fprintf (stderr
, "-------------------------------------\n");
5281 fprintf (stderr
, "%-20s %6d %9d\n", "Total", total_nodes
, total_bytes
);
5282 fprintf (stderr
, "-------------------------------------\n");
5284 fprintf (stderr
, "(No per-node statistics)\n");
5286 print_obstack_statistics ("permanent_obstack", &permanent_obstack
);
5287 print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack
);
5288 print_obstack_statistics ("temporary_obstack", &temporary_obstack
);
5289 print_obstack_statistics ("momentary_obstack", &momentary_obstack
);
5290 print_obstack_statistics ("temp_decl_obstack", &temp_decl_obstack
);
5291 print_type_hash_statistics ();
5292 print_lang_statistics ();
5295 #define FILE_FUNCTION_PREFIX_LEN 9
5297 #ifndef NO_DOLLAR_IN_LABEL
5298 #define FILE_FUNCTION_FORMAT "_GLOBAL_$%s$%s"
5299 #else /* NO_DOLLAR_IN_LABEL */
5300 #ifndef NO_DOT_IN_LABEL
5301 #define FILE_FUNCTION_FORMAT "_GLOBAL_.%s.%s"
5302 #else /* NO_DOT_IN_LABEL */
5303 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
5304 #endif /* NO_DOT_IN_LABEL */
5305 #endif /* NO_DOLLAR_IN_LABEL */
5307 /* Appends 6 random characters to TEMPLATE to (hopefully) avoid name
5308 clashes in cases where we can't reliably choose a unique name.
5310 Derived from mkstemp.c in libiberty. */
5313 append_random_chars (template)
5316 static const char letters
[]
5317 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
5318 static unsigned HOST_WIDE_INT value
;
5319 unsigned HOST_WIDE_INT v
;
5321 #ifdef HAVE_GETTIMEOFDAY
5325 template += strlen (template);
5327 #ifdef HAVE_GETTIMEOFDAY
5328 /* Get some more or less random data. */
5329 gettimeofday (&tv
, NULL
);
5330 value
+= ((unsigned HOST_WIDE_INT
) tv
.tv_usec
<< 16) ^ tv
.tv_sec
^ getpid ();
5337 /* Fill in the random bits. */
5338 template[0] = letters
[v
% 62];
5340 template[1] = letters
[v
% 62];
5342 template[2] = letters
[v
% 62];
5344 template[3] = letters
[v
% 62];
5346 template[4] = letters
[v
% 62];
5348 template[5] = letters
[v
% 62];
5353 /* P is a string that will be used in a symbol. Mask out any characters
5354 that are not valid in that context. */
5357 clean_symbol_name (p
)
5362 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
5365 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
5373 /* Generate a name for a function unique to this translation unit.
5374 TYPE is some string to identify the purpose of this function to the
5375 linker or collect2. */
5378 get_file_function_name_long (type
)
5385 if (first_global_object_name
)
5386 p
= first_global_object_name
;
5389 /* We don't have anything that we know to be unique to this translation
5390 unit, so use what we do have and throw in some randomness. */
5392 const char *name
= weak_global_object_name
;
5393 const char *file
= main_input_filename
;
5398 file
= input_filename
;
5400 q
= (char *) alloca (7 + strlen (name
) + strlen (file
));
5402 sprintf (q
, "%s%s", name
, file
);
5403 append_random_chars (q
);
5407 buf
= (char *) alloca (sizeof (FILE_FUNCTION_FORMAT
) + strlen (p
)
5410 /* Set up the name of the file-level functions we may need.
5411 Use a global object (which is already required to be unique over
5412 the program) rather than the file name (which imposes extra
5414 sprintf (buf
, FILE_FUNCTION_FORMAT
, type
, p
);
5416 /* Don't need to pull weird characters out of global names. */
5417 if (p
!= first_global_object_name
)
5418 clean_symbol_name (buf
+ 11);
5420 return get_identifier (buf
);
5423 /* If KIND=='I', return a suitable global initializer (constructor) name.
5424 If KIND=='D', return a suitable global clean-up (destructor) name. */
5427 get_file_function_name (kind
)
5435 return get_file_function_name_long (p
);
5438 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5439 The result is placed in BUFFER (which has length BIT_SIZE),
5440 with one bit in each char ('\000' or '\001').
5442 If the constructor is constant, NULL_TREE is returned.
5443 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
5446 get_set_constructor_bits (init
, buffer
, bit_size
)
5453 HOST_WIDE_INT domain_min
5454 = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init
))));
5455 tree non_const_bits
= NULL_TREE
;
5456 for (i
= 0; i
< bit_size
; i
++)
5459 for (vals
= TREE_OPERAND (init
, 1);
5460 vals
!= NULL_TREE
; vals
= TREE_CHAIN (vals
))
5462 if (TREE_CODE (TREE_VALUE (vals
)) != INTEGER_CST
5463 || (TREE_PURPOSE (vals
) != NULL_TREE
5464 && TREE_CODE (TREE_PURPOSE (vals
)) != INTEGER_CST
))
5466 = tree_cons (TREE_PURPOSE (vals
), TREE_VALUE (vals
), non_const_bits
);
5467 else if (TREE_PURPOSE (vals
) != NULL_TREE
)
5469 /* Set a range of bits to ones. */
5470 HOST_WIDE_INT lo_index
5471 = TREE_INT_CST_LOW (TREE_PURPOSE (vals
)) - domain_min
;
5472 HOST_WIDE_INT hi_index
5473 = TREE_INT_CST_LOW (TREE_VALUE (vals
)) - domain_min
;
5475 if (lo_index
< 0 || lo_index
>= bit_size
5476 || hi_index
< 0 || hi_index
>= bit_size
)
5478 for (; lo_index
<= hi_index
; lo_index
++)
5479 buffer
[lo_index
] = 1;
5483 /* Set a single bit to one. */
5485 = TREE_INT_CST_LOW (TREE_VALUE (vals
)) - domain_min
;
5486 if (index
< 0 || index
>= bit_size
)
5488 error ("invalid initializer for bit string");
5494 return non_const_bits
;
5497 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5498 The result is placed in BUFFER (which is an array of bytes).
5499 If the constructor is constant, NULL_TREE is returned.
5500 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
5503 get_set_constructor_bytes (init
, buffer
, wd_size
)
5505 unsigned char *buffer
;
5509 int set_word_size
= BITS_PER_UNIT
;
5510 int bit_size
= wd_size
* set_word_size
;
5512 unsigned char *bytep
= buffer
;
5513 char *bit_buffer
= (char *) alloca (bit_size
);
5514 tree non_const_bits
= get_set_constructor_bits (init
, bit_buffer
, bit_size
);
5516 for (i
= 0; i
< wd_size
; i
++)
5519 for (i
= 0; i
< bit_size
; i
++)
5523 if (BYTES_BIG_ENDIAN
)
5524 *bytep
|= (1 << (set_word_size
- 1 - bit_pos
));
5526 *bytep
|= 1 << bit_pos
;
5529 if (bit_pos
>= set_word_size
)
5530 bit_pos
= 0, bytep
++;
5532 return non_const_bits
;
5535 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
5536 /* Complain that the tree code of NODE does not match the expected CODE.
5537 FILE, LINE, and FUNCTION are of the caller. */
5540 tree_check_failed (node
, code
, file
, line
, function
)
5542 enum tree_code code
;
5545 const char *function
;
5547 error ("Tree check: expected %s, have %s",
5548 tree_code_name
[code
], tree_code_name
[TREE_CODE (node
)]);
5549 fancy_abort (file
, line
, function
);
5552 /* Similar to above, except that we check for a class of tree
5553 code, given in CL. */
5556 tree_class_check_failed (node
, cl
, file
, line
, function
)
5561 const char *function
;
5563 error ("Tree check: expected class '%c', have '%c' (%s)",
5564 cl
, TREE_CODE_CLASS (TREE_CODE (node
)),
5565 tree_code_name
[TREE_CODE (node
)]);
5566 fancy_abort (file
, line
, function
);
5569 #endif /* ENABLE_TREE_CHECKING */
5571 /* For a new vector type node T, build the information necessary for
5572 debuggint output. */
5575 finish_vector_type (t
)
5581 tree index
= build_int_2 (TYPE_VECTOR_SUBPARTS (t
) - 1, 0);
5582 tree array
= build_array_type (TREE_TYPE (t
),
5583 build_index_type (index
));
5584 tree rt
= make_node (RECORD_TYPE
);
5586 TYPE_FIELDS (rt
) = build_decl (FIELD_DECL
, get_identifier ("f"), array
);
5587 DECL_CONTEXT (TYPE_FIELDS (rt
)) = rt
;
5589 TYPE_DEBUG_REPRESENTATION_TYPE (t
) = rt
;
5590 /* In dwarfout.c, type lookup uses TYPE_UID numbers. We want to output
5591 the representation type, and we want to find that die when looking up
5592 the vector type. This is most easily achieved by making the TYPE_UID
5594 TYPE_UID (rt
) = TYPE_UID (t
);
5598 /* Create nodes for all integer types (and error_mark_node) using the sizes
5599 of C datatypes. The caller should call set_sizetype soon after calling
5600 this function to select one of the types as sizetype. */
5603 build_common_tree_nodes (signed_char
)
5606 error_mark_node
= make_node (ERROR_MARK
);
5607 TREE_TYPE (error_mark_node
) = error_mark_node
;
5609 initialize_sizetypes ();
5611 /* Define both `signed char' and `unsigned char'. */
5612 signed_char_type_node
= make_signed_type (CHAR_TYPE_SIZE
);
5613 unsigned_char_type_node
= make_unsigned_type (CHAR_TYPE_SIZE
);
5615 /* Define `char', which is like either `signed char' or `unsigned char'
5616 but not the same as either. */
5619 ? make_signed_type (CHAR_TYPE_SIZE
)
5620 : make_unsigned_type (CHAR_TYPE_SIZE
));
5622 short_integer_type_node
= make_signed_type (SHORT_TYPE_SIZE
);
5623 short_unsigned_type_node
= make_unsigned_type (SHORT_TYPE_SIZE
);
5624 integer_type_node
= make_signed_type (INT_TYPE_SIZE
);
5625 unsigned_type_node
= make_unsigned_type (INT_TYPE_SIZE
);
5626 long_integer_type_node
= make_signed_type (LONG_TYPE_SIZE
);
5627 long_unsigned_type_node
= make_unsigned_type (LONG_TYPE_SIZE
);
5628 long_long_integer_type_node
= make_signed_type (LONG_LONG_TYPE_SIZE
);
5629 long_long_unsigned_type_node
= make_unsigned_type (LONG_LONG_TYPE_SIZE
);
5631 intQI_type_node
= make_signed_type (GET_MODE_BITSIZE (QImode
));
5632 intHI_type_node
= make_signed_type (GET_MODE_BITSIZE (HImode
));
5633 intSI_type_node
= make_signed_type (GET_MODE_BITSIZE (SImode
));
5634 intDI_type_node
= make_signed_type (GET_MODE_BITSIZE (DImode
));
5635 #if HOST_BITS_PER_WIDE_INT >= 64
5636 intTI_type_node
= make_signed_type (GET_MODE_BITSIZE (TImode
));
5639 unsigned_intQI_type_node
= make_unsigned_type (GET_MODE_BITSIZE (QImode
));
5640 unsigned_intHI_type_node
= make_unsigned_type (GET_MODE_BITSIZE (HImode
));
5641 unsigned_intSI_type_node
= make_unsigned_type (GET_MODE_BITSIZE (SImode
));
5642 unsigned_intDI_type_node
= make_unsigned_type (GET_MODE_BITSIZE (DImode
));
5643 #if HOST_BITS_PER_WIDE_INT >= 64
5644 unsigned_intTI_type_node
= make_unsigned_type (GET_MODE_BITSIZE (TImode
));
5648 /* Call this function after calling build_common_tree_nodes and set_sizetype.
5649 It will create several other common tree nodes. */
5652 build_common_tree_nodes_2 (short_double
)
5655 /* Define these next since types below may used them. */
5656 integer_zero_node
= build_int_2 (0, 0);
5657 integer_one_node
= build_int_2 (1, 0);
5659 size_zero_node
= size_int (0);
5660 size_one_node
= size_int (1);
5661 bitsize_zero_node
= bitsize_int (0);
5662 bitsize_one_node
= bitsize_int (1);
5663 bitsize_unit_node
= bitsize_int (BITS_PER_UNIT
);
5665 void_type_node
= make_node (VOID_TYPE
);
5666 layout_type (void_type_node
);
5668 /* We are not going to have real types in C with less than byte alignment,
5669 so we might as well not have any types that claim to have it. */
5670 TYPE_ALIGN (void_type_node
) = BITS_PER_UNIT
;
5671 TYPE_USER_ALIGN (void_type_node
) = 0;
5673 null_pointer_node
= build_int_2 (0, 0);
5674 TREE_TYPE (null_pointer_node
) = build_pointer_type (void_type_node
);
5675 layout_type (TREE_TYPE (null_pointer_node
));
5677 ptr_type_node
= build_pointer_type (void_type_node
);
5679 = build_pointer_type (build_type_variant (void_type_node
, 1, 0));
5681 float_type_node
= make_node (REAL_TYPE
);
5682 TYPE_PRECISION (float_type_node
) = FLOAT_TYPE_SIZE
;
5683 layout_type (float_type_node
);
5685 double_type_node
= make_node (REAL_TYPE
);
5687 TYPE_PRECISION (double_type_node
) = FLOAT_TYPE_SIZE
;
5689 TYPE_PRECISION (double_type_node
) = DOUBLE_TYPE_SIZE
;
5690 layout_type (double_type_node
);
5692 long_double_type_node
= make_node (REAL_TYPE
);
5693 TYPE_PRECISION (long_double_type_node
) = LONG_DOUBLE_TYPE_SIZE
;
5694 layout_type (long_double_type_node
);
5696 complex_integer_type_node
= make_node (COMPLEX_TYPE
);
5697 TREE_TYPE (complex_integer_type_node
) = integer_type_node
;
5698 layout_type (complex_integer_type_node
);
5700 complex_float_type_node
= make_node (COMPLEX_TYPE
);
5701 TREE_TYPE (complex_float_type_node
) = float_type_node
;
5702 layout_type (complex_float_type_node
);
5704 complex_double_type_node
= make_node (COMPLEX_TYPE
);
5705 TREE_TYPE (complex_double_type_node
) = double_type_node
;
5706 layout_type (complex_double_type_node
);
5708 complex_long_double_type_node
= make_node (COMPLEX_TYPE
);
5709 TREE_TYPE (complex_long_double_type_node
) = long_double_type_node
;
5710 layout_type (complex_long_double_type_node
);
5712 #ifdef BUILD_VA_LIST_TYPE
5713 BUILD_VA_LIST_TYPE (va_list_type_node
);
5715 va_list_type_node
= ptr_type_node
;
5718 V4SF_type_node
= make_node (VECTOR_TYPE
);
5719 TREE_TYPE (V4SF_type_node
) = float_type_node
;
5720 TYPE_MODE (V4SF_type_node
) = V4SFmode
;
5721 finish_vector_type (V4SF_type_node
);
5723 V4SI_type_node
= make_node (VECTOR_TYPE
);
5724 TREE_TYPE (V4SI_type_node
) = intSI_type_node
;
5725 TYPE_MODE (V4SI_type_node
) = V4SImode
;
5726 finish_vector_type (V4SI_type_node
);
5728 V2SI_type_node
= make_node (VECTOR_TYPE
);
5729 TREE_TYPE (V2SI_type_node
) = intSI_type_node
;
5730 TYPE_MODE (V2SI_type_node
) = V2SImode
;
5731 finish_vector_type (V2SI_type_node
);
5733 V4HI_type_node
= make_node (VECTOR_TYPE
);
5734 TREE_TYPE (V4HI_type_node
) = intHI_type_node
;
5735 TYPE_MODE (V4HI_type_node
) = V4HImode
;
5736 finish_vector_type (V4HI_type_node
);
5738 V8QI_type_node
= make_node (VECTOR_TYPE
);
5739 TREE_TYPE (V8QI_type_node
) = intQI_type_node
;
5740 TYPE_MODE (V8QI_type_node
) = V8QImode
;
5741 finish_vector_type (V8QI_type_node
);