This repository was archived by the owner on May 28, 2025. It is now read-only.
Commit 613c078
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`File tree
6 files changed
+30
-16
lines changed- compiler
- rustc_trait_selection/src/traits
- select
- rustc_type_ir/src
- src/librustdoc/html/render
6 files changed
+30
-16
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
101 | | - | |
| 101 | + | |
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
| 82 | + | |
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
866 | 866 | | |
867 | 867 | | |
868 | 868 | | |
869 | | - | |
| 869 | + | |
870 | 870 | | |
871 | 871 | | |
872 | 872 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
232 | 232 | | |
233 | 233 | | |
234 | 234 | | |
235 | | - | |
| 235 | + | |
236 | 236 | | |
237 | 237 | | |
238 | 238 | | |
| |||
548 | 548 | | |
549 | 549 | | |
550 | 550 | | |
551 | | - | |
| 551 | + | |
552 | 552 | | |
553 | 553 | | |
554 | 554 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
181 | 182 | | |
182 | 183 | | |
183 | 184 | | |
184 | | - | |
| 185 | + | |
185 | 186 | | |
186 | 187 | | |
187 | 188 | | |
188 | 189 | | |
189 | 190 | | |
190 | 191 | | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
191 | 195 | | |
192 | 196 | | |
193 | 197 | | |
194 | 198 | | |
195 | 199 | | |
196 | | - | |
| 200 | + | |
197 | 201 | | |
198 | 202 | | |
199 | 203 | | |
200 | 204 | | |
201 | 205 | | |
202 | 206 | | |
203 | | - | |
| 207 | + | |
204 | 208 | | |
205 | 209 | | |
206 | 210 | | |
207 | 211 | | |
208 | 212 | | |
209 | 213 | | |
210 | | - | |
| 214 | + | |
211 | 215 | | |
212 | 216 | | |
213 | 217 | | |
214 | 218 | | |
215 | 219 | | |
216 | 220 | | |
217 | 221 | | |
218 | | - | |
| 222 | + | |
219 | 223 | | |
220 | 224 | | |
221 | 225 | | |
| |||
234 | 238 | | |
235 | 239 | | |
236 | 240 | | |
237 | | - | |
| 241 | + | |
238 | 242 | | |
239 | 243 | | |
240 | 244 | | |
| |||
273 | 277 | | |
274 | 278 | | |
275 | 279 | | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
276 | 284 | | |
277 | | - | |
| 285 | + | |
278 | 286 | | |
279 | 287 | | |
280 | 288 | | |
| |||
414 | 422 | | |
415 | 423 | | |
416 | 424 | | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
417 | 429 | | |
| 430 | + | |
| 431 | + | |
418 | 432 | | |
419 | 433 | | |
420 | | - | |
| 434 | + | |
421 | 435 | | |
422 | 436 | | |
423 | 437 | | |
| |||
465 | 479 | | |
466 | 480 | | |
467 | 481 | | |
468 | | - | |
| 482 | + | |
469 | 483 | | |
470 | 484 | | |
471 | 485 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
918 | 918 | | |
919 | 919 | | |
920 | 920 | | |
921 | | - | |
922 | | - | |
| 921 | + | |
| 922 | + | |
923 | 923 | | |
924 | 924 | | |
925 | 925 | | |
| |||
0 commit comments