annotate gcc/tree-inline.h @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* Tree inlining hooks and declarations.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2001-2020 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Contributed by Alexandre Oliva <aoliva@redhat.com>
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 This file is part of GCC.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 the Free Software Foundation; either version 3, or (at your option)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 any later version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 GNU General Public License for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 #ifndef GCC_TREE_INLINE_H
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #define GCC_TREE_INLINE_H
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
24
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
25 struct cgraph_edge;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
27 /* Indicate the desired behavior wrt call graph edges. We can either
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
28 duplicate the edge (inlining, cloning), move the edge (versioning,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
29 parallelization), or move the edges of the clones (saving). */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
30
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
31 enum copy_body_cge_which
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
32 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
33 CB_CGE_DUPLICATE,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
34 CB_CGE_MOVE,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
35 CB_CGE_MOVE_CLONES
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
36 };
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
111
kono
parents: 67
diff changeset
38 typedef int_hash <unsigned short, 0> dependence_hash;
kono
parents: 67
diff changeset
39
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 /* Data required for function body duplication. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
111
kono
parents: 67
diff changeset
42 struct copy_body_data
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 /* FUNCTION_DECL for function being inlined, or in general the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 source function providing the original trees. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 tree src_fn;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 /* FUNCTION_DECL for function being inlined into, or in general
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 the destination function receiving the new trees. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 tree dst_fn;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 /* Callgraph node of the source function. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 struct cgraph_node *src_node;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 /* Callgraph node of the destination function. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 struct cgraph_node *dst_node;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 /* struct function for function being inlined. Usually this is the same
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 as DECL_STRUCT_FUNCTION (src_fn), but can be different if saved_cfg
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 and saved_eh are in use. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 struct function *src_cfun;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 /* The VAR_DECL for the return value. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 tree retvar;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 /* The map from local declarations in the inlined function to
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 equivalents in the function into which it is being inlined. */
111
kono
parents: 67
diff changeset
68 hash_map<tree, tree> *decl_map;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 /* Create a new decl to replace DECL in the destination function. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 tree (*copy_decl) (tree, struct copy_body_data *);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 /* Current BLOCK. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 tree block;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 /* GIMPLE_CALL if va arg parameter packs should be expanded or NULL
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 is not. */
111
kono
parents: 67
diff changeset
78 gcall *call_stmt;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
80 /* > 0 if we are remapping a type currently. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
81 int remapping_type_depth;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
82
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
83 /* Exception landing pad the inlined call lies in. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
84 int eh_lp_nr;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
86 /* Maps region and landing pad structures from the function being copied
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
87 to duplicates created within the function we inline into. */
111
kono
parents: 67
diff changeset
88 hash_map<void *, void *> *eh_map;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 /* We use the same mechanism do all sorts of different things. Rather
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 than enumerating the different cases, we categorize the behavior
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 in the various situations. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
94 /* What to do with call graph edges. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
95 enum copy_body_cge_which transform_call_graph_edges;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 /* True if a new CFG should be created. False for inlining, true for
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 everything else. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 bool transform_new_cfg;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 /* True if RETURN_EXPRs should be transformed to just the contained
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 MODIFY_EXPR. The branch semantics of the return will be handled
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 by manipulating the CFG rather than a statement. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 bool transform_return_to_modify;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
111
kono
parents: 67
diff changeset
106 /* True if the parameters of the source function are transformed.
kono
parents: 67
diff changeset
107 Only true for inlining. */
kono
parents: 67
diff changeset
108 bool transform_parameter;
kono
parents: 67
diff changeset
109
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 /* True if this statement will need to be regimplified. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 bool regimplify;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
113 /* True if trees may not be unshared. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
114 bool do_not_unshare;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
115
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
116 /* True if trees should not be folded during the copying. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
117 bool do_not_fold;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
118
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
119 /* True if new declarations may not be created during type remapping. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
120 bool prevent_decl_creation_for_types;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
121
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
122 /* True if the location information will need to be reset. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
123 bool reset_location;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
125 /* Replace error_mark_node as upper bound of array types with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
126 an uninitialized VAR_DECL temporary. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
127 bool adjust_array_error_bounds;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
128
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
129 /* Usually copy_decl callback always creates new decls, in that case
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
130 we want to remap all variably_modified_type_p types. If this flag
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
131 is set, remap_type will do further checks to see if remap_decl
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
132 of any decls mentioned in the type will remap to anything but itself
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
133 and only in that case will actually remap the type. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
134 bool dont_remap_vla_if_no_change;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
135
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 /* A function to be called when duplicating BLOCK nodes. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 void (*transform_lang_insert_block) (tree);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 /* Statements that might be possibly folded. */
111
kono
parents: 67
diff changeset
140 hash_set<gimple *> *statements_to_fold;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 /* Entry basic block to currently copied body. */
111
kono
parents: 67
diff changeset
143 basic_block entry_bb;
kono
parents: 67
diff changeset
144
kono
parents: 67
diff changeset
145 /* For partial function versioning, bitmap of bbs to be copied,
kono
parents: 67
diff changeset
146 otherwise NULL. */
kono
parents: 67
diff changeset
147 bitmap blocks_to_copy;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
148
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
149 /* Debug statements that need processing. */
111
kono
parents: 67
diff changeset
150 vec<gdebug *> debug_stmts;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
151
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
152 /* A map from local declarations in the inlined function to
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
153 equivalents in the function into which it is being inlined, where
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
154 the originals have been mapped to a value rather than to a
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
155 variable. */
111
kono
parents: 67
diff changeset
156 hash_map<tree, tree> *debug_map;
kono
parents: 67
diff changeset
157
kono
parents: 67
diff changeset
158 /* A map from the inlined functions dependence info cliques to
kono
parents: 67
diff changeset
159 equivalents in the function into which it is being inlined. */
kono
parents: 67
diff changeset
160 hash_map<dependence_hash, unsigned short> *dependence_map;
kono
parents: 67
diff changeset
161
kono
parents: 67
diff changeset
162 /* A list of addressable local variables remapped into the caller
kono
parents: 67
diff changeset
163 when inlining a call within an OpenMP SIMD-on-SIMT loop. */
kono
parents: 67
diff changeset
164 vec<tree> *dst_simt_vars;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
165
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
166 /* Basic block to which clobbers for local variables from the inline
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
167 function that need to live in memory should be added. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
168 basic_block eh_landing_pad_dest;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
169
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
170 /* If clobbers for local variables from the inline function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
171 that need to live in memory should be added to EH landing pads
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
172 outside of the inlined function, this should be the number
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
173 of basic blocks in the caller before inlining. Zero otherwise. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
174 int add_clobbers_to_eh_landing_pads;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
175
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
176 /* Class managing changes to function parameters and return value planned
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
177 during IPA stage. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
178 class ipa_param_body_adjustments *param_body_adjs;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
179
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
180 /* Hash set of SSA names that have been killed during call graph edge
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
181 redirection and should not be introduced into debug statements or NULL if no
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
182 SSA_NAME was deleted during redirections happened. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
183 hash_set <tree> *killed_new_ssa_names;
111
kono
parents: 67
diff changeset
184 };
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
185
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 /* Weights of constructions for estimate_num_insns. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187
111
kono
parents: 67
diff changeset
188 struct eni_weights
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 /* Cost per call. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 unsigned call_cost;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192
111
kono
parents: 67
diff changeset
193 /* Cost per indirect call. */
kono
parents: 67
diff changeset
194 unsigned indirect_call_cost;
kono
parents: 67
diff changeset
195
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 /* Cost per call to a target specific builtin */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 unsigned target_builtin_call_cost;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 /* Cost of "expensive" div and mod operations. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 unsigned div_mod_cost;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 /* Cost for omp construct. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 unsigned omp_cost;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
204
111
kono
parents: 67
diff changeset
205 /* Cost for tm transaction. */
kono
parents: 67
diff changeset
206 unsigned tm_cost;
kono
parents: 67
diff changeset
207
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
208 /* Cost of return. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
209 unsigned return_cost;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
210
111
kono
parents: 67
diff changeset
211 /* True when time of statement should be estimated. Thus, the
kono
parents: 67
diff changeset
212 cost of a switch statement is logarithmic rather than linear in number
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
213 of cases. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
214 bool time_based;
111
kono
parents: 67
diff changeset
215 };
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 /* Weights that estimate_num_insns uses for heuristics in inlining. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 extern eni_weights eni_inlining_weights;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 /* Weights that estimate_num_insns uses to estimate the size of the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 produced code. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 extern eni_weights eni_size_weights;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 /* Weights that estimate_num_insns uses to estimate the time necessary
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 to execute the produced code. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 extern eni_weights eni_time_weights;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 /* Function prototypes. */
111
kono
parents: 67
diff changeset
232 void init_inline_once (void);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 extern tree copy_tree_body_r (tree *, int *, void *);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 extern void insert_decl_map (copy_body_data *, tree, tree);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 unsigned int optimize_inline_calls (tree);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
236 tree maybe_inline_call_in_expr (tree);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 bool tree_inlinable_function_p (tree);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 tree copy_tree_r (tree *, int *, void *);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 tree copy_decl_no_change (tree decl, copy_body_data *id);
111
kono
parents: 67
diff changeset
240 int estimate_move_cost (tree type, bool);
kono
parents: 67
diff changeset
241 int estimate_num_insns (gimple *, eni_weights *);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 int estimate_num_insns_fn (tree, eni_weights *);
111
kono
parents: 67
diff changeset
243 int estimate_num_insns_seq (gimple_seq, eni_weights *);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 bool tree_versionable_function_p (tree);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 extern tree remap_decl (tree decl, copy_body_data *id);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 extern tree remap_type (tree type, copy_body_data *id);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 extern gimple_seq copy_gimple_seq_and_replace_locals (gimple_seq seq);
111
kono
parents: 67
diff changeset
248 extern bool debug_find_tree (tree, tree);
kono
parents: 67
diff changeset
249 extern tree copy_fn (tree, tree&, tree&);
kono
parents: 67
diff changeset
250 extern const char *copy_forbidden (struct function *fun);
kono
parents: 67
diff changeset
251 extern tree copy_decl_for_dup_finish (copy_body_data *id, tree decl, tree copy);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
252 extern tree copy_decl_to_var (tree, copy_body_data *);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
253 extern tree force_value_to_type (tree type, tree value);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254
111
kono
parents: 67
diff changeset
255 /* This is in tree-inline.c since the routine uses
kono
parents: 67
diff changeset
256 data structures from the inliner. */
kono
parents: 67
diff changeset
257 extern tree build_duplicate_type (tree);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 #endif /* GCC_TREE_INLINE_H */