]>
Commit | Line | Data |
---|---|---|
32154c89 | 1 | /* Struct-reorg optimization. |
fa10beec | 2 | Copyright (C) 2002, 2003-2007, 2008 Free Software Foundation, Inc. |
32154c89 OG |
3 | Contributed by Olga Golovanevsky <olga@il.ibm.com> |
4 | ||
5 | This file is part of GCC. | |
6 | ||
7 | GCC is free software; you can redistribute it and/or modify | |
8 | under the terms of the GNU General Public License as published by | |
9 | the Free Software Foundation; either version 2 of the License, or | |
10 | (at your option) any later version. | |
11 | ||
12 | GCC 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. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
18 | along with GCC; if not, write to the Free Software | |
19 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
20 | 02110-1301, USA. */ | |
21 | ||
22 | #ifndef IPA_STRUCT_REORG_H | |
23 | #define IPA_STRUCT_REORG_H | |
24 | ||
25 | /* This file contains data structures and interfaces required | |
26 | for struct-reorg optimizations. */ | |
27 | ||
28 | /* An access site of the structure field. | |
29 | We consider an access to be of the following form: | |
30 | ||
31 | D.2166_21 = i.6_20 * 8; | |
32 | D.2167_22 = (struct str_t *) D.2166_21; | |
33 | D.2168_24 = D.2167_22 + p.5_23; | |
34 | D.2169_25 = D.2168_24->b; | |
35 | */ | |
36 | ||
37 | struct field_access_site | |
38 | { | |
39 | /* Statement in which the access site occurs. */ | |
726a989a | 40 | gimple stmt; /* D.2169_25 = D.2168_24->b; */ |
32154c89 OG |
41 | tree comp_ref; /* D.2168_24->b */ |
42 | tree field_decl; /* b */ | |
43 | tree ref; /* D.2168_24 */ | |
44 | tree num; /* i.6_20 */ | |
45 | tree offset; /* D2167_22 */ | |
46 | tree base; /* p.5_23 */ | |
726a989a RB |
47 | gimple ref_def_stmt; /* D.2168_24 = D.2167_22 + p.5_23; */ |
48 | gimple cast_stmt; /* D.2167_22 = (struct str_t *) D.2166_21; | |
32154c89 OG |
49 | This statement is not always present. */ |
50 | }; | |
51 | ||
52 | /* A non-field structure access site. */ | |
53 | struct access_site | |
54 | { | |
55 | /* A statement in which the access site occurs. */ | |
726a989a | 56 | gimple stmt; |
32154c89 OG |
57 | /* A list of structure variables in the access site. */ |
58 | VEC (tree, heap) *vars; | |
59 | }; | |
60 | ||
61 | /* A field of the structure. */ | |
62 | struct field_entry | |
63 | { | |
64 | /* A field index. */ | |
65 | int index; | |
66 | /* Number of times the field is accessed (according to profiling). */ | |
67 | gcov_type count; | |
68 | tree decl; | |
69 | /* A type of a new structure this field belongs to. */ | |
70 | tree field_mapping; | |
71 | htab_t acc_sites; | |
72 | }; | |
73 | ||
74 | /* This structure represents a result of the structure peeling. | |
75 | The original structure is decomposed into substructures, or clusters. */ | |
76 | struct field_cluster | |
77 | { | |
78 | /* A bitmap of field indices. The set bit indicates that the field | |
79 | corresponding to it is a part of this cluster. */ | |
80 | sbitmap fields_in_cluster; | |
81 | struct field_cluster *sibling; | |
82 | }; | |
83 | ||
84 | /* An information about an individual structure type (RECORD_TYPE) required | |
85 | by struct-reorg optimizations to perform a transformation. */ | |
86 | struct data_structure | |
87 | { | |
88 | ||
89 | /* A main variant of the structure type. */ | |
90 | tree decl; | |
91 | ||
92 | /* Number of fields in the structure. */ | |
93 | int num_fields; | |
94 | ||
95 | /* A structure access count collected through profiling. */ | |
96 | gcov_type count; | |
97 | ||
98 | /* An array of the structure fields, indexed by field ID. */ | |
99 | struct field_entry *fields; | |
100 | ||
101 | /* Non-field accesses of the structure. */ | |
102 | htab_t accs; | |
103 | ||
104 | /* A data structure representing a reorganization decision. */ | |
105 | struct field_cluster *struct_clustering; | |
106 | ||
fa10beec | 107 | /* New types to replace the original structure type. */ |
32154c89 OG |
108 | VEC(tree, heap) *new_types; |
109 | }; | |
110 | ||
111 | typedef struct data_structure * d_str; | |
112 | ||
113 | #endif /* IPA_STRUCT_REORG_H */ |