Commit 668be20
committed
[5.3] IRGen: Store scalars as bytes to avoid undefined bits
Don't tempt llvm to misbehave on partially initialized bytes -- it will.
Explanation: Before this patch we would store integer types of non
integral byte widths (e.g i1) with llvm store instructions of the same type. The
semantics of a load of a differently sized store for such non-integral
sized byte widths is undefined in LLVM. And indeed LLVM ends up misoptimizing
code involving a combination of a full byte store and a partial bit store,
such as the attached test case.
Scope: This changes how we store non integral byte sized integer values.
Risk: Low, instead of storing an i1 we store a i8 which in hardware is
the same byte store.
Testing: Regression test added
Reviewed by: Joe Groff
rdar://674083021 parent ed51731 commit 668be20
File tree
6 files changed
+134
-32
lines changed- lib/IRGen
- test
- IRGen
- Interpreter
6 files changed
+134
-32
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
120 | 142 | | |
121 | 143 | | |
122 | 144 | | |
123 | | - | |
| 145 | + | |
| 146 | + | |
124 | 147 | | |
125 | 148 | | |
126 | 149 | | |
| |||
149 | 172 | | |
150 | 173 | | |
151 | 174 | | |
152 | | - | |
153 | | - | |
| 175 | + | |
154 | 176 | | |
155 | 177 | | |
156 | 178 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
580 | 580 | | |
581 | 581 | | |
582 | 582 | | |
583 | | - | |
| 583 | + | |
| 584 | + | |
584 | 585 | | |
585 | 586 | | |
586 | 587 | | |
| |||
590 | 591 | | |
591 | 592 | | |
592 | 593 | | |
593 | | - | |
| 594 | + | |
| 595 | + | |
594 | 596 | | |
595 | 597 | | |
596 | 598 | | |
| |||
599 | 601 | | |
600 | 602 | | |
601 | 603 | | |
602 | | - | |
| 604 | + | |
| 605 | + | |
603 | 606 | | |
604 | 607 | | |
605 | 608 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
235 | 235 | | |
236 | 236 | | |
237 | 237 | | |
238 | | - | |
| 238 | + | |
| 239 | + | |
239 | 240 | | |
240 | 241 | | |
241 | 242 | | |
242 | 243 | | |
243 | 244 | | |
244 | 245 | | |
245 | | - | |
| 246 | + | |
| 247 | + | |
246 | 248 | | |
247 | 249 | | |
248 | 250 | | |
249 | 251 | | |
250 | 252 | | |
251 | 253 | | |
252 | | - | |
| 254 | + | |
| 255 | + | |
253 | 256 | | |
254 | 257 | | |
255 | 258 | | |
256 | 259 | | |
257 | 260 | | |
258 | 261 | | |
259 | 262 | | |
260 | | - | |
| 263 | + | |
| 264 | + | |
261 | 265 | | |
262 | 266 | | |
263 | 267 | | |
264 | 268 | | |
265 | 269 | | |
266 | 270 | | |
267 | 271 | | |
268 | | - | |
| 272 | + | |
| 273 | + | |
269 | 274 | | |
270 | 275 | | |
271 | 276 | | |
| |||
558 | 563 | | |
559 | 564 | | |
560 | 565 | | |
561 | | - | |
| 566 | + | |
| 567 | + | |
562 | 568 | | |
563 | 569 | | |
564 | 570 | | |
| |||
575 | 581 | | |
576 | 582 | | |
577 | 583 | | |
578 | | - | |
| 584 | + | |
| 585 | + | |
579 | 586 | | |
580 | 587 | | |
581 | 588 | | |
| |||
695 | 702 | | |
696 | 703 | | |
697 | 704 | | |
698 | | - | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
699 | 708 | | |
700 | 709 | | |
701 | 710 | | |
702 | 711 | | |
703 | 712 | | |
704 | | - | |
705 | | - | |
| 713 | + | |
| 714 | + | |
706 | 715 | | |
707 | 716 | | |
708 | 717 | | |
| |||
713 | 722 | | |
714 | 723 | | |
715 | 724 | | |
716 | | - | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
717 | 728 | | |
718 | 729 | | |
719 | 730 | | |
720 | 731 | | |
721 | 732 | | |
722 | | - | |
723 | | - | |
724 | | - | |
725 | | - | |
726 | | - | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
727 | 738 | | |
728 | 739 | | |
729 | 740 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1010 | 1010 | | |
1011 | 1011 | | |
1012 | 1012 | | |
1013 | | - | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
1014 | 1016 | | |
1015 | 1017 | | |
1016 | 1018 | | |
| |||
1784 | 1786 | | |
1785 | 1787 | | |
1786 | 1788 | | |
1787 | | - | |
| 1789 | + | |
| 1790 | + | |
| 1791 | + | |
1788 | 1792 | | |
1789 | 1793 | | |
1790 | 1794 | | |
| |||
1825 | 1829 | | |
1826 | 1830 | | |
1827 | 1831 | | |
1828 | | - | |
| 1832 | + | |
| 1833 | + | |
| 1834 | + | |
1829 | 1835 | | |
1830 | 1836 | | |
1831 | 1837 | | |
| |||
2024 | 2030 | | |
2025 | 2031 | | |
2026 | 2032 | | |
2027 | | - | |
| 2033 | + | |
| 2034 | + | |
| 2035 | + | |
2028 | 2036 | | |
2029 | 2037 | | |
2030 | 2038 | | |
| |||
2060 | 2068 | | |
2061 | 2069 | | |
2062 | 2070 | | |
2063 | | - | |
| 2071 | + | |
| 2072 | + | |
| 2073 | + | |
2064 | 2074 | | |
2065 | 2075 | | |
2066 | 2076 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1014 | 1014 | | |
1015 | 1015 | | |
1016 | 1016 | | |
1017 | | - | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
1018 | 1020 | | |
1019 | 1021 | | |
1020 | 1022 | | |
| |||
1788 | 1790 | | |
1789 | 1791 | | |
1790 | 1792 | | |
1791 | | - | |
| 1793 | + | |
| 1794 | + | |
| 1795 | + | |
1792 | 1796 | | |
1793 | 1797 | | |
1794 | 1798 | | |
| |||
1829 | 1833 | | |
1830 | 1834 | | |
1831 | 1835 | | |
1832 | | - | |
| 1836 | + | |
| 1837 | + | |
| 1838 | + | |
1833 | 1839 | | |
1834 | 1840 | | |
1835 | 1841 | | |
| |||
2028 | 2034 | | |
2029 | 2035 | | |
2030 | 2036 | | |
2031 | | - | |
| 2037 | + | |
| 2038 | + | |
| 2039 | + | |
2032 | 2040 | | |
2033 | 2041 | | |
2034 | 2042 | | |
| |||
2064 | 2072 | | |
2065 | 2073 | | |
2066 | 2074 | | |
2067 | | - | |
| 2075 | + | |
| 2076 | + | |
| 2077 | + | |
2068 | 2078 | | |
2069 | 2079 | | |
2070 | 2080 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
698 | 698 | | |
699 | 699 | | |
700 | 700 | | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
0 commit comments