@@ -142,26 +142,31 @@ define i32 @loadCombine_4consecutive_BE(ptr %p) {
142
142
}
143
143
144
144
define i32 @loadCombine_4consecutive_alias (ptr %p ) {
145
- ; ALL-LABEL: @loadCombine_4consecutive_alias(
146
- ; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
147
- ; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
148
- ; ALL-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
149
- ; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
150
- ; ALL-NEXT: store i8 10, ptr [[P]], align 1
151
- ; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
152
- ; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
153
- ; ALL-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
154
- ; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
155
- ; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
156
- ; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
157
- ; ALL-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
158
- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
159
- ; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
160
- ; ALL-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
161
- ; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
162
- ; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
163
- ; ALL-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]]
164
- ; ALL-NEXT: ret i32 [[O3]]
145
+ ; LE-LABEL: @loadCombine_4consecutive_alias(
146
+ ; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
147
+ ; LE-NEXT: store i8 10, ptr [[P]], align 1
148
+ ; LE-NEXT: ret i32 [[L1]]
149
+ ;
150
+ ; BE-LABEL: @loadCombine_4consecutive_alias(
151
+ ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
152
+ ; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
153
+ ; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
154
+ ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
155
+ ; BE-NEXT: store i8 10, ptr [[P]], align 1
156
+ ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
157
+ ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
158
+ ; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
159
+ ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
160
+ ; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
161
+ ; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
162
+ ; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
163
+ ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
164
+ ; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
165
+ ; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
166
+ ; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
167
+ ; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
168
+ ; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]]
169
+ ; BE-NEXT: ret i32 [[O3]]
165
170
;
166
171
%p1 = getelementptr i8 , ptr %p , i32 1
167
172
%p2 = getelementptr i8 , ptr %p , i32 2
@@ -188,26 +193,31 @@ define i32 @loadCombine_4consecutive_alias(ptr %p) {
188
193
}
189
194
190
195
define i32 @loadCombine_4consecutive_alias_BE (ptr %p ) {
191
- ; ALL-LABEL: @loadCombine_4consecutive_alias_BE(
192
- ; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
193
- ; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
194
- ; ALL-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
195
- ; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
196
- ; ALL-NEXT: store i8 10, ptr [[P]], align 1
197
- ; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
198
- ; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
199
- ; ALL-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
200
- ; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
201
- ; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
202
- ; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
203
- ; ALL-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
204
- ; ALL-NEXT: [[S1:%.*]] = shl i32 [[E1]], 24
205
- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16
206
- ; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 8
207
- ; ALL-NEXT: [[O1:%.*]] = or i32 [[S1]], [[S2]]
208
- ; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
209
- ; ALL-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E4]]
210
- ; ALL-NEXT: ret i32 [[O3]]
196
+ ; LE-LABEL: @loadCombine_4consecutive_alias_BE(
197
+ ; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
198
+ ; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
199
+ ; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
200
+ ; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
201
+ ; LE-NEXT: store i8 10, ptr [[P]], align 1
202
+ ; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
203
+ ; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
204
+ ; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
205
+ ; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
206
+ ; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
207
+ ; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
208
+ ; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
209
+ ; LE-NEXT: [[S1:%.*]] = shl i32 [[E1]], 24
210
+ ; LE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16
211
+ ; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 8
212
+ ; LE-NEXT: [[O1:%.*]] = or i32 [[S1]], [[S2]]
213
+ ; LE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
214
+ ; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E4]]
215
+ ; LE-NEXT: ret i32 [[O3]]
216
+ ;
217
+ ; BE-LABEL: @loadCombine_4consecutive_alias_BE(
218
+ ; BE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
219
+ ; BE-NEXT: store i8 10, ptr [[P]], align 1
220
+ ; BE-NEXT: ret i32 [[L1]]
211
221
;
212
222
%p1 = getelementptr i8 , ptr %p , i32 1
213
223
%p2 = getelementptr i8 , ptr %p , i32 2
@@ -1760,26 +1770,32 @@ define i16 @loadCombine_2consecutive_badinsert(ptr %p) {
1760
1770
}
1761
1771
1762
1772
define i32 @loadCombine_4consecutive_badinsert (ptr %p ) {
1763
- ; ALL-LABEL: @loadCombine_4consecutive_badinsert(
1764
- ; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1765
- ; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
1766
- ; ALL-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
1767
- ; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
1768
- ; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
1769
- ; ALL-NEXT: store i8 0, ptr [[P1]], align 1
1770
- ; ALL-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
1771
- ; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
1772
- ; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
1773
- ; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
1774
- ; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
1775
- ; ALL-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
1776
- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
1777
- ; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
1778
- ; ALL-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
1779
- ; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1780
- ; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
1781
- ; ALL-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]]
1782
- ; ALL-NEXT: ret i32 [[O3]]
1773
+ ; LE-LABEL: @loadCombine_4consecutive_badinsert(
1774
+ ; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1775
+ ; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P]], align 1
1776
+ ; LE-NEXT: store i8 0, ptr [[P1]], align 1
1777
+ ; LE-NEXT: ret i32 [[L1]]
1778
+ ;
1779
+ ; BE-LABEL: @loadCombine_4consecutive_badinsert(
1780
+ ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1781
+ ; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
1782
+ ; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
1783
+ ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
1784
+ ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
1785
+ ; BE-NEXT: store i8 0, ptr [[P1]], align 1
1786
+ ; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
1787
+ ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
1788
+ ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
1789
+ ; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
1790
+ ; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
1791
+ ; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
1792
+ ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
1793
+ ; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
1794
+ ; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
1795
+ ; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1796
+ ; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
1797
+ ; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]]
1798
+ ; BE-NEXT: ret i32 [[O3]]
1783
1799
;
1784
1800
%p1 = getelementptr i8 , ptr %p , i32 1
1785
1801
%p2 = getelementptr i8 , ptr %p , i32 2
0 commit comments