Commit d39f38e
committed
Statically-known existence conditions: drop or simplify the check
Many Emboss schemas have fields whose existence_condition the front
end has already constant-folded to a boolean literal:
* \`if false:\` fields are never present, so Ok() needs no check
for them at all. PR 241 still emitted the full has_X() guard +
Ok() check; both branches are dead.
* Unconditional fields (and \`if true:\` fields) carry a literal
\`true\` existence. has_X() is always Known and always true, so
the standard ok_method_test pattern
if (!has_x().Known()) return false;
if (has_x().ValueOrDefault() && !x().Ok()) return false;
collapses to a bare
if (!x().Ok()) return false;
A fast pre-pass in _generate_optimized_ok_method_body recognizes
both shapes (existence_condition.type.boolean has a literal value)
and routes them to the short emit paths. \`if false:\` fields are
skipped; the always-true case emits the bare Ok() check.
Wide golden churn: most structs have several unconditional fields
(virtual size fields like IntrinsicSizeInBytes/Max/Min plus any
non-conditional payload), so most Ok() methods shrink by several
lines apiece.
The docstring on _generate_optimized_ok_method_body is rewritten to
describe the four emit paths the function now routes fields through
(skipped / unconditional / switch arm / ok_method_test) — the
original PR 241 docstring referenced only two paths and a duplicate-
case fallthrough that no longer exists.1 parent d3c6e13 commit d39f38e
32 files changed
Lines changed: 981 additions & 2624 deletions
File tree
- compiler/back_end/cpp
- testdata/golden_cpp
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1557 | 1557 | | |
1558 | 1558 | | |
1559 | 1559 | | |
1560 | | - | |
1561 | | - | |
1562 | | - | |
1563 | | - | |
1564 | | - | |
1565 | | - | |
1566 | | - | |
1567 | | - | |
1568 | | - | |
1569 | | - | |
1570 | | - | |
1571 | | - | |
1572 | | - | |
1573 | | - | |
1574 | | - | |
1575 | | - | |
1576 | | - | |
1577 | | - | |
1578 | | - | |
1579 | | - | |
1580 | | - | |
1581 | | - | |
1582 | | - | |
1583 | | - | |
1584 | | - | |
1585 | | - | |
1586 | | - | |
1587 | | - | |
1588 | | - | |
1589 | | - | |
1590 | | - | |
1591 | | - | |
1592 | | - | |
1593 | | - | |
1594 | | - | |
1595 | | - | |
1596 | | - | |
1597 | | - | |
1598 | | - | |
1599 | | - | |
1600 | | - | |
1601 | | - | |
1602 | | - | |
1603 | | - | |
1604 | | - | |
1605 | | - | |
1606 | | - | |
1607 | | - | |
1608 | | - | |
1609 | | - | |
1610 | | - | |
1611 | | - | |
1612 | | - | |
1613 | | - | |
| 1560 | + | |
| 1561 | + | |
| 1562 | + | |
| 1563 | + | |
| 1564 | + | |
| 1565 | + | |
| 1566 | + | |
| 1567 | + | |
| 1568 | + | |
| 1569 | + | |
| 1570 | + | |
| 1571 | + | |
| 1572 | + | |
| 1573 | + | |
| 1574 | + | |
| 1575 | + | |
| 1576 | + | |
| 1577 | + | |
| 1578 | + | |
| 1579 | + | |
| 1580 | + | |
| 1581 | + | |
| 1582 | + | |
| 1583 | + | |
| 1584 | + | |
| 1585 | + | |
| 1586 | + | |
| 1587 | + | |
| 1588 | + | |
| 1589 | + | |
1614 | 1590 | | |
1615 | 1591 | | |
1616 | 1592 | | |
1617 | 1593 | | |
1618 | | - | |
| 1594 | + | |
| 1595 | + | |
| 1596 | + | |
| 1597 | + | |
| 1598 | + | |
| 1599 | + | |
| 1600 | + | |
| 1601 | + | |
| 1602 | + | |
1619 | 1603 | | |
1620 | 1604 | | |
1621 | | - | |
| 1605 | + | |
| 1606 | + | |
1622 | 1607 | | |
1623 | 1608 | | |
1624 | 1609 | | |
| |||
1630 | 1615 | | |
1631 | 1616 | | |
1632 | 1617 | | |
| 1618 | + | |
| 1619 | + | |
| 1620 | + | |
| 1621 | + | |
| 1622 | + | |
| 1623 | + | |
| 1624 | + | |
| 1625 | + | |
| 1626 | + | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
| 1634 | + | |
| 1635 | + | |
| 1636 | + | |
| 1637 | + | |
| 1638 | + | |
| 1639 | + | |
1633 | 1640 | | |
1634 | 1641 | | |
1635 | 1642 | | |
| |||
1736 | 1743 | | |
1737 | 1744 | | |
1738 | 1745 | | |
| 1746 | + | |
| 1747 | + | |
| 1748 | + | |
| 1749 | + | |
| 1750 | + | |
| 1751 | + | |
| 1752 | + | |
1739 | 1753 | | |
1740 | 1754 | | |
1741 | 1755 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
79 | | - | |
| 78 | + | |
80 | 79 | | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
| 80 | + | |
85 | 81 | | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
| 82 | + | |
90 | 83 | | |
91 | | - | |
92 | | - | |
93 | | - | |
| 84 | + | |
94 | 85 | | |
95 | | - | |
96 | | - | |
| 86 | + | |
97 | 87 | | |
98 | | - | |
99 | | - | |
100 | | - | |
| 88 | + | |
101 | 89 | | |
102 | | - | |
103 | | - | |
104 | | - | |
| 90 | + | |
105 | 91 | | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
| 92 | + | |
110 | 93 | | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
| 94 | + | |
115 | 95 | | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
| 96 | + | |
120 | 97 | | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
| 98 | + | |
125 | 99 | | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
| 100 | + | |
130 | 101 | | |
131 | | - | |
132 | | - | |
133 | | - | |
| 102 | + | |
134 | 103 | | |
135 | | - | |
136 | | - | |
137 | | - | |
| 104 | + | |
138 | 105 | | |
139 | 106 | | |
140 | 107 | | |
| |||
1335 | 1302 | | |
1336 | 1303 | | |
1337 | 1304 | | |
1338 | | - | |
1339 | | - | |
| 1305 | + | |
1340 | 1306 | | |
1341 | | - | |
1342 | | - | |
1343 | | - | |
1344 | | - | |
| 1307 | + | |
1345 | 1308 | | |
1346 | | - | |
1347 | | - | |
1348 | | - | |
| 1309 | + | |
1349 | 1310 | | |
1350 | | - | |
1351 | | - | |
1352 | | - | |
| 1311 | + | |
1353 | 1312 | | |
1354 | 1313 | | |
1355 | 1314 | | |
| |||
1738 | 1697 | | |
1739 | 1698 | | |
1740 | 1699 | | |
1741 | | - | |
1742 | | - | |
| 1700 | + | |
1743 | 1701 | | |
1744 | | - | |
1745 | | - | |
| 1702 | + | |
1746 | 1703 | | |
1747 | | - | |
1748 | | - | |
1749 | | - | |
1750 | | - | |
| 1704 | + | |
1751 | 1705 | | |
1752 | | - | |
1753 | | - | |
1754 | | - | |
| 1706 | + | |
1755 | 1707 | | |
1756 | | - | |
1757 | | - | |
1758 | | - | |
| 1708 | + | |
1759 | 1709 | | |
1760 | 1710 | | |
1761 | 1711 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
95 | | - | |
| 94 | + | |
96 | 95 | | |
97 | | - | |
98 | | - | |
| 96 | + | |
99 | 97 | | |
100 | | - | |
101 | | - | |
| 98 | + | |
102 | 99 | | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
| 100 | + | |
107 | 101 | | |
108 | | - | |
109 | | - | |
110 | | - | |
| 102 | + | |
111 | 103 | | |
112 | | - | |
113 | | - | |
114 | | - | |
| 104 | + | |
115 | 105 | | |
116 | 106 | | |
117 | 107 | | |
| |||
739 | 729 | | |
740 | 730 | | |
741 | 731 | | |
742 | | - | |
743 | | - | |
| 732 | + | |
744 | 733 | | |
745 | | - | |
746 | | - | |
| 734 | + | |
747 | 735 | | |
748 | | - | |
749 | | - | |
750 | | - | |
751 | | - | |
| 736 | + | |
752 | 737 | | |
753 | | - | |
754 | | - | |
755 | | - | |
| 738 | + | |
756 | 739 | | |
757 | | - | |
758 | | - | |
759 | | - | |
| 740 | + | |
760 | 741 | | |
761 | 742 | | |
762 | 743 | | |
| |||
1216 | 1197 | | |
1217 | 1198 | | |
1218 | 1199 | | |
1219 | | - | |
1220 | | - | |
1221 | | - | |
1222 | | - | |
| 1200 | + | |
1223 | 1201 | | |
1224 | | - | |
1225 | | - | |
1226 | | - | |
1227 | | - | |
| 1202 | + | |
1228 | 1203 | | |
1229 | | - | |
1230 | | - | |
1231 | | - | |
1232 | | - | |
| 1204 | + | |
1233 | 1205 | | |
1234 | | - | |
1235 | | - | |
1236 | | - | |
| 1206 | + | |
1237 | 1207 | | |
1238 | | - | |
1239 | | - | |
1240 | | - | |
| 1208 | + | |
1241 | 1209 | | |
1242 | 1210 | | |
1243 | 1211 | | |
| |||
0 commit comments