Commit 9650510
authored
inference: model partially initialized structs with
There is still room for improvement in the accuracy of `getfield` and
`isdefined` for structs with uninitialized fields. This commit aims to
enhance the accuracy of struct field defined-ness by propagating such
struct as `PartialStruct` in cases where fields that might be
uninitialized are confirmed to be defined. Specifically, the
improvements are made in the following situations:
1. when a `:new` expression receives arguments greater than the minimum
number of initialized fields.
2. when new information about the initialized fields of `x` can be
obtained in the `then` branch of `if isdefined(x, :f)`.
Combined with the existing optimizations, these improvements enable DCE
in scenarios such as:
```julia
julia> @noinline broadcast_noescape1(a) = (broadcast(identity, a); nothing);
julia> @allocated broadcast_noescape1(Ref("x"))
16 # master
0 # this PR
```
One important point to note is that, as revealed in
#48999, fields and globals can revert to `undef` during
precompilation. This commit does not affect globals. Furthermore, even
for fields, the refinements made by 1. and 2. are propagated along with
data-flow, and field defined-ness information is only used when fields
are confirmed to be initialized. Therefore, the same issues as
#48999 will not occur by this commit.PartialStruct (#55297)1 parent d4bd540 commit 9650510
File tree
8 files changed
+393
-126
lines changed- base/compiler
- ssair
- test
- compiler
- EscapeAnalysis
8 files changed
+393
-126
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2006 | 2006 | | |
2007 | 2007 | | |
2008 | 2008 | | |
2009 | | - | |
2010 | 2009 | | |
2011 | | - | |
2012 | | - | |
2013 | | - | |
2014 | | - | |
2015 | | - | |
2016 | | - | |
2017 | | - | |
2018 | | - | |
2019 | | - | |
| 2010 | + | |
| 2011 | + | |
| 2012 | + | |
| 2013 | + | |
| 2014 | + | |
| 2015 | + | |
| 2016 | + | |
| 2017 | + | |
| 2018 | + | |
| 2019 | + | |
| 2020 | + | |
| 2021 | + | |
| 2022 | + | |
| 2023 | + | |
2020 | 2024 | | |
| 2025 | + | |
2021 | 2026 | | |
2022 | 2027 | | |
2023 | | - | |
2024 | | - | |
2025 | | - | |
| 2028 | + | |
| 2029 | + | |
| 2030 | + | |
| 2031 | + | |
| 2032 | + | |
| 2033 | + | |
| 2034 | + | |
| 2035 | + | |
| 2036 | + | |
| 2037 | + | |
| 2038 | + | |
| 2039 | + | |
2026 | 2040 | | |
2027 | 2041 | | |
2028 | | - | |
2029 | 2042 | | |
2030 | 2043 | | |
2031 | 2044 | | |
2032 | 2045 | | |
2033 | 2046 | | |
2034 | 2047 | | |
2035 | 2048 | | |
| 2049 | + | |
| 2050 | + | |
| 2051 | + | |
| 2052 | + | |
| 2053 | + | |
| 2054 | + | |
| 2055 | + | |
| 2056 | + | |
| 2057 | + | |
| 2058 | + | |
| 2059 | + | |
| 2060 | + | |
| 2061 | + | |
| 2062 | + | |
| 2063 | + | |
| 2064 | + | |
| 2065 | + | |
| 2066 | + | |
2036 | 2067 | | |
2037 | 2068 | | |
2038 | 2069 | | |
| |||
2573 | 2604 | | |
2574 | 2605 | | |
2575 | 2606 | | |
2576 | | - | |
2577 | | - | |
2578 | | - | |
2579 | | - | |
2580 | | - | |
2581 | | - | |
2582 | | - | |
2583 | | - | |
2584 | | - | |
2585 | | - | |
2586 | | - | |
2587 | | - | |
2588 | | - | |
| 2607 | + | |
| 2608 | + | |
| 2609 | + | |
| 2610 | + | |
2589 | 2611 | | |
| 2612 | + | |
| 2613 | + | |
| 2614 | + | |
| 2615 | + | |
| 2616 | + | |
| 2617 | + | |
| 2618 | + | |
2590 | 2619 | | |
2591 | 2620 | | |
2592 | 2621 | | |
| |||
3094 | 3123 | | |
3095 | 3124 | | |
3096 | 3125 | | |
3097 | | - | |
| 3126 | + | |
| 3127 | + | |
3098 | 3128 | | |
3099 | 3129 | | |
3100 | 3130 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1166 | 1166 | | |
1167 | 1167 | | |
1168 | 1168 | | |
1169 | | - | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
1170 | 1175 | | |
1171 | 1176 | | |
1172 | 1177 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
419 | 419 | | |
420 | 420 | | |
421 | 421 | | |
422 | | - | |
| 422 | + | |
423 | 423 | | |
424 | 424 | | |
425 | 425 | | |
426 | 426 | | |
427 | 427 | | |
428 | 428 | | |
429 | 429 | | |
430 | | - | |
| 430 | + | |
431 | 431 | | |
432 | 432 | | |
433 | | - | |
| 433 | + | |
434 | 434 | | |
435 | 435 | | |
436 | 436 | | |
437 | 437 | | |
438 | 438 | | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
439 | 445 | | |
440 | 446 | | |
441 | 447 | | |
| |||
989 | 995 | | |
990 | 996 | | |
991 | 997 | | |
992 | | - | |
993 | | - | |
994 | | - | |
995 | | - | |
| 998 | + | |
| 999 | + | |
996 | 1000 | | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
997 | 1013 | | |
998 | 1014 | | |
999 | 1015 | | |
1000 | 1016 | | |
1001 | | - | |
| 1017 | + | |
1002 | 1018 | | |
1003 | 1019 | | |
1004 | 1020 | | |
1005 | 1021 | | |
1006 | | - | |
| 1022 | + | |
1007 | 1023 | | |
1008 | 1024 | | |
1009 | | - | |
| 1025 | + | |
| 1026 | + | |
1010 | 1027 | | |
1011 | | - | |
1012 | | - | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
1013 | 1031 | | |
1014 | 1032 | | |
1015 | 1033 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
| 9 | + | |
19 | 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 | + | |
20 | 45 | | |
21 | 46 | | |
22 | 47 | | |
| |||
57 | 82 | | |
58 | 83 | | |
59 | 84 | | |
| 85 | + | |
60 | 86 | | |
61 | | - | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
62 | 92 | | |
63 | 93 | | |
64 | 94 | | |
65 | 95 | | |
66 | 96 | | |
67 | 97 | | |
68 | 98 | | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | 99 | | |
78 | 100 | | |
79 | 101 | | |
| |||
447 | 469 | | |
448 | 470 | | |
449 | 471 | | |
450 | | - | |
451 | | - | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
452 | 479 | | |
453 | 480 | | |
454 | 481 | | |
| |||
471 | 498 | | |
472 | 499 | | |
473 | 500 | | |
474 | | - | |
475 | | - | |
476 | 501 | | |
477 | 502 | | |
478 | 503 | | |
479 | 504 | | |
480 | | - | |
481 | | - | |
482 | | - | |
483 | | - | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
484 | 515 | | |
| 516 | + | |
485 | 517 | | |
486 | 518 | | |
| 519 | + | |
487 | 520 | | |
488 | 521 | | |
489 | 522 | | |
| |||
0 commit comments