-
Notifications
You must be signed in to change notification settings - Fork 13.7k
Commit c0bb3b9
Auto merge of #143290 - azhogin:azhogin/link-pub-async-impls, r=oli-obk
pub async fn impl is monomorphized when func itself is monomorphized
Implentation coroutine (`func::{closure#0}`) is monomorphized, when func itself is monomorphized.
Currently, when `pub async fn foo(..)` is exported from lib and used in several dependent crates, only 'header' function is monomorphized in the defining crate. 'header' function, returning coroutine object, is monomorphized, but the coroutine's poll function (which actually implements all the logic for the function) is not. In such situation, `func::{closure#0}` will be monomorphized in every dependency.
This PR adds monomorphization for `func::{closure#0}` (coroutine poll function), when func itself is monomorphized.
Simple test with one lib async function and ten dependent crates (executable) that use the function, shows 5-7% compilation time improvement (single-threaded).File tree
13 files changed
+245
-15
lines changed- compiler/rustc_monomorphize/src
- tests
- codegen-llvm
- codegen-units/item-collection
- coverage
- ui
- async-await/future-sizes
- print_type_sizes
13 files changed
+245
-15
lines changedLines changed: 14 additions & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1535 | 1535 |
| |
1536 | 1536 |
| |
1537 | 1537 |
| |
1538 | - | ||
1538 | + | ||
1539 | + | ||
1540 | + | ||
1541 | + | ||
1542 | + | ||
1543 | + | ||
1544 | + | ||
1545 | + | ||
1546 | + | ||
1547 | + | ||
1548 | + | ||
1549 | + | ||
1550 | + | ||
1551 | + | ||
1539 | 1552 |
| |
1540 | 1553 |
| |
1541 | 1554 |
| |
|
Lines changed: 4 additions & 4 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
18 | 18 |
| |
19 | 19 |
| |
20 | 20 |
| |
21 | + | ||
22 | + | ||
23 | + | ||
21 | 24 |
| |
22 | 25 |
| |
23 | 26 |
| |
24 | 27 |
| |
25 | - | ||
26 | - | ||
27 | - | ||
28 | - | ||
28 | + |
Lines changed: 10 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1 | + | ||
2 | + | ||
3 | + | ||
4 | + | ||
5 | + | ||
6 | + | ||
7 | + | ||
8 | + | ||
9 | + | ||
10 | + |
Lines changed: 89 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1 | + | ||
2 | + | ||
3 | + | ||
4 | + | ||
5 | + | ||
6 | + | ||
7 | + | ||
8 | + | ||
9 | + | ||
10 | + | ||
11 | + | ||
12 | + | ||
13 | + | ||
14 | + | ||
15 | + | ||
16 | + | ||
17 | + | ||
18 | + | ||
19 | + | ||
20 | + | ||
21 | + | ||
22 | + | ||
23 | + | ||
24 | + | ||
25 | + | ||
26 | + | ||
27 | + | ||
28 | + | ||
29 | + | ||
30 | + | ||
31 | + | ||
32 | + | ||
33 | + | ||
34 | + | ||
35 | + | ||
36 | + | ||
37 | + | ||
38 | + | ||
39 | + | ||
40 | + | ||
41 | + | ||
42 | + | ||
43 | + | ||
44 | + | ||
45 | + | ||
46 | + | ||
47 | + | ||
48 | + | ||
49 | + | ||
50 | + | ||
51 | + | ||
52 | + | ||
53 | + | ||
54 | + | ||
55 | + | ||
56 | + | ||
57 | + | ||
58 | + | ||
59 | + | ||
60 | + | ||
61 | + | ||
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | ||
66 | + | ||
67 | + | ||
68 | + | ||
69 | + | ||
70 | + | ||
71 | + | ||
72 | + | ||
73 | + | ||
74 | + | ||
75 | + | ||
76 | + | ||
77 | + | ||
78 | + | ||
79 | + | ||
80 | + | ||
81 | + | ||
82 | + | ||
83 | + | ||
84 | + | ||
85 | + | ||
86 | + | ||
87 | + | ||
88 | + | ||
89 | + |
Lines changed: 4 additions & 4 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
103 | 103 |
| |
104 | 104 |
| |
105 | 105 |
| |
106 | - | ||
106 | + | ||
107 | 107 |
| |
108 | 108 |
| |
109 | 109 |
| |
110 | 110 |
| |
111 | - | ||
111 | + | ||
112 | 112 |
| |
113 | 113 |
| |
114 | 114 |
| |
115 | - | ||
115 | + | ||
116 | 116 |
| |
117 | 117 |
| |
118 | 118 |
| |
119 | 119 |
| |
120 | - | ||
120 | + | ||
121 | 121 |
| |
122 | 122 |
| |
123 | 123 |
| |
|
Lines changed: 2 additions & 2 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
24 | 24 |
| |
25 | 25 |
| |
26 | 26 |
| |
27 | - | ||
28 | - | ||
27 | + | ||
28 | + | ||
29 | 29 |
| |
30 | 30 |
| |
31 | 31 |
| |
|
Lines changed: 1 addition & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
24 | 24 |
| |
25 | 25 |
| |
26 | 26 |
| |
27 | - | ||
27 | + | ||
28 | 28 |
| |
29 | 29 |
| |
30 | 30 |
| |
|
Lines changed: 3 additions & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1 | - | ||
1 | + | ||
2 | + | ||
2 | 3 |
| |
3 | 4 |
| |
4 | 5 |
| |
6 | + | ||
5 | 7 |
| |
6 | 8 |
| |
7 | 9 |
| |
|
Lines changed: 37 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
48 | 48 |
| |
49 | 49 |
| |
50 | 50 |
| |
51 | + | ||
52 | + | ||
53 | + | ||
54 | + | ||
55 | + | ||
56 | + | ||
57 | + | ||
58 | + | ||
59 | + | ||
60 | + | ||
61 | + | ||
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | ||
66 | + | ||
67 | + | ||
68 | + | ||
69 | + | ||
70 | + | ||
71 | + | ||
72 | + | ||
73 | + | ||
74 | + | ||
75 | + | ||
76 | + | ||
77 | + | ||
78 | + | ||
79 | + | ||
80 | + | ||
81 | + | ||
82 | + | ||
83 | + | ||
51 | 84 |
| |
52 | 85 |
| |
53 | 86 |
| |
| |||
70 | 103 |
| |
71 | 104 |
| |
72 | 105 |
| |
106 | + | ||
107 | + | ||
108 | + | ||
109 | + |
Lines changed: 3 additions & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1 | - | ||
1 | + | ||
2 | + | ||
2 | 3 |
| |
3 | 4 |
| |
4 | 5 |
| |
6 | + | ||
5 | 7 |
| |
6 | 8 |
| |
7 | 9 |
| |
|
0 commit comments