This repository was archived by the owner on May 28, 2025. It is now read-only.
Commit a1a3f02
committed
Auto merge of rust-lang#133566 - lcnr:fast-reject-perf, r=<try>
fast-reject: add cache
slightly modified version of rust-lang#133524
I originally wanted to simply bail after recursion for a certain amount of times, however, looking at the number of steps taken while compiling different crates we get the following results[^1]:
typenum
```rust
1098842 counts
( 1) 670511 (61.0%, 61.0%): dropping after 1
( 2) 358785 (32.7%, 93.7%): dropping after 0
( 3) 25191 ( 2.3%, 96.0%): dropping after 2
( 4) 10912 ( 1.0%, 97.0%): dropping after 4
( 5) 6461 ( 0.6%, 97.5%): dropping after 3
( 6) 5239 ( 0.5%, 98.0%): dropping after 5
( 7) 2528 ( 0.2%, 98.3%): dropping after 8
( 8) 2188 ( 0.2%, 98.5%): dropping after 1094
( 9) 2097 ( 0.2%, 98.6%): dropping after 6
( 10) 1179 ( 0.1%, 98.7%): dropping after 34
( 11) 1148 ( 0.1%, 98.9%): dropping after 7
( 12) 822 ( 0.1%, 98.9%): dropping after 10
```
bitmaps
```rust
533346 counts
( 1) 526166 (98.7%, 98.7%): dropping after 1
( 2) 4562 ( 0.9%, 99.5%): dropping after 0
( 3) 2072 ( 0.4%, 99.9%): dropping after 1024
( 4) 305 ( 0.1%,100.0%): dropping after 2
( 5) 106 ( 0.0%,100.0%): dropping after 4
( 6) 30 ( 0.0%,100.0%): dropping after 8
( 7) 18 ( 0.0%,100.0%): dropping after 3
( 8) 17 ( 0.0%,100.0%): dropping after 44
( 9) 15 ( 0.0%,100.0%): dropping after 168
( 10) 8 ( 0.0%,100.0%): dropping after 14
( 11) 7 ( 0.0%,100.0%): dropping after 13
( 12) 7 ( 0.0%,100.0%): dropping after 24
```
stage 2 compiler is mostly trivial, but has a few cases where we get >5000
```rust
12987156 counts
( 1) 9280476 (71.5%, 71.5%): dropping after 0
( 2) 2277841 (17.5%, 89.0%): dropping after 1
( 3) 724888 ( 5.6%, 94.6%): dropping after 2
( 4) 204005 ( 1.6%, 96.2%): dropping after 4
( 5) 146537 ( 1.1%, 97.3%): dropping after 3
( 6) 64287 ( 0.5%, 97.8%): dropping after 5
( 7) 43938 ( 0.3%, 98.1%): dropping after 6
( 8) 43758 ( 0.3%, 98.4%): dropping after 8
( 9) 27220 ( 0.2%, 98.7%): dropping after 7
( 10) 17374 ( 0.1%, 98.8%): dropping after 9
( 11) 16015 ( 0.1%, 98.9%): dropping after 10
( 12) 12855 ( 0.1%, 99.0%): dropping after 12
( 13) 10494 ( 0.1%, 99.1%): dropping after 11
( 14) 7553 ( 0.1%, 99.2%): dropping after 14
```
Given that we have crates which frequently rely on fairly deep recursion, actually using a cache seems better than using an arbitrary cutoff here. Having an impl which is large enough to trigger a cutoff instead of getting rejected noticeably impacts perf, so just using a cache in these cases seems better to me. Does not matter too much in the end, we only have to make sure we don't regress crates which don't recurse deeply.
[^1]: i've incremented a counter in the place I now call `if cache.get(&(lhs, rhs))` and then printed it on drop
r? `@compiler-errors`1 file changed
+53
-17
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
214 | 214 | | |
215 | 215 | | |
216 | 216 | | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
217 | 221 | | |
218 | 222 | | |
219 | 223 | | |
220 | 224 | | |
221 | 225 | | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
222 | 242 | | |
223 | 243 | | |
224 | 244 | | |
225 | 245 | | |
226 | 246 | | |
227 | | - | |
| 247 | + | |
228 | 248 | | |
229 | 249 | | |
230 | | - | |
| 250 | + | |
231 | 251 | | |
232 | 252 | | |
233 | 253 | | |
234 | 254 | | |
235 | 255 | | |
236 | 256 | | |
237 | | - | |
| 257 | + | |
238 | 258 | | |
239 | 259 | | |
240 | 260 | | |
| |||
273 | 293 | | |
274 | 294 | | |
275 | 295 | | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
276 | 309 | | |
277 | 310 | | |
278 | 311 | | |
279 | 312 | | |
280 | | - | |
| 313 | + | |
281 | 314 | | |
282 | 315 | | |
283 | 316 | | |
284 | 317 | | |
285 | 318 | | |
286 | 319 | | |
287 | | - | |
| 320 | + | |
288 | 321 | | |
289 | 322 | | |
290 | 323 | | |
| |||
326 | 359 | | |
327 | 360 | | |
328 | 361 | | |
329 | | - | |
| 362 | + | |
330 | 363 | | |
331 | 364 | | |
332 | 365 | | |
333 | 366 | | |
334 | 367 | | |
335 | 368 | | |
336 | | - | |
| 369 | + | |
| 370 | + | |
337 | 371 | | |
338 | 372 | | |
339 | 373 | | |
340 | 374 | | |
341 | 375 | | |
342 | 376 | | |
343 | | - | |
| 377 | + | |
344 | 378 | | |
345 | 379 | | |
346 | 380 | | |
347 | 381 | | |
348 | 382 | | |
349 | | - | |
| 383 | + | |
350 | 384 | | |
351 | 385 | | |
352 | 386 | | |
| |||
366 | 400 | | |
367 | 401 | | |
368 | 402 | | |
369 | | - | |
| 403 | + | |
370 | 404 | | |
371 | 405 | | |
372 | 406 | | |
| |||
375 | 409 | | |
376 | 410 | | |
377 | 411 | | |
378 | | - | |
| 412 | + | |
379 | 413 | | |
380 | 414 | | |
381 | 415 | | |
382 | 416 | | |
383 | 417 | | |
384 | 418 | | |
385 | | - | |
| 419 | + | |
386 | 420 | | |
387 | 421 | | |
388 | 422 | | |
389 | 423 | | |
390 | 424 | | |
391 | 425 | | |
392 | | - | |
| 426 | + | |
393 | 427 | | |
394 | 428 | | |
395 | 429 | | |
396 | 430 | | |
397 | 431 | | |
398 | 432 | | |
399 | | - | |
| 433 | + | |
400 | 434 | | |
401 | 435 | | |
402 | 436 | | |
403 | 437 | | |
404 | 438 | | |
405 | 439 | | |
406 | | - | |
| 440 | + | |
407 | 441 | | |
408 | 442 | | |
409 | 443 | | |
410 | 444 | | |
411 | 445 | | |
412 | 446 | | |
413 | | - | |
| 447 | + | |
414 | 448 | | |
415 | 449 | | |
416 | 450 | | |
417 | 451 | | |
418 | 452 | | |
419 | 453 | | |
420 | | - | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
421 | 457 | | |
422 | 458 | | |
423 | 459 | | |
| |||
0 commit comments