comparison gcc/tree-core.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
1 /* Core data structures for the 'tree' type. 1 /* Core data structures for the 'tree' type.
2 Copyright (C) 1989-2018 Free Software Foundation, Inc. 2 Copyright (C) 1989-2020 Free Software Foundation, Inc.
3 3
4 This file is part of GCC. 4 This file is part of GCC.
5 5
6 GCC is free software; you can redistribute it and/or modify it under 6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free 7 the terms of the GNU General Public License as published by the Free
154 BUILT_IN_FRONTEND, 154 BUILT_IN_FRONTEND,
155 BUILT_IN_MD, 155 BUILT_IN_MD,
156 BUILT_IN_NORMAL 156 BUILT_IN_NORMAL
157 }; 157 };
158 158
159 /* Last marker used for LTO stremaing of built_in_class. We can not add it 159 /* Last marker used for LTO stremaing of built_in_class. We cannot add it
160 to the enum since we need the enumb to fit in 2 bits. */ 160 to the enum since we need the enumb to fit in 2 bits. */
161 #define BUILT_IN_LAST (BUILT_IN_NORMAL + 1) 161 #define BUILT_IN_LAST (BUILT_IN_NORMAL + 1)
162 162
163 /* Codes that identify the various built in functions 163 /* Codes that identify the various built in functions
164 so that expand_call can identify them quickly. */ 164 so that expand_call can identify them quickly. */
256 Operand 4: OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER: Another dummy 256 Operand 4: OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER: Another dummy
257 VAR_DECL placeholder, used like the above for C/C++ array 257 VAR_DECL placeholder, used like the above for C/C++ array
258 reductions. */ 258 reductions. */
259 OMP_CLAUSE_REDUCTION, 259 OMP_CLAUSE_REDUCTION,
260 260
261 /* OpenMP clause: task_reduction (operator:variable_list). */
262 OMP_CLAUSE_TASK_REDUCTION,
263
264 /* OpenMP clause: in_reduction (operator:variable_list). */
265 OMP_CLAUSE_IN_REDUCTION,
266
261 /* OpenMP clause: copyin (variable_list). */ 267 /* OpenMP clause: copyin (variable_list). */
262 OMP_CLAUSE_COPYIN, 268 OMP_CLAUSE_COPYIN,
263 269
264 /* OpenMP clause: copyprivate (variable_list). */ 270 /* OpenMP clause: copyprivate (variable_list). */
265 OMP_CLAUSE_COPYPRIVATE, 271 OMP_CLAUSE_COPYPRIVATE,
270 /* OpenMP clause: aligned (variable-list[:alignment]). */ 276 /* OpenMP clause: aligned (variable-list[:alignment]). */
271 OMP_CLAUSE_ALIGNED, 277 OMP_CLAUSE_ALIGNED,
272 278
273 /* OpenMP clause: depend ({in,out,inout}:variable-list). */ 279 /* OpenMP clause: depend ({in,out,inout}:variable-list). */
274 OMP_CLAUSE_DEPEND, 280 OMP_CLAUSE_DEPEND,
281
282 /* OpenMP clause: nontemporal (variable-list). */
283 OMP_CLAUSE_NONTEMPORAL,
275 284
276 /* OpenMP clause: uniform (argument-list). */ 285 /* OpenMP clause: uniform (argument-list). */
277 OMP_CLAUSE_UNIFORM, 286 OMP_CLAUSE_UNIFORM,
278 287
279 /* OpenMP clause: to (extended-list). 288 /* OpenMP clause: to (extended-list).
295 (variable-list). 304 (variable-list).
296 305
297 OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list). */ 306 OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list). */
298 OMP_CLAUSE_MAP, 307 OMP_CLAUSE_MAP,
299 308
300 /* OpenACC clause: use_device (variable_list). 309 /* OpenACC clause: use_device (variable-list).
301 OpenMP clause: use_device_ptr (variable-list). */ 310 OpenMP clause: use_device_ptr (ptr-list). */
302 OMP_CLAUSE_USE_DEVICE_PTR, 311 OMP_CLAUSE_USE_DEVICE_PTR,
312
313 /* OpenMP clause: use_device_addr (variable-list). */
314 OMP_CLAUSE_USE_DEVICE_ADDR,
303 315
304 /* OpenMP clause: is_device_ptr (variable-list). */ 316 /* OpenMP clause: is_device_ptr (variable-list). */
305 OMP_CLAUSE_IS_DEVICE_PTR, 317 OMP_CLAUSE_IS_DEVICE_PTR,
318
319 /* OpenMP clause: inclusive (variable-list). */
320 OMP_CLAUSE_INCLUSIVE,
321
322 /* OpenMP clause: exclusive (variable-list). */
323 OMP_CLAUSE_EXCLUSIVE,
306 324
307 /* Internal structure to hold OpenACC cache directive's variable-list. 325 /* Internal structure to hold OpenACC cache directive's variable-list.
308 #pragma acc cache (variable-list). */ 326 #pragma acc cache (variable-list). */
309 OMP_CLAUSE__CACHE_, 327 OMP_CLAUSE__CACHE_,
310 328
329 OMP_CLAUSE_SEQ, 347 OMP_CLAUSE_SEQ,
330 348
331 /* Internal clause: temporary for combined loops expansion. */ 349 /* Internal clause: temporary for combined loops expansion. */
332 OMP_CLAUSE__LOOPTEMP_, 350 OMP_CLAUSE__LOOPTEMP_,
333 351
352 /* Internal clause: temporary for task reductions. */
353 OMP_CLAUSE__REDUCTEMP_,
354
355 /* Internal clause: temporary for lastprivate(conditional:). */
356 OMP_CLAUSE__CONDTEMP_,
357
358 /* Internal clause: temporary for inscan reductions. */
359 OMP_CLAUSE__SCANTEMP_,
360
334 /* OpenACC/OpenMP clause: if (scalar-expression). */ 361 /* OpenACC/OpenMP clause: if (scalar-expression). */
335 OMP_CLAUSE_IF, 362 OMP_CLAUSE_IF,
336 363
337 /* OpenMP clause: num_threads (integer-expression). */ 364 /* OpenMP clause: num_threads (integer-expression). */
338 OMP_CLAUSE_NUM_THREADS, 365 OMP_CLAUSE_NUM_THREADS,
386 OMP_CLAUSE_SAFELEN, 413 OMP_CLAUSE_SAFELEN,
387 414
388 /* OpenMP clause: simdlen (constant-integer-expression). */ 415 /* OpenMP clause: simdlen (constant-integer-expression). */
389 OMP_CLAUSE_SIMDLEN, 416 OMP_CLAUSE_SIMDLEN,
390 417
418 /* OpenMP clause: device_type ({host,nohost,any}). */
419 OMP_CLAUSE_DEVICE_TYPE,
420
391 /* OpenMP clause: for. */ 421 /* OpenMP clause: for. */
392 OMP_CLAUSE_FOR, 422 OMP_CLAUSE_FOR,
393 423
394 /* OpenMP clause: parallel. */ 424 /* OpenMP clause: parallel. */
395 OMP_CLAUSE_PARALLEL, 425 OMP_CLAUSE_PARALLEL,
421 /* OpenMP clause: hint (integer-expression). */ 451 /* OpenMP clause: hint (integer-expression). */
422 OMP_CLAUSE_HINT, 452 OMP_CLAUSE_HINT,
423 453
424 /* OpenMP clause: defaultmap (tofrom: scalar). */ 454 /* OpenMP clause: defaultmap (tofrom: scalar). */
425 OMP_CLAUSE_DEFAULTMAP, 455 OMP_CLAUSE_DEFAULTMAP,
456
457 /* OpenMP clause: order (concurrent). */
458 OMP_CLAUSE_ORDER,
459
460 /* OpenMP clause: bind (binding). */
461 OMP_CLAUSE_BIND,
426 462
427 /* Internally used only clause, holding SIMD uid. */ 463 /* Internally used only clause, holding SIMD uid. */
428 OMP_CLAUSE__SIMDUID_, 464 OMP_CLAUSE__SIMDUID_,
429 465
430 /* Internally used only clause, flag whether this is SIMT simd 466 /* Internally used only clause, flag whether this is SIMT simd
489 OMP_CLAUSE_DEFAULT_NONE, 525 OMP_CLAUSE_DEFAULT_NONE,
490 OMP_CLAUSE_DEFAULT_PRIVATE, 526 OMP_CLAUSE_DEFAULT_PRIVATE,
491 OMP_CLAUSE_DEFAULT_FIRSTPRIVATE, 527 OMP_CLAUSE_DEFAULT_FIRSTPRIVATE,
492 OMP_CLAUSE_DEFAULT_PRESENT, 528 OMP_CLAUSE_DEFAULT_PRESENT,
493 OMP_CLAUSE_DEFAULT_LAST 529 OMP_CLAUSE_DEFAULT_LAST
530 };
531
532 enum omp_clause_defaultmap_kind {
533 OMP_CLAUSE_DEFAULTMAP_CATEGORY_UNSPECIFIED,
534 OMP_CLAUSE_DEFAULTMAP_CATEGORY_SCALAR,
535 OMP_CLAUSE_DEFAULTMAP_CATEGORY_AGGREGATE,
536 OMP_CLAUSE_DEFAULTMAP_CATEGORY_ALLOCATABLE,
537 OMP_CLAUSE_DEFAULTMAP_CATEGORY_POINTER,
538 OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK = 7,
539 OMP_CLAUSE_DEFAULTMAP_ALLOC = 1 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
540 OMP_CLAUSE_DEFAULTMAP_TO = 2 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
541 OMP_CLAUSE_DEFAULTMAP_FROM = 3 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
542 OMP_CLAUSE_DEFAULTMAP_TOFROM = 4 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
543 OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE
544 = 5 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
545 OMP_CLAUSE_DEFAULTMAP_NONE = 6 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
546 OMP_CLAUSE_DEFAULTMAP_DEFAULT
547 = 7 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
548 OMP_CLAUSE_DEFAULTMAP_MASK = 7 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1)
549 };
550
551 enum omp_clause_bind_kind {
552 OMP_CLAUSE_BIND_TEAMS,
553 OMP_CLAUSE_BIND_PARALLEL,
554 OMP_CLAUSE_BIND_THREAD
555 };
556
557 /* memory-order-clause on OpenMP atomic/flush constructs or
558 argument of atomic_default_mem_order clause. */
559 enum omp_memory_order {
560 OMP_MEMORY_ORDER_UNSPECIFIED,
561 OMP_MEMORY_ORDER_RELAXED,
562 OMP_MEMORY_ORDER_ACQUIRE,
563 OMP_MEMORY_ORDER_RELEASE,
564 OMP_MEMORY_ORDER_ACQ_REL,
565 OMP_MEMORY_ORDER_SEQ_CST
494 }; 566 };
495 567
496 /* There is a TYPE_QUAL value for each type qualifier. They can be 568 /* There is a TYPE_QUAL value for each type qualifier. They can be
497 combined by bitwise-or to form the complete set of qualifiers for a 569 combined by bitwise-or to form the complete set of qualifiers for a
498 type. */ 570 type. */
621 TI_POINTER_SIZED_TYPE, 693 TI_POINTER_SIZED_TYPE,
622 694
623 TI_DFLOAT32_TYPE, 695 TI_DFLOAT32_TYPE,
624 TI_DFLOAT64_TYPE, 696 TI_DFLOAT64_TYPE,
625 TI_DFLOAT128_TYPE, 697 TI_DFLOAT128_TYPE,
626 TI_DFLOAT32_PTR_TYPE,
627 TI_DFLOAT64_PTR_TYPE,
628 TI_DFLOAT128_PTR_TYPE,
629 698
630 TI_VOID_LIST_NODE, 699 TI_VOID_LIST_NODE,
631 700
632 TI_MAIN_IDENTIFIER, 701 TI_MAIN_IDENTIFIER,
633 702
705 TI_TARGET_OPTION_DEFAULT, 774 TI_TARGET_OPTION_DEFAULT,
706 TI_TARGET_OPTION_CURRENT, 775 TI_TARGET_OPTION_CURRENT,
707 TI_CURRENT_TARGET_PRAGMA, 776 TI_CURRENT_TARGET_PRAGMA,
708 TI_CURRENT_OPTIMIZE_PRAGMA, 777 TI_CURRENT_OPTIMIZE_PRAGMA,
709 778
779 TI_CHREC_DONT_KNOW,
780 TI_CHREC_KNOWN,
781
710 TI_MAX 782 TI_MAX
711 }; 783 };
712 784
713 /* An enumeration of the standard C integer types. These must be 785 /* An enumeration of the standard C integer types. These must be
714 ordered so that shorter types appear before longer ones, and so 786 ordered so that shorter types appear before longer ones, and so
807 /* Internal within operand_equal_p: */ 879 /* Internal within operand_equal_p: */
808 OEP_NO_HASH_CHECK = 16, 880 OEP_NO_HASH_CHECK = 16,
809 /* Internal within inchash::add_expr: */ 881 /* Internal within inchash::add_expr: */
810 OEP_HASH_CHECK = 32, 882 OEP_HASH_CHECK = 32,
811 /* Makes operand_equal_p handle more expressions: */ 883 /* Makes operand_equal_p handle more expressions: */
812 OEP_LEXICOGRAPHIC = 64 884 OEP_LEXICOGRAPHIC = 64,
885 OEP_BITWISE = 128
813 }; 886 };
814 887
815 /* Enum and arrays used for tree allocation stats. 888 /* Enum and arrays used for tree allocation stats.
816 Keep in sync with tree.c:tree_node_kind_names. */ 889 Keep in sync with tree.c:tree_node_kind_names. */
817 enum tree_node_kind { 890 enum tree_node_kind {
981 unsigned int chrec_var; 1054 unsigned int chrec_var;
982 1055
983 /* Internal function code. */ 1056 /* Internal function code. */
984 enum internal_fn ifn; 1057 enum internal_fn ifn;
985 1058
1059 /* OMP_ATOMIC* memory order. */
1060 enum omp_memory_order omp_atomic_memory_order;
1061
986 /* The following two fields are used for MEM_REF and TARGET_MEM_REF 1062 /* The following two fields are used for MEM_REF and TARGET_MEM_REF
987 expression trees and specify known data non-dependences. For 1063 expression trees and specify known data non-dependences. For
988 two memory references in a function they are known to not 1064 two memory references in a function they are known to not
989 alias if dependence_info.clique are equal and dependence_info.base 1065 alias if dependence_info.clique are equal and dependence_info.base
990 are distinct. */ 1066 are distinct. Clique number zero means there is no information,
1067 clique number one is populated from function global information
1068 and thus needs no remapping on transforms like loop unrolling. */
991 struct { 1069 struct {
992 unsigned short clique; 1070 unsigned short clique;
993 unsigned short base; 1071 unsigned short base;
994 } dependence_info; 1072 } dependence_info;
995 } GTY((skip(""))) u; 1073 } GTY((skip(""))) u;
1093 1171
1094 OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION in 1172 OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION in
1095 OMP_CLAUSE_MAP 1173 OMP_CLAUSE_MAP
1096 1174
1097 OMP_CLAUSE_REDUCTION_OMP_ORIG_REF in 1175 OMP_CLAUSE_REDUCTION_OMP_ORIG_REF in
1098 OMP_CLAUSE_REDUCTION 1176 OMP_CLAUSE_{,TASK_,IN_}REDUCTION
1177
1178 OMP_CLAUSE_USE_DEVICE_PTR_IF_PRESENT in
1179 OMP_CLAUSE_USE_DEVICE_PTR
1099 1180
1100 TRANSACTION_EXPR_RELAXED in 1181 TRANSACTION_EXPR_RELAXED in
1101 TRANSACTION_EXPR 1182 TRANSACTION_EXPR
1102 1183
1103 FALLTHROUGH_LABEL_P in 1184 FALLTHROUGH_LABEL_P in
1120 OMP_SECTION_LAST in 1201 OMP_SECTION_LAST in
1121 OMP_SECTION 1202 OMP_SECTION
1122 1203
1123 OMP_PARALLEL_COMBINED in 1204 OMP_PARALLEL_COMBINED in
1124 OMP_PARALLEL 1205 OMP_PARALLEL
1125
1126 OMP_ATOMIC_SEQ_CST in
1127 OMP_ATOMIC*
1128 1206
1129 OMP_CLAUSE_PRIVATE_OUTER_REF in 1207 OMP_CLAUSE_PRIVATE_OUTER_REF in
1130 OMP_CLAUSE_PRIVATE 1208 OMP_CLAUSE_PRIVATE
1131 1209
1132 OMP_CLAUSE_LINEAR_NO_COPYOUT in 1210 OMP_CLAUSE_LINEAR_NO_COPYOUT in
1148 CALL_ALLOCA_FOR_VAR_P in 1226 CALL_ALLOCA_FOR_VAR_P in
1149 CALL_EXPR 1227 CALL_EXPR
1150 1228
1151 OMP_CLAUSE_LINEAR_VARIABLE_STRIDE in 1229 OMP_CLAUSE_LINEAR_VARIABLE_STRIDE in
1152 OMP_CLAUSE_LINEAR 1230 OMP_CLAUSE_LINEAR
1231
1232 ASM_INLINE_P in
1233 ASM_EXPR
1153 1234
1154 side_effects_flag: 1235 side_effects_flag:
1155 1236
1156 TREE_SIDE_EFFECTS in 1237 TREE_SIDE_EFFECTS in
1157 all expressions 1238 all expressions
1371 enum omp_clause_depend_kind 1452 enum omp_clause_depend_kind
1372 { 1453 {
1373 OMP_CLAUSE_DEPEND_IN, 1454 OMP_CLAUSE_DEPEND_IN,
1374 OMP_CLAUSE_DEPEND_OUT, 1455 OMP_CLAUSE_DEPEND_OUT,
1375 OMP_CLAUSE_DEPEND_INOUT, 1456 OMP_CLAUSE_DEPEND_INOUT,
1457 OMP_CLAUSE_DEPEND_MUTEXINOUTSET,
1376 OMP_CLAUSE_DEPEND_SOURCE, 1458 OMP_CLAUSE_DEPEND_SOURCE,
1377 OMP_CLAUSE_DEPEND_SINK, 1459 OMP_CLAUSE_DEPEND_SINK,
1460 OMP_CLAUSE_DEPEND_DEPOBJ,
1378 OMP_CLAUSE_DEPEND_LAST 1461 OMP_CLAUSE_DEPEND_LAST
1379 }; 1462 };
1380 1463
1381 enum omp_clause_proc_bind_kind 1464 enum omp_clause_proc_bind_kind
1382 { 1465 {
1385 OMP_CLAUSE_PROC_BIND_TRUE = 1, 1468 OMP_CLAUSE_PROC_BIND_TRUE = 1,
1386 OMP_CLAUSE_PROC_BIND_MASTER = 2, 1469 OMP_CLAUSE_PROC_BIND_MASTER = 2,
1387 OMP_CLAUSE_PROC_BIND_CLOSE = 3, 1470 OMP_CLAUSE_PROC_BIND_CLOSE = 3,
1388 OMP_CLAUSE_PROC_BIND_SPREAD = 4, 1471 OMP_CLAUSE_PROC_BIND_SPREAD = 4,
1389 OMP_CLAUSE_PROC_BIND_LAST 1472 OMP_CLAUSE_PROC_BIND_LAST
1473 };
1474
1475 enum omp_clause_device_type_kind
1476 {
1477 OMP_CLAUSE_DEVICE_TYPE_HOST = 1,
1478 OMP_CLAUSE_DEVICE_TYPE_NOHOST = 2,
1479 OMP_CLAUSE_DEVICE_TYPE_ANY = 3
1390 }; 1480 };
1391 1481
1392 enum omp_clause_linear_kind 1482 enum omp_clause_linear_kind
1393 { 1483 {
1394 OMP_CLAUSE_LINEAR_DEFAULT, 1484 OMP_CLAUSE_LINEAR_DEFAULT,
1461 unsigned int map_kind; 1551 unsigned int map_kind;
1462 enum omp_clause_proc_bind_kind proc_bind_kind; 1552 enum omp_clause_proc_bind_kind proc_bind_kind;
1463 enum tree_code reduction_code; 1553 enum tree_code reduction_code;
1464 enum omp_clause_linear_kind linear_kind; 1554 enum omp_clause_linear_kind linear_kind;
1465 enum tree_code if_modifier; 1555 enum tree_code if_modifier;
1556 enum omp_clause_defaultmap_kind defaultmap_kind;
1557 enum omp_clause_bind_kind bind_kind;
1558 enum omp_clause_device_type_kind device_type_kind;
1466 /* The dimension a OMP_CLAUSE__GRIDDIM_ clause of a gridified target 1559 /* The dimension a OMP_CLAUSE__GRIDDIM_ clause of a gridified target
1467 construct describes. */ 1560 construct describes. */
1468 unsigned int dimension; 1561 unsigned int dimension;
1469 } GTY ((skip)) subcode; 1562 } GTY ((skip)) subcode;
1470 1563
1513 unsigned restrict_flag : 1; 1606 unsigned restrict_flag : 1;
1514 unsigned contains_placeholder_bits : 2; 1607 unsigned contains_placeholder_bits : 2;
1515 1608
1516 ENUM_BITFIELD(machine_mode) mode : 8; 1609 ENUM_BITFIELD(machine_mode) mode : 8;
1517 1610
1611 /* TYPE_STRING_FLAG for INTEGER_TYPE and ARRAY_TYPE.
1612 TYPE_CXX_ODR_P for RECORD_TYPE and UNION_TYPE. */
1518 unsigned string_flag : 1; 1613 unsigned string_flag : 1;
1519 unsigned lang_flag_0 : 1; 1614 unsigned lang_flag_0 : 1;
1520 unsigned lang_flag_1 : 1; 1615 unsigned lang_flag_1 : 1;
1521 unsigned lang_flag_2 : 1; 1616 unsigned lang_flag_2 : 1;
1522 unsigned lang_flag_3 : 1; 1617 unsigned lang_flag_3 : 1;
1532 as well), hence six bits. */ 1627 as well), hence six bits. */
1533 unsigned align : 6; 1628 unsigned align : 6;
1534 unsigned warn_if_not_align : 6; 1629 unsigned warn_if_not_align : 6;
1535 unsigned typeless_storage : 1; 1630 unsigned typeless_storage : 1;
1536 unsigned empty_flag : 1; 1631 unsigned empty_flag : 1;
1537 unsigned spare : 17; 1632 unsigned indivisible_p : 1;
1633 unsigned spare : 16;
1538 1634
1539 alias_set_type alias_set; 1635 alias_set_type alias_set;
1540 tree pointer_to; 1636 tree pointer_to;
1541 tree reference_to; 1637 tree reference_to;
1542 union tree_type_symtab { 1638 union tree_type_symtab {
1631 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */ 1727 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */
1632 unsigned decl_by_reference_flag : 1; 1728 unsigned decl_by_reference_flag : 1;
1633 /* In a VAR_DECL and PARM_DECL, this is DECL_READ_P. */ 1729 /* In a VAR_DECL and PARM_DECL, this is DECL_READ_P. */
1634 unsigned decl_read_flag : 1; 1730 unsigned decl_read_flag : 1;
1635 /* In a VAR_DECL or RESULT_DECL, this is DECL_NONSHAREABLE. */ 1731 /* In a VAR_DECL or RESULT_DECL, this is DECL_NONSHAREABLE. */
1732 /* In a PARM_DECL, this is DECL_HIDDEN_STRING_LENGTH. */
1636 unsigned decl_nonshareable_flag : 1; 1733 unsigned decl_nonshareable_flag : 1;
1637 1734
1638 /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */ 1735 /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */
1639 unsigned int off_align : 6; 1736 unsigned int off_align : 6;
1640 1737
1737 struct tree_decl_with_vis common; 1834 struct tree_decl_with_vis common;
1738 /* Almost all FE's use this. */ 1835 /* Almost all FE's use this. */
1739 tree result; 1836 tree result;
1740 }; 1837 };
1741 1838
1839 /* Classify a special function declaration type. */
1840
1841 enum function_decl_type
1842 {
1843 NONE,
1844 OPERATOR_NEW,
1845 OPERATOR_DELETE,
1846 LAMBDA_FUNCTION
1847
1848 /* 0 values left */
1849 };
1850
1742 /* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the 1851 /* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the
1743 arguments/result/saved_tree fields by front ends. It was either inherit 1852 arguments/result/saved_tree fields by front ends. It was either inherit
1744 FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL, 1853 FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL,
1745 which seemed a bit strange. */ 1854 which seemed a bit strange. */
1746 1855
1761 /* Generic function body. */ 1870 /* Generic function body. */
1762 tree saved_tree; 1871 tree saved_tree;
1763 /* Index within a virtual table. */ 1872 /* Index within a virtual table. */
1764 tree vindex; 1873 tree vindex;
1765 1874
1766 /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is 1875 /* In a FUNCTION_DECL this is DECL_UNCHECKED_FUNCTION_CODE. */
1767 DECL_FUNCTION_CODE. Otherwise unused. 1876 unsigned int function_code;
1768 ??? The bitfield needs to be able to hold all target function 1877
1769 codes as well. */
1770 ENUM_BITFIELD(built_in_function) function_code : 12;
1771 ENUM_BITFIELD(built_in_class) built_in_class : 2; 1878 ENUM_BITFIELD(built_in_class) built_in_class : 2;
1772
1773 unsigned static_ctor_flag : 1; 1879 unsigned static_ctor_flag : 1;
1774 unsigned static_dtor_flag : 1; 1880 unsigned static_dtor_flag : 1;
1775
1776 unsigned uninlinable : 1; 1881 unsigned uninlinable : 1;
1777 unsigned possibly_inlined : 1; 1882 unsigned possibly_inlined : 1;
1778 unsigned novops_flag : 1; 1883 unsigned novops_flag : 1;
1779 unsigned returns_twice_flag : 1; 1884 unsigned returns_twice_flag : 1;
1885
1780 unsigned malloc_flag : 1; 1886 unsigned malloc_flag : 1;
1781 unsigned operator_new_flag : 1;
1782 unsigned declared_inline_flag : 1; 1887 unsigned declared_inline_flag : 1;
1783 unsigned no_inline_warning_flag : 1; 1888 unsigned no_inline_warning_flag : 1;
1784
1785 unsigned no_instrument_function_entry_exit : 1; 1889 unsigned no_instrument_function_entry_exit : 1;
1786 unsigned no_limit_stack : 1; 1890 unsigned no_limit_stack : 1;
1787 unsigned disregard_inline_limits : 1; 1891 unsigned disregard_inline_limits : 1;
1788 unsigned pure_flag : 1; 1892 unsigned pure_flag : 1;
1789 unsigned looping_const_or_pure_flag : 1; 1893 unsigned looping_const_or_pure_flag : 1;
1894
1895 /* Align the bitfield to boundary of a byte. */
1896 ENUM_BITFIELD(function_decl_type) decl_type: 2;
1790 unsigned has_debug_args_flag : 1; 1897 unsigned has_debug_args_flag : 1;
1791 unsigned versioned_function : 1; 1898 unsigned versioned_function : 1;
1792 unsigned lambda_function: 1; 1899
1793 /* No bits left. */ 1900 /* 12 bits left for future expansion. */
1794 }; 1901 };
1795 1902
1796 struct GTY(()) tree_translation_unit_decl { 1903 struct GTY(()) tree_translation_unit_decl {
1797 struct tree_decl_common common; 1904 struct tree_decl_common common;
1798 /* Source language of this translation unit. Used for DWARF output. */ 1905 /* Source language of this translation unit. Used for DWARF output. */
1838 struct target_optabs *GTY ((skip)) base_optabs; 1945 struct target_optabs *GTY ((skip)) base_optabs;
1839 }; 1946 };
1840 1947
1841 /* Forward declaration, defined in target-globals.h. */ 1948 /* Forward declaration, defined in target-globals.h. */
1842 1949
1843 struct GTY(()) target_globals; 1950 class GTY(()) target_globals;
1844 1951
1845 /* Target options used by a function. */ 1952 /* Target options used by a function. */
1846 1953
1847 struct GTY(()) tree_target_option { 1954 struct GTY(()) tree_target_option {
1848 struct tree_base base; 1955 struct tree_base base;
1849 1956
1850 /* Target globals for the corresponding target option. */ 1957 /* Target globals for the corresponding target option. */
1851 struct target_globals *globals; 1958 class target_globals *globals;
1852 1959
1853 /* The optimization options used by the user. */ 1960 /* The optimization options used by the user. */
1854 struct cl_target_option *opts; 1961 struct cl_target_option *opts;
1855 }; 1962 };
1856 1963