Commit 174199c
committed
[Utils] Identity map module-level debug info on first use in CloneFunction*
Summary:
To avoid cloning module-level debug info (owned by the module rather
than the function), CloneFunction implementation used to eagerly
identity map such debug info into ValueMap's MD map. In larger modules
with meaningful volume of debug info this gets very expensive.
By passing such debug info metadata via an IdentityMD set for the
ValueMapper to map on first use, we get several benefits:
1. Mapping metadata is not cheap, particularly because of tracking. When
cloning a Function we identity map lots of global module-level
metadata to avoid cloning it, while only a fraction of it is actually
used by the function. Mapping on first use is a lot faster for
modules with meaningful amount of debug info.
2. Eagerly identity mapping metadata makes it harder to cache
module-level data (e.g. a set of metadata nodes in a \a DICompileUnit).
With this patch we can cache certain module-level metadata
calculations to speed things up further.
Anecdata from compiling a sample cpp file with full debug info shows that this moderately speeds up
CoroSplitPass which is one of the heavier users of cloning:
| | Baseline | IdentityMD set |
|-----------------|----------|----------------|
| CoroSplitPass | 306ms | 221ms |
| CoroCloner | 101ms | 72ms |
| Speed up | 1x | 1.4x |
Test Plan:
ninja check-llvm-unit
ninja check-llvm
stack-info: PR: #118627, branch: users/artempyanykh/fast-coro-upstream/81 parent 3ed28bb commit 174199c
File tree
4 files changed
+106
-65
lines changed- llvm
- include/llvm/Transforms/Utils
- lib/Transforms/Utils
4 files changed
+106
-65
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
193 | 193 | | |
194 | 194 | | |
195 | 195 | | |
196 | | - | |
| 196 | + | |
| 197 | + | |
197 | 198 | | |
198 | 199 | | |
199 | 200 | | |
| |||
202 | 203 | | |
203 | 204 | | |
204 | 205 | | |
205 | | - | |
| 206 | + | |
| 207 | + | |
206 | 208 | | |
207 | 209 | | |
208 | 210 | | |
| |||
242 | 244 | | |
243 | 245 | | |
244 | 246 | | |
245 | | - | |
246 | | - | |
247 | | - | |
248 | | - | |
249 | | - | |
250 | | - | |
251 | | - | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
252 | 265 | | |
253 | 266 | | |
254 | 267 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| 39 | + | |
38 | 40 | | |
39 | 41 | | |
40 | 42 | | |
| |||
112 | 114 | | |
113 | 115 | | |
114 | 116 | | |
115 | | - | |
| 117 | + | |
116 | 118 | | |
117 | 119 | | |
118 | 120 | | |
| |||
136 | 138 | | |
137 | 139 | | |
138 | 140 | | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
139 | 144 | | |
140 | 145 | | |
141 | 146 | | |
| |||
152 | 157 | | |
153 | 158 | | |
154 | 159 | | |
155 | | - | |
| 160 | + | |
| 161 | + | |
156 | 162 | | |
157 | 163 | | |
158 | 164 | | |
| |||
218 | 224 | | |
219 | 225 | | |
220 | 226 | | |
221 | | - | |
222 | | - | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
223 | 231 | | |
224 | 232 | | |
225 | 233 | | |
| |||
231 | 239 | | |
232 | 240 | | |
233 | 241 | | |
234 | | - | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
235 | 245 | | |
236 | 246 | | |
237 | 247 | | |
| |||
240 | 250 | | |
241 | 251 | | |
242 | 252 | | |
243 | | - | |
244 | | - | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
245 | 257 | | |
246 | 258 | | |
247 | 259 | | |
248 | 260 | | |
249 | 261 | | |
250 | 262 | | |
251 | | - | |
252 | | - | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
253 | 267 | | |
254 | 268 | | |
255 | 269 | | |
| |||
263 | 277 | | |
264 | 278 | | |
265 | 279 | | |
266 | | - | |
267 | | - | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
268 | 284 | | |
269 | 285 | | |
270 | 286 | | |
271 | 287 | | |
272 | 288 | | |
273 | 289 | | |
274 | 290 | | |
275 | | - | |
276 | | - | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
277 | 295 | | |
278 | 296 | | |
279 | 297 | | |
| |||
283 | 301 | | |
284 | 302 | | |
285 | 303 | | |
286 | | - | |
287 | | - | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
288 | 307 | | |
289 | 308 | | |
290 | 309 | | |
| |||
297 | 316 | | |
298 | 317 | | |
299 | 318 | | |
300 | | - | |
301 | | - | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
302 | 322 | | |
303 | 323 | | |
304 | 324 | | |
305 | 325 | | |
306 | 326 | | |
307 | 327 | | |
308 | | - | |
309 | | - | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
310 | 332 | | |
311 | 333 | | |
312 | 334 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
152 | 152 | | |
153 | 153 | | |
154 | 154 | | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
159 | | - | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
160 | 161 | | |
161 | 162 | | |
162 | | - | |
163 | | - | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | 163 | | |
175 | 164 | | |
176 | 165 | | |
177 | | - | |
| 166 | + | |
178 | 167 | | |
179 | 168 | | |
180 | 169 | | |
181 | 170 | | |
182 | 171 | | |
183 | 172 | | |
184 | | - | |
| 173 | + | |
185 | 174 | | |
186 | 175 | | |
187 | 176 | | |
188 | | - | |
| 177 | + | |
189 | 178 | | |
190 | 179 | | |
191 | | - | |
| 180 | + | |
192 | 181 | | |
193 | 182 | | |
194 | 183 | | |
195 | 184 | | |
196 | 185 | | |
197 | | - | |
| 186 | + | |
198 | 187 | | |
199 | 188 | | |
200 | 189 | | |
201 | 190 | | |
202 | 191 | | |
203 | 192 | | |
204 | | - | |
| 193 | + | |
| 194 | + | |
205 | 195 | | |
206 | 196 | | |
207 | 197 | | |
208 | | - | |
209 | | - | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
210 | 201 | | |
211 | 202 | | |
212 | 203 | | |
| |||
216 | 207 | | |
217 | 208 | | |
218 | 209 | | |
219 | | - | |
| 210 | + | |
| 211 | + | |
220 | 212 | | |
221 | 213 | | |
222 | 214 | | |
| |||
258 | 250 | | |
259 | 251 | | |
260 | 252 | | |
261 | | - | |
| 253 | + | |
| 254 | + | |
262 | 255 | | |
263 | | - | |
| 256 | + | |
264 | 257 | | |
265 | 258 | | |
266 | 259 | | |
| |||
322 | 315 | | |
323 | 316 | | |
324 | 317 | | |
325 | | - | |
326 | | - | |
| 318 | + | |
| 319 | + | |
327 | 320 | | |
328 | | - | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
329 | 324 | | |
330 | 325 | | |
331 | | - | |
| 326 | + | |
332 | 327 | | |
333 | 328 | | |
334 | | - | |
| 329 | + | |
| 330 | + | |
335 | 331 | | |
336 | 332 | | |
337 | 333 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
| 123 | + | |
123 | 124 | | |
124 | 125 | | |
125 | 126 | | |
126 | | - | |
| 127 | + | |
| 128 | + | |
127 | 129 | | |
128 | | - | |
| 130 | + | |
129 | 131 | | |
130 | 132 | | |
131 | 133 | | |
| |||
899 | 901 | | |
900 | 902 | | |
901 | 903 | | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
902 | 911 | | |
903 | 912 | | |
904 | 913 | | |
| |||
1198 | 1207 | | |
1199 | 1208 | | |
1200 | 1209 | | |
1201 | | - | |
1202 | | - | |
| 1210 | + | |
| 1211 | + | |
| 1212 | + | |
1203 | 1213 | | |
1204 | 1214 | | |
1205 | 1215 | | |
| |||
0 commit comments