xref: /llvm-project/llvm/test/Transforms/AggressiveInstCombine/X86/or-load.ll (revision f68b0e36997322eeda8fd199ea80deb1b49c5410)
1dd48c0beSbipmis; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
23b49a9fcSbipmis; RUN: opt < %s -passes=aggressive-instcombine -mtriple x86_64-none-eabi -mattr=avx2 -data-layout="e-n64" -S | FileCheck %s --check-prefixes=ALL,LE
33b49a9fcSbipmis; RUN: opt < %s -passes=aggressive-instcombine -mtriple x86_64-none-eabi -mattr=avx2 -data-layout="E-n64" -S | FileCheck %s --check-prefixes=ALL,BE
4dd48c0beSbipmis
5dd48c0beSbipmisdefine i16 @loadCombine_2consecutive(ptr %p) {
6dd48c0beSbipmis;
73b49a9fcSbipmis; LE-LABEL: @loadCombine_2consecutive(
83b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P:%.*]], align 1
93b49a9fcSbipmis; LE-NEXT:    ret i16 [[L1]]
103b49a9fcSbipmis;
113b49a9fcSbipmis; BE-LABEL: @loadCombine_2consecutive(
123b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
133b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
143b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
153b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i16
163b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i16
173b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i16 [[E2]], 8
183b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i16 [[E1]], [[S2]]
193b49a9fcSbipmis; BE-NEXT:    ret i16 [[O1]]
20dd48c0beSbipmis;
21dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
22dd48c0beSbipmis  %l1 = load i8, ptr %p
23dd48c0beSbipmis  %l2 = load i8, ptr %p1
24dd48c0beSbipmis  %e1 = zext i8 %l1 to i16
25dd48c0beSbipmis  %e2 = zext i8 %l2 to i16
26dd48c0beSbipmis  %s2 = shl i16 %e2, 8
27dd48c0beSbipmis  %o1 = or i16 %e1, %s2
28dd48c0beSbipmis  ret i16 %o1
29dd48c0beSbipmis}
30dd48c0beSbipmis
31dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_BE(ptr %p) {
323b49a9fcSbipmis; LE-LABEL: @loadCombine_2consecutive_BE(
333b49a9fcSbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
343b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
353b49a9fcSbipmis; LE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
363b49a9fcSbipmis; LE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i16
373b49a9fcSbipmis; LE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i16
383b49a9fcSbipmis; LE-NEXT:    [[S1:%.*]] = shl i16 [[E1]], 8
393b49a9fcSbipmis; LE-NEXT:    [[O1:%.*]] = or i16 [[S1]], [[E2]]
403b49a9fcSbipmis; LE-NEXT:    ret i16 [[O1]]
413b49a9fcSbipmis;
423b49a9fcSbipmis; BE-LABEL: @loadCombine_2consecutive_BE(
433b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i16, ptr [[P:%.*]], align 1
443b49a9fcSbipmis; BE-NEXT:    ret i16 [[L1]]
45dd48c0beSbipmis;
46dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
47dd48c0beSbipmis  %l1 = load i8, ptr %p
48dd48c0beSbipmis  %l2 = load i8, ptr %p1
49dd48c0beSbipmis  %e1 = zext i8 %l1 to i16
50dd48c0beSbipmis  %e2 = zext i8 %l2 to i16
51dd48c0beSbipmis  %s1 = shl i16 %e1, 8
52dd48c0beSbipmis  %o1 = or i16 %s1, %e2
53dd48c0beSbipmis  ret i16 %o1
54dd48c0beSbipmis}
55dd48c0beSbipmis
56dd48c0beSbipmisdefine i32 @loadCombine_4consecutive(ptr %p) {
573b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive(
583b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
593b49a9fcSbipmis; LE-NEXT:    ret i32 [[L1]]
603b49a9fcSbipmis;
613b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive(
623b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
633b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
643b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
653b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
663b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
673b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
683b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
693b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
703b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
713b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
723b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
733b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
743b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
753b49a9fcSbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
763b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
773b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
783b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
793b49a9fcSbipmis; BE-NEXT:    ret i32 [[O3]]
80dd48c0beSbipmis;
81dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
82dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
83dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
84dd48c0beSbipmis  %l1 = load i8, ptr %p
85dd48c0beSbipmis  %l2 = load i8, ptr %p1
86dd48c0beSbipmis  %l3 = load i8, ptr %p2
87dd48c0beSbipmis  %l4 = load i8, ptr %p3
88dd48c0beSbipmis
89dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
90dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
91dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
92dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
93dd48c0beSbipmis
94dd48c0beSbipmis  %s2 = shl i32 %e2, 8
95dd48c0beSbipmis  %s3 = shl i32 %e3, 16
96dd48c0beSbipmis  %s4 = shl i32 %e4, 24
97dd48c0beSbipmis
98dd48c0beSbipmis  %o1 = or i32 %e1, %s2
99dd48c0beSbipmis  %o2 = or i32 %o1, %s3
100dd48c0beSbipmis  %o3 = or i32 %o2, %s4
101dd48c0beSbipmis  ret i32 %o3
102dd48c0beSbipmis}
103dd48c0beSbipmis
104dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_BE(ptr %p) {
1053b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_BE(
1063b49a9fcSbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1073b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
1083b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
1093b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
1103b49a9fcSbipmis; LE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
1113b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
1123b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
1133b49a9fcSbipmis; LE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
1143b49a9fcSbipmis; LE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
1153b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
1163b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
1173b49a9fcSbipmis; LE-NEXT:    [[S1:%.*]] = shl i32 [[E1]], 24
1183b49a9fcSbipmis; LE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 16
1193b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 8
1203b49a9fcSbipmis; LE-NEXT:    [[O1:%.*]] = or i32 [[S1]], [[S2]]
1213b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
1223b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E4]]
1233b49a9fcSbipmis; LE-NEXT:    ret i32 [[O3]]
1243b49a9fcSbipmis;
1253b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_BE(
1263b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
1273b49a9fcSbipmis; BE-NEXT:    ret i32 [[L1]]
128dd48c0beSbipmis;
129dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
130dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
131dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
132dd48c0beSbipmis  %l1 = load i8, ptr %p
133dd48c0beSbipmis  %l2 = load i8, ptr %p1
134dd48c0beSbipmis  %l3 = load i8, ptr %p2
135dd48c0beSbipmis  %l4 = load i8, ptr %p3
136dd48c0beSbipmis
137dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
138dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
139dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
140dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
141dd48c0beSbipmis
142dd48c0beSbipmis  %s1 = shl i32 %e1, 24
143dd48c0beSbipmis  %s2 = shl i32 %e2, 16
144dd48c0beSbipmis  %s3 = shl i32 %e3, 8
145dd48c0beSbipmis
146dd48c0beSbipmis  %o1 = or i32 %s1, %s2
147dd48c0beSbipmis  %o2 = or i32 %o1, %s3
148dd48c0beSbipmis  %o3 = or i32 %o2, %e4
149dd48c0beSbipmis  ret i32 %o3
150dd48c0beSbipmis}
151dd48c0beSbipmis
152dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias(ptr %p) {
153e9393789Sbipmis; LE-LABEL: @loadCombine_4consecutive_alias(
154e9393789Sbipmis; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
155e9393789Sbipmis; LE-NEXT:    store i8 10, ptr [[P]], align 1
156e9393789Sbipmis; LE-NEXT:    ret i32 [[L1]]
157e9393789Sbipmis;
158e9393789Sbipmis; BE-LABEL: @loadCombine_4consecutive_alias(
159e9393789Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
160e9393789Sbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
161e9393789Sbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
162e9393789Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
163e9393789Sbipmis; BE-NEXT:    store i8 10, ptr [[P]], align 1
164e9393789Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
165e9393789Sbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
166e9393789Sbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
167e9393789Sbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
168e9393789Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
169e9393789Sbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
170e9393789Sbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
171e9393789Sbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
172e9393789Sbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
173e9393789Sbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
174e9393789Sbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
175e9393789Sbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
176e9393789Sbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
177e9393789Sbipmis; BE-NEXT:    ret i32 [[O3]]
178dd48c0beSbipmis;
179dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
180dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
181dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
182dd48c0beSbipmis  %l1 = load i8, ptr %p
1832d69827cSNikita Popov  store i8 10, ptr %p
184dd48c0beSbipmis  %l2 = load i8, ptr %p1
185dd48c0beSbipmis  %l3 = load i8, ptr %p2
186dd48c0beSbipmis  %l4 = load i8, ptr %p3
187dd48c0beSbipmis
188dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
189dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
190dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
191dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
192dd48c0beSbipmis
193dd48c0beSbipmis  %s2 = shl i32 %e2, 8
194dd48c0beSbipmis  %s3 = shl i32 %e3, 16
195dd48c0beSbipmis  %s4 = shl i32 %e4, 24
196dd48c0beSbipmis
197dd48c0beSbipmis  %o1 = or i32 %e1, %s2
198dd48c0beSbipmis  %o2 = or i32 %o1, %s3
199dd48c0beSbipmis  %o3 = or i32 %o2, %s4
200dd48c0beSbipmis  ret i32 %o3
201dd48c0beSbipmis}
202dd48c0beSbipmis
203dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias_BE(ptr %p) {
204e9393789Sbipmis; LE-LABEL: @loadCombine_4consecutive_alias_BE(
205e9393789Sbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
206e9393789Sbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
207e9393789Sbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
208e9393789Sbipmis; LE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
209e9393789Sbipmis; LE-NEXT:    store i8 10, ptr [[P]], align 1
210e9393789Sbipmis; LE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
211e9393789Sbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
212e9393789Sbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
213e9393789Sbipmis; LE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
214e9393789Sbipmis; LE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
215e9393789Sbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
216e9393789Sbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
217e9393789Sbipmis; LE-NEXT:    [[S1:%.*]] = shl i32 [[E1]], 24
218e9393789Sbipmis; LE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 16
219e9393789Sbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 8
220e9393789Sbipmis; LE-NEXT:    [[O1:%.*]] = or i32 [[S1]], [[S2]]
221e9393789Sbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
222e9393789Sbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E4]]
223e9393789Sbipmis; LE-NEXT:    ret i32 [[O3]]
224e9393789Sbipmis;
225e9393789Sbipmis; BE-LABEL: @loadCombine_4consecutive_alias_BE(
226e9393789Sbipmis; BE-NEXT:    [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
227e9393789Sbipmis; BE-NEXT:    store i8 10, ptr [[P]], align 1
228e9393789Sbipmis; BE-NEXT:    ret i32 [[L1]]
229dd48c0beSbipmis;
230dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
231dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
232dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
233dd48c0beSbipmis  %l1 = load i8, ptr %p
2342d69827cSNikita Popov  store i8 10, ptr %p
235dd48c0beSbipmis  %l2 = load i8, ptr %p1
236dd48c0beSbipmis  %l3 = load i8, ptr %p2
237dd48c0beSbipmis  %l4 = load i8, ptr %p3
238dd48c0beSbipmis
239dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
240dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
241dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
242dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
243dd48c0beSbipmis
244dd48c0beSbipmis  %s1 = shl i32 %e1, 24
245dd48c0beSbipmis  %s2 = shl i32 %e2, 16
246dd48c0beSbipmis  %s3 = shl i32 %e3, 8
247dd48c0beSbipmis
248dd48c0beSbipmis  %o1 = or i32 %s1, %s2
249dd48c0beSbipmis  %o2 = or i32 %o1, %s3
250dd48c0beSbipmis  %o3 = or i32 %o2, %e4
251dd48c0beSbipmis  ret i32 %o3
252dd48c0beSbipmis}
253dd48c0beSbipmis
254dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias2(ptr %p, ptr %pstr) {
2553b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_alias2(
2563b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
2573b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
2583b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
2593b49a9fcSbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[L1]] to i32
2603b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
2613b49a9fcSbipmis; LE-NEXT:    store i8 10, ptr [[PSTR:%.*]], align 1
2623b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
2633b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
2643b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
2653b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
2663b49a9fcSbipmis; LE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
2673b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[TMP1]], [[S3]]
2683b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
2693b49a9fcSbipmis; LE-NEXT:    ret i32 [[O3]]
2703b49a9fcSbipmis;
2713b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_alias2(
2723b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
2733b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
2743b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
2753b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
2763b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
2773b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
2783b49a9fcSbipmis; BE-NEXT:    store i8 10, ptr [[PSTR:%.*]], align 1
2793b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
2803b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
2813b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
2823b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
2833b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
2843b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
2853b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
2863b49a9fcSbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
2873b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
2883b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
2893b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
2903b49a9fcSbipmis; BE-NEXT:    ret i32 [[O3]]
291dd48c0beSbipmis;
292dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
293dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
294dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
295dd48c0beSbipmis  %l1 = load i8, ptr %p
296dd48c0beSbipmis  %l2 = load i8, ptr %p1
297dd48c0beSbipmis  %l3 = load i8, ptr %p2
2982d69827cSNikita Popov  store i8 10, ptr %pstr
299dd48c0beSbipmis  %l4 = load i8, ptr %p3
300dd48c0beSbipmis
301dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
302dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
303dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
304dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
305dd48c0beSbipmis
306dd48c0beSbipmis  %s2 = shl i32 %e2, 8
307dd48c0beSbipmis  %s3 = shl i32 %e3, 16
308dd48c0beSbipmis  %s4 = shl i32 %e4, 24
309dd48c0beSbipmis
310dd48c0beSbipmis  %o1 = or i32 %e1, %s2
311dd48c0beSbipmis  %o2 = or i32 %o1, %s3
312dd48c0beSbipmis  %o3 = or i32 %o2, %s4
313dd48c0beSbipmis  ret i32 %o3
314dd48c0beSbipmis}
315dd48c0beSbipmis
316dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias2_BE(ptr %p, ptr %pstr) {
3173b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_alias2_BE(
3183b49a9fcSbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
3193b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
3203b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
3213b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
3223b49a9fcSbipmis; LE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
3233b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
3243b49a9fcSbipmis; LE-NEXT:    store i8 10, ptr [[PSTR:%.*]], align 1
3253b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
3263b49a9fcSbipmis; LE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
3273b49a9fcSbipmis; LE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
3283b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
3293b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
3303b49a9fcSbipmis; LE-NEXT:    [[S1:%.*]] = shl i32 [[E1]], 24
3313b49a9fcSbipmis; LE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 16
3323b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 8
3333b49a9fcSbipmis; LE-NEXT:    [[O1:%.*]] = or i32 [[S1]], [[S2]]
3343b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
3353b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E4]]
3363b49a9fcSbipmis; LE-NEXT:    ret i32 [[O3]]
3373b49a9fcSbipmis;
3383b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_alias2_BE(
3393b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
3403b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
3413b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
3423b49a9fcSbipmis; BE-NEXT:    [[TMP1:%.*]] = zext i16 [[L1]] to i32
3433b49a9fcSbipmis; BE-NEXT:    [[TMP2:%.*]] = shl i32 [[TMP1]], 16
3443b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
3453b49a9fcSbipmis; BE-NEXT:    store i8 10, ptr [[PSTR:%.*]], align 1
3463b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
3473b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
3483b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
3493b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 8
3503b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[TMP2]], [[S3]]
3513b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E4]]
3523b49a9fcSbipmis; BE-NEXT:    ret i32 [[O3]]
353dd48c0beSbipmis;
354dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
355dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
356dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
357dd48c0beSbipmis  %l1 = load i8, ptr %p
358dd48c0beSbipmis  %l2 = load i8, ptr %p1
359dd48c0beSbipmis  %l3 = load i8, ptr %p2
3602d69827cSNikita Popov  store i8 10, ptr %pstr
361dd48c0beSbipmis  %l4 = load i8, ptr %p3
362dd48c0beSbipmis
363dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
364dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
365dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
366dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
367dd48c0beSbipmis
368dd48c0beSbipmis  %s1 = shl i32 %e1, 24
369dd48c0beSbipmis  %s2 = shl i32 %e2, 16
370dd48c0beSbipmis  %s3 = shl i32 %e3, 8
371dd48c0beSbipmis
372dd48c0beSbipmis  %o1 = or i32 %s1, %s2
373dd48c0beSbipmis  %o2 = or i32 %o1, %s3
374dd48c0beSbipmis  %o3 = or i32 %o2, %e4
375dd48c0beSbipmis  ret i32 %o3
376dd48c0beSbipmis}
377dd48c0beSbipmis
378dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias3(ptr %p) {
3793b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_alias3(
3803b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
3813b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
3823b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
3833b49a9fcSbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[L1]] to i32
3843b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
3853b49a9fcSbipmis; LE-NEXT:    store i8 10, ptr [[P3]], align 1
3863b49a9fcSbipmis; LE-NEXT:    store i8 5, ptr [[P]], align 1
3873b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
3883b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
3893b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
3903b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
3913b49a9fcSbipmis; LE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
3923b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[TMP1]], [[S3]]
3933b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
3943b49a9fcSbipmis; LE-NEXT:    ret i32 [[O3]]
3953b49a9fcSbipmis;
3963b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_alias3(
3973b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
3983b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
3993b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
4003b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
4013b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
4023b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
4033b49a9fcSbipmis; BE-NEXT:    store i8 10, ptr [[P3]], align 1
4043b49a9fcSbipmis; BE-NEXT:    store i8 5, ptr [[P]], align 1
4053b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
4063b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
4073b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
4083b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
4093b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
4103b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
4113b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
4123b49a9fcSbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
4133b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
4143b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
4153b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
4163b49a9fcSbipmis; BE-NEXT:    ret i32 [[O3]]
417dd48c0beSbipmis;
418dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
419dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
420dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
421dd48c0beSbipmis  %l1 = load i8, ptr %p
422dd48c0beSbipmis  %l2 = load i8, ptr %p1
423dd48c0beSbipmis  %l3 = load i8, ptr %p2
4242d69827cSNikita Popov  store i8 10, ptr %p3
4252d69827cSNikita Popov  store i8 5, ptr %p
426dd48c0beSbipmis  %l4 = load i8, ptr %p3
427dd48c0beSbipmis
428dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
429dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
430dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
431dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
432dd48c0beSbipmis
433dd48c0beSbipmis  %s2 = shl i32 %e2, 8
434dd48c0beSbipmis  %s3 = shl i32 %e3, 16
435dd48c0beSbipmis  %s4 = shl i32 %e4, 24
436dd48c0beSbipmis
437dd48c0beSbipmis  %o1 = or i32 %e1, %s2
438dd48c0beSbipmis  %o2 = or i32 %o1, %s3
439dd48c0beSbipmis  %o3 = or i32 %o2, %s4
440dd48c0beSbipmis  ret i32 %o3
441dd48c0beSbipmis}
442dd48c0beSbipmis
443dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias3_BE(ptr %p) {
4443b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_alias3_BE(
4453b49a9fcSbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
4463b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
4473b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
4483b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
4493b49a9fcSbipmis; LE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
4503b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
4513b49a9fcSbipmis; LE-NEXT:    store i8 10, ptr [[P3]], align 1
4523b49a9fcSbipmis; LE-NEXT:    store i8 5, ptr [[P]], align 1
4533b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
4543b49a9fcSbipmis; LE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
4553b49a9fcSbipmis; LE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
4563b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
4573b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
4583b49a9fcSbipmis; LE-NEXT:    [[S1:%.*]] = shl i32 [[E1]], 24
4593b49a9fcSbipmis; LE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 16
4603b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 8
4613b49a9fcSbipmis; LE-NEXT:    [[O1:%.*]] = or i32 [[S1]], [[S2]]
4623b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
4633b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E4]]
4643b49a9fcSbipmis; LE-NEXT:    ret i32 [[O3]]
4653b49a9fcSbipmis;
4663b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_alias3_BE(
4673b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
4683b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
4693b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
4703b49a9fcSbipmis; BE-NEXT:    [[TMP1:%.*]] = zext i16 [[L1]] to i32
4713b49a9fcSbipmis; BE-NEXT:    [[TMP2:%.*]] = shl i32 [[TMP1]], 16
4723b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
4733b49a9fcSbipmis; BE-NEXT:    store i8 10, ptr [[P3]], align 1
4743b49a9fcSbipmis; BE-NEXT:    store i8 5, ptr [[P]], align 1
4753b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
4763b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
4773b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
4783b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 8
4793b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[TMP2]], [[S3]]
4803b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E4]]
4813b49a9fcSbipmis; BE-NEXT:    ret i32 [[O3]]
482dd48c0beSbipmis;
483dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
484dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
485dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
486dd48c0beSbipmis  %l1 = load i8, ptr %p
487dd48c0beSbipmis  %l2 = load i8, ptr %p1
488dd48c0beSbipmis  %l3 = load i8, ptr %p2
4892d69827cSNikita Popov  store i8 10, ptr %p3
4902d69827cSNikita Popov  store i8 5, ptr %p
491dd48c0beSbipmis  %l4 = load i8, ptr %p3
492dd48c0beSbipmis
493dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
494dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
495dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
496dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
497dd48c0beSbipmis
498dd48c0beSbipmis  %s1 = shl i32 %e1, 24
499dd48c0beSbipmis  %s2 = shl i32 %e2, 16
500dd48c0beSbipmis  %s3 = shl i32 %e3, 8
501dd48c0beSbipmis
502dd48c0beSbipmis  %o1 = or i32 %s1, %s2
503dd48c0beSbipmis  %o2 = or i32 %o1, %s3
504dd48c0beSbipmis  %o3 = or i32 %o2, %e4
505dd48c0beSbipmis  ret i32 %o3
506dd48c0beSbipmis}
507dd48c0beSbipmis
508dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_with_alias4(ptr %p, ptr %ps) {
509dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_with_alias4(
510dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
511dd48c0beSbipmis; ALL-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
512dd48c0beSbipmis; ALL-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
513dd48c0beSbipmis; ALL-NEXT:    [[PS1:%.*]] = getelementptr i8, ptr [[PS:%.*]], i32 1
514dd48c0beSbipmis; ALL-NEXT:    [[PS2:%.*]] = getelementptr i8, ptr [[PS]], i32 2
515dd48c0beSbipmis; ALL-NEXT:    [[PS3:%.*]] = getelementptr i8, ptr [[PS]], i32 3
516dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
517dd48c0beSbipmis; ALL-NEXT:    store i8 10, ptr [[PS]], align 1
518dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
519dd48c0beSbipmis; ALL-NEXT:    store i8 10, ptr [[PS1]], align 1
520dd48c0beSbipmis; ALL-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
521dd48c0beSbipmis; ALL-NEXT:    store i8 10, ptr [[PS2]], align 1
522dd48c0beSbipmis; ALL-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
523dd48c0beSbipmis; ALL-NEXT:    store i8 10, ptr [[PS3]], align 1
524dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
525dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
526dd48c0beSbipmis; ALL-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
527dd48c0beSbipmis; ALL-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
528dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
529dd48c0beSbipmis; ALL-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
530dd48c0beSbipmis; ALL-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
531dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
532dd48c0beSbipmis; ALL-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
533dd48c0beSbipmis; ALL-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
534dd48c0beSbipmis; ALL-NEXT:    ret i32 [[O3]]
535dd48c0beSbipmis;
536dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
537dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
538dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
539dd48c0beSbipmis  %ps1 = getelementptr i8, ptr %ps, i32 1
540dd48c0beSbipmis  %ps2 = getelementptr i8, ptr %ps, i32 2
541dd48c0beSbipmis  %ps3 = getelementptr i8, ptr %ps, i32 3
542dd48c0beSbipmis  %l1 = load i8, ptr %p
5432d69827cSNikita Popov  store i8 10, ptr %ps
544dd48c0beSbipmis  %l2 = load i8, ptr %p1
5452d69827cSNikita Popov  store i8 10, ptr %ps1
546dd48c0beSbipmis  %l3 = load i8, ptr %p2
5472d69827cSNikita Popov  store i8 10, ptr %ps2
548dd48c0beSbipmis  %l4 = load i8, ptr %p3
5492d69827cSNikita Popov  store i8 10, ptr %ps3
550dd48c0beSbipmis
551dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
552dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
553dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
554dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
555dd48c0beSbipmis
556dd48c0beSbipmis  %s2 = shl i32 %e2, 8
557dd48c0beSbipmis  %s3 = shl i32 %e3, 16
558dd48c0beSbipmis  %s4 = shl i32 %e4, 24
559dd48c0beSbipmis
560dd48c0beSbipmis  %o1 = or i32 %e1, %s2
561dd48c0beSbipmis  %o2 = or i32 %o1, %s3
562dd48c0beSbipmis  %o3 = or i32 %o2, %s4
563dd48c0beSbipmis  ret i32 %o3
564dd48c0beSbipmis}
565dd48c0beSbipmis
566dd48c0beSbipmisdeclare void @use(i8)
567dd48c0beSbipmisdeclare void @use2(i32)
568dd48c0beSbipmis
569dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_hasOneUse1(ptr %p) {
570dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_hasOneUse1(
571dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
572dd48c0beSbipmis; ALL-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
573dd48c0beSbipmis; ALL-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
574dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
575dd48c0beSbipmis; ALL-NEXT:    call void @use(i8 [[L1]])
576dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
577dd48c0beSbipmis; ALL-NEXT:    call void @use(i8 [[L2]])
578dd48c0beSbipmis; ALL-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
579dd48c0beSbipmis; ALL-NEXT:    call void @use(i8 [[L3]])
580dd48c0beSbipmis; ALL-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
581dd48c0beSbipmis; ALL-NEXT:    call void @use(i8 [[L4]])
582dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
583dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
584dd48c0beSbipmis; ALL-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
585dd48c0beSbipmis; ALL-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
586dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
587dd48c0beSbipmis; ALL-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
588dd48c0beSbipmis; ALL-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
589dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
590dd48c0beSbipmis; ALL-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
591dd48c0beSbipmis; ALL-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
592dd48c0beSbipmis; ALL-NEXT:    ret i32 [[O3]]
593dd48c0beSbipmis;
594dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
595dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
596dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
597dd48c0beSbipmis  %l1 = load i8, ptr %p
598dd48c0beSbipmis  call void @use(i8 %l1)
599dd48c0beSbipmis  %l2 = load i8, ptr %p1
600dd48c0beSbipmis  call void @use(i8 %l2)
601dd48c0beSbipmis  %l3 = load i8, ptr %p2
602dd48c0beSbipmis  call void @use(i8 %l3)
603dd48c0beSbipmis  %l4 = load i8, ptr %p3
604dd48c0beSbipmis  call void @use(i8 %l4)
605dd48c0beSbipmis
606dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
607dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
608dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
609dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
610dd48c0beSbipmis
611dd48c0beSbipmis  %s2 = shl i32 %e2, 8
612dd48c0beSbipmis  %s3 = shl i32 %e3, 16
613dd48c0beSbipmis  %s4 = shl i32 %e4, 24
614dd48c0beSbipmis
615dd48c0beSbipmis  %o1 = or i32 %e1, %s2
616dd48c0beSbipmis  %o2 = or i32 %o1, %s3
617dd48c0beSbipmis  %o3 = or i32 %o2, %s4
618dd48c0beSbipmis  ret i32 %o3
619dd48c0beSbipmis}
620dd48c0beSbipmis
621dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_hasOneUse2(ptr %p) {
622dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_hasOneUse2(
623dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
624dd48c0beSbipmis; ALL-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
625dd48c0beSbipmis; ALL-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
626dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
627dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
628dd48c0beSbipmis; ALL-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
629dd48c0beSbipmis; ALL-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
630dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
631dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[E1]])
632dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
633dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[E2]])
634dd48c0beSbipmis; ALL-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
635dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[E3]])
636dd48c0beSbipmis; ALL-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
637dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[E4]])
638dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
639dd48c0beSbipmis; ALL-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
640dd48c0beSbipmis; ALL-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
641dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
642dd48c0beSbipmis; ALL-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
643dd48c0beSbipmis; ALL-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
644dd48c0beSbipmis; ALL-NEXT:    ret i32 [[O3]]
645dd48c0beSbipmis;
646dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
647dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
648dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
649dd48c0beSbipmis  %l1 = load i8, ptr %p
650dd48c0beSbipmis  %l2 = load i8, ptr %p1
651dd48c0beSbipmis  %l3 = load i8, ptr %p2
652dd48c0beSbipmis  %l4 = load i8, ptr %p3
653dd48c0beSbipmis
654dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
655dd48c0beSbipmis  call void @use(i32 %e1)
656dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
657dd48c0beSbipmis  call void @use(i32 %e2)
658dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
659dd48c0beSbipmis  call void @use(i32 %e3)
660dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
661dd48c0beSbipmis  call void @use(i32 %e4)
662dd48c0beSbipmis
663dd48c0beSbipmis  %s2 = shl i32 %e2, 8
664dd48c0beSbipmis  %s3 = shl i32 %e3, 16
665dd48c0beSbipmis  %s4 = shl i32 %e4, 24
666dd48c0beSbipmis
667dd48c0beSbipmis  %o1 = or i32 %e1, %s2
668dd48c0beSbipmis  %o2 = or i32 %o1, %s3
669dd48c0beSbipmis  %o3 = or i32 %o2, %s4
670dd48c0beSbipmis  ret i32 %o3
671dd48c0beSbipmis}
672dd48c0beSbipmis
673dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_hasOneUse3(ptr %p) {
674dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_hasOneUse3(
675dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
676dd48c0beSbipmis; ALL-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
677dd48c0beSbipmis; ALL-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
678dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
679dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
680dd48c0beSbipmis; ALL-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
681dd48c0beSbipmis; ALL-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
682dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
683dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
684dd48c0beSbipmis; ALL-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
685dd48c0beSbipmis; ALL-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
686dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
687dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[S2]])
688dd48c0beSbipmis; ALL-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
689dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[S3]])
690dd48c0beSbipmis; ALL-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
691dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[S4]])
692dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
693dd48c0beSbipmis; ALL-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
694dd48c0beSbipmis; ALL-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
695dd48c0beSbipmis; ALL-NEXT:    ret i32 [[O3]]
696dd48c0beSbipmis;
697dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
698dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
699dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
700dd48c0beSbipmis  %l1 = load i8, ptr %p
701dd48c0beSbipmis  %l2 = load i8, ptr %p1
702dd48c0beSbipmis  %l3 = load i8, ptr %p2
703dd48c0beSbipmis  %l4 = load i8, ptr %p3
704dd48c0beSbipmis
705dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
706dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
707dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
708dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
709dd48c0beSbipmis
710dd48c0beSbipmis  %s2 = shl i32 %e2, 8
711dd48c0beSbipmis  call void @use(i32 %s2)
712dd48c0beSbipmis  %s3 = shl i32 %e3, 16
713dd48c0beSbipmis  call void @use(i32 %s3)
714dd48c0beSbipmis  %s4 = shl i32 %e4, 24
715dd48c0beSbipmis  call void @use(i32 %s4)
716dd48c0beSbipmis
717dd48c0beSbipmis  %o1 = or i32 %e1, %s2
718dd48c0beSbipmis  %o2 = or i32 %o1, %s3
719dd48c0beSbipmis  %o3 = or i32 %o2, %s4
720dd48c0beSbipmis  ret i32 %o3
721dd48c0beSbipmis}
722dd48c0beSbipmis
723dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_hasOneUse4(ptr %p) {
724dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_hasOneUse4(
725dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
726dd48c0beSbipmis; ALL-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
727dd48c0beSbipmis; ALL-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
728dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
729dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
730dd48c0beSbipmis; ALL-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
731dd48c0beSbipmis; ALL-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
732dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
733dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
734dd48c0beSbipmis; ALL-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
735dd48c0beSbipmis; ALL-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
736dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
737dd48c0beSbipmis; ALL-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
738dd48c0beSbipmis; ALL-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
739dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
740dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[O1]])
741dd48c0beSbipmis; ALL-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
742dd48c0beSbipmis; ALL-NEXT:    call void @use(i32 [[O2]])
743dd48c0beSbipmis; ALL-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
744dd48c0beSbipmis; ALL-NEXT:    ret i32 [[O3]]
745dd48c0beSbipmis;
746dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
747dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
748dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
749dd48c0beSbipmis  %l1 = load i8, ptr %p
750dd48c0beSbipmis  %l2 = load i8, ptr %p1
751dd48c0beSbipmis  %l3 = load i8, ptr %p2
752dd48c0beSbipmis  %l4 = load i8, ptr %p3
753dd48c0beSbipmis
754dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
755dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
756dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
757dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
758dd48c0beSbipmis
759dd48c0beSbipmis  %s2 = shl i32 %e2, 8
760dd48c0beSbipmis  %s3 = shl i32 %e3, 16
761dd48c0beSbipmis  %s4 = shl i32 %e4, 24
762dd48c0beSbipmis
763dd48c0beSbipmis  %o1 = or i32 %e1, %s2
764dd48c0beSbipmis  call void @use(i32 %o1)
765dd48c0beSbipmis  %o2 = or i32 %o1, %s3
766dd48c0beSbipmis  call void @use(i32 %o2)
767dd48c0beSbipmis  %o3 = or i32 %o2, %s4
768dd48c0beSbipmis  ret i32 %o3
769dd48c0beSbipmis}
770dd48c0beSbipmis
771dd48c0beSbipmisdefine i32 @loadCombine_parLoad1(ptr %p) {
7723b49a9fcSbipmis; LE-LABEL: @loadCombine_parLoad1(
7733b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
7743b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
7753b49a9fcSbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[L1]] to i32
7763b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
7773b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
7783b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
7793b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[TMP1]], [[S3]]
7803b49a9fcSbipmis; LE-NEXT:    ret i32 [[O2]]
7813b49a9fcSbipmis;
7823b49a9fcSbipmis; BE-LABEL: @loadCombine_parLoad1(
7833b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
7843b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
7853b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
7863b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
7873b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
7883b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
7893b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
7903b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
7913b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
7923b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
7933b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
7943b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
7953b49a9fcSbipmis; BE-NEXT:    ret i32 [[O2]]
796dd48c0beSbipmis;
797dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
798dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
799dd48c0beSbipmis  %l1 = load i8, ptr %p
800dd48c0beSbipmis  %l2 = load i8, ptr %p1
801dd48c0beSbipmis  %l3 = load i8, ptr %p2
802dd48c0beSbipmis
803dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
804dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
805dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
806dd48c0beSbipmis
807dd48c0beSbipmis  %s2 = shl i32 %e2, 8
808dd48c0beSbipmis  %s3 = shl i32 %e3, 16
809dd48c0beSbipmis
810dd48c0beSbipmis  %o1 = or i32 %e1, %s2
811dd48c0beSbipmis  %o2 = or i32 %o1, %s3
812dd48c0beSbipmis  ret i32 %o2
813dd48c0beSbipmis}
814dd48c0beSbipmis
815dd48c0beSbipmisdefine i128 @loadCombine_i128(ptr %p) {
8163b49a9fcSbipmis; LE-LABEL: @loadCombine_i128(
8173b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 2
8183b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i32, ptr [[P]], i32 3
8193b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i64, ptr [[P]], align 4
8203b49a9fcSbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i64 [[L1]] to i128
8213b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i32, ptr [[P2]], align 4
8223b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i32, ptr [[P3]], align 4
8233b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i32 [[L3]] to i128
8243b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i32 [[L4]] to i128
8253b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i128 [[E3]], 64
8263b49a9fcSbipmis; LE-NEXT:    [[S4:%.*]] = shl i128 [[E4]], 96
8273b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i128 [[TMP1]], [[S3]]
8283b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i128 [[O2]], [[S4]]
8293b49a9fcSbipmis; LE-NEXT:    ret i128 [[O3]]
8303b49a9fcSbipmis;
8313b49a9fcSbipmis; BE-LABEL: @loadCombine_i128(
8323b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 1
8333b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i32, ptr [[P]], i32 2
8343b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i32, ptr [[P]], i32 3
8353b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i32, ptr [[P]], align 4
8363b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i32, ptr [[P1]], align 4
8373b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i32, ptr [[P2]], align 4
8383b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i32, ptr [[P3]], align 4
8393b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i32 [[L1]] to i128
8403b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i32 [[L2]] to i128
8413b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i32 [[L3]] to i128
8423b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i32 [[L4]] to i128
8433b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i128 [[E2]], 32
8443b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i128 [[E3]], 64
8453b49a9fcSbipmis; BE-NEXT:    [[S4:%.*]] = shl i128 [[E4]], 96
8463b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i128 [[E1]], [[S2]]
8473b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i128 [[O1]], [[S3]]
8483b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i128 [[O2]], [[S4]]
8493b49a9fcSbipmis; BE-NEXT:    ret i128 [[O3]]
850dd48c0beSbipmis;
851dd48c0beSbipmis  %p1 = getelementptr i32, ptr %p, i32 1
852dd48c0beSbipmis  %p2 = getelementptr i32, ptr %p, i32 2
853dd48c0beSbipmis  %p3 = getelementptr i32, ptr %p, i32 3
854dd48c0beSbipmis  %l1 = load i32, ptr %p
855dd48c0beSbipmis  %l2 = load i32, ptr %p1
856dd48c0beSbipmis  %l3 = load i32, ptr %p2
857dd48c0beSbipmis  %l4 = load i32, ptr %p3
858dd48c0beSbipmis
859dd48c0beSbipmis  %e1 = zext i32 %l1 to i128
860dd48c0beSbipmis  %e2 = zext i32 %l2 to i128
861dd48c0beSbipmis  %e3 = zext i32 %l3 to i128
862dd48c0beSbipmis  %e4 = zext i32 %l4 to i128
863dd48c0beSbipmis
864dd48c0beSbipmis  %s2 = shl i128 %e2, 32
865dd48c0beSbipmis  %s3 = shl i128 %e3, 64
866dd48c0beSbipmis  %s4 = shl i128 %e4, 96
867dd48c0beSbipmis
868dd48c0beSbipmis  %o1 = or i128 %e1, %s2
869dd48c0beSbipmis  %o2 = or i128 %o1, %s3
870dd48c0beSbipmis  %o3 = or i128 %o2, %s4
871dd48c0beSbipmis  ret i128 %o3
872dd48c0beSbipmis}
873dd48c0beSbipmis
874dd48c0beSbipmisdefine i128 @loadCombine_i128_BE(ptr %p) {
8753b49a9fcSbipmis; LE-LABEL: @loadCombine_i128_BE(
8763b49a9fcSbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 1
8773b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i32, ptr [[P]], i32 2
8783b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i32, ptr [[P]], i32 3
8793b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[P]], align 4
8803b49a9fcSbipmis; LE-NEXT:    [[L2:%.*]] = load i32, ptr [[P1]], align 4
8813b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i32, ptr [[P2]], align 4
8823b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i32, ptr [[P3]], align 4
8833b49a9fcSbipmis; LE-NEXT:    [[E1:%.*]] = zext i32 [[L1]] to i128
8843b49a9fcSbipmis; LE-NEXT:    [[E2:%.*]] = zext i32 [[L2]] to i128
8853b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i32 [[L3]] to i128
8863b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i32 [[L4]] to i128
8873b49a9fcSbipmis; LE-NEXT:    [[S1:%.*]] = shl i128 [[E1]], 96
8883b49a9fcSbipmis; LE-NEXT:    [[S2:%.*]] = shl i128 [[E2]], 64
8893b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i128 [[E3]], 32
8903b49a9fcSbipmis; LE-NEXT:    [[O1:%.*]] = or i128 [[S1]], [[S2]]
8913b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i128 [[O1]], [[S3]]
8923b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i128 [[O2]], [[E4]]
8933b49a9fcSbipmis; LE-NEXT:    ret i128 [[O3]]
8943b49a9fcSbipmis;
8953b49a9fcSbipmis; BE-LABEL: @loadCombine_i128_BE(
8963b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 2
8973b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i32, ptr [[P]], i32 3
8983b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i64, ptr [[P]], align 4
8993b49a9fcSbipmis; BE-NEXT:    [[TMP1:%.*]] = zext i64 [[L1]] to i128
9003b49a9fcSbipmis; BE-NEXT:    [[TMP2:%.*]] = shl i128 [[TMP1]], 64
9013b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i32, ptr [[P2]], align 4
9023b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i32, ptr [[P3]], align 4
9033b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i32 [[L3]] to i128
9043b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i32 [[L4]] to i128
9053b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i128 [[E3]], 32
9063b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i128 [[TMP2]], [[S3]]
9073b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i128 [[O2]], [[E4]]
9083b49a9fcSbipmis; BE-NEXT:    ret i128 [[O3]]
909dd48c0beSbipmis;
910dd48c0beSbipmis  %p1 = getelementptr i32, ptr %p, i32 1
911dd48c0beSbipmis  %p2 = getelementptr i32, ptr %p, i32 2
912dd48c0beSbipmis  %p3 = getelementptr i32, ptr %p, i32 3
913dd48c0beSbipmis  %l1 = load i32, ptr %p
914dd48c0beSbipmis  %l2 = load i32, ptr %p1
915dd48c0beSbipmis  %l3 = load i32, ptr %p2
916dd48c0beSbipmis  %l4 = load i32, ptr %p3
917dd48c0beSbipmis
918dd48c0beSbipmis  %e1 = zext i32 %l1 to i128
919dd48c0beSbipmis  %e2 = zext i32 %l2 to i128
920dd48c0beSbipmis  %e3 = zext i32 %l3 to i128
921dd48c0beSbipmis  %e4 = zext i32 %l4 to i128
922dd48c0beSbipmis
923dd48c0beSbipmis  %s1 = shl i128 %e1, 96
924dd48c0beSbipmis  %s2 = shl i128 %e2, 64
925dd48c0beSbipmis  %s3 = shl i128 %e3, 32
926dd48c0beSbipmis
927dd48c0beSbipmis  %o1 = or i128 %s1, %s2
928dd48c0beSbipmis  %o2 = or i128 %o1, %s3
929dd48c0beSbipmis  %o3 = or i128 %o2, %e4
930dd48c0beSbipmis  ret i128 %o3
931dd48c0beSbipmis}
932dd48c0beSbipmis
933dd48c0beSbipmisdefine i64 @loadCombine_i64(ptr %p) {
9343b49a9fcSbipmis; LE-LABEL: @loadCombine_i64(
9353b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i64, ptr [[P:%.*]], align 2
9363b49a9fcSbipmis; LE-NEXT:    ret i64 [[L1]]
9373b49a9fcSbipmis;
9383b49a9fcSbipmis; BE-LABEL: @loadCombine_i64(
9393b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i16, ptr [[P:%.*]], i32 1
9403b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i16, ptr [[P]], i32 2
9413b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i16, ptr [[P]], i32 3
9423b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
9433b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i16, ptr [[P1]], align 2
9443b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i16, ptr [[P2]], align 2
9453b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i16, ptr [[P3]], align 2
9463b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i16 [[L1]] to i64
9473b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i16 [[L2]] to i64
9483b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i16 [[L3]] to i64
9493b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i16 [[L4]] to i64
9503b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i64 [[E2]], 16
9513b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i64 [[E3]], 32
9523b49a9fcSbipmis; BE-NEXT:    [[S4:%.*]] = shl i64 [[E4]], 48
9533b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i64 [[E1]], [[S2]]
9543b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i64 [[O1]], [[S3]]
9553b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i64 [[O2]], [[S4]]
9563b49a9fcSbipmis; BE-NEXT:    ret i64 [[O3]]
957dd48c0beSbipmis;
958dd48c0beSbipmis  %p1 = getelementptr i16, ptr %p, i32 1
959dd48c0beSbipmis  %p2 = getelementptr i16, ptr %p, i32 2
960dd48c0beSbipmis  %p3 = getelementptr i16, ptr %p, i32 3
961dd48c0beSbipmis  %l1 = load i16, ptr %p
962dd48c0beSbipmis  %l2 = load i16, ptr %p1
963dd48c0beSbipmis  %l3 = load i16, ptr %p2
964dd48c0beSbipmis  %l4 = load i16, ptr %p3
965dd48c0beSbipmis
966dd48c0beSbipmis  %e1 = zext i16 %l1 to i64
967dd48c0beSbipmis  %e2 = zext i16 %l2 to i64
968dd48c0beSbipmis  %e3 = zext i16 %l3 to i64
969dd48c0beSbipmis  %e4 = zext i16 %l4 to i64
970dd48c0beSbipmis
971dd48c0beSbipmis  %s2 = shl i64 %e2, 16
972dd48c0beSbipmis  %s3 = shl i64 %e3, 32
973dd48c0beSbipmis  %s4 = shl i64 %e4, 48
974dd48c0beSbipmis
975dd48c0beSbipmis  %o1 = or i64 %e1, %s2
976dd48c0beSbipmis  %o2 = or i64 %o1, %s3
977dd48c0beSbipmis  %o3 = or i64 %o2, %s4
978dd48c0beSbipmis  ret i64 %o3
979dd48c0beSbipmis}
980dd48c0beSbipmis
981dd48c0beSbipmisdefine i64 @loadCombine_i64_BE(ptr %p) {
9823b49a9fcSbipmis; LE-LABEL: @loadCombine_i64_BE(
9833b49a9fcSbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i16, ptr [[P:%.*]], i32 1
9843b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i16, ptr [[P]], i32 2
9853b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i16, ptr [[P]], i32 3
9863b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
9873b49a9fcSbipmis; LE-NEXT:    [[L2:%.*]] = load i16, ptr [[P1]], align 2
9883b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i16, ptr [[P2]], align 2
9893b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i16, ptr [[P3]], align 2
9903b49a9fcSbipmis; LE-NEXT:    [[E1:%.*]] = zext i16 [[L1]] to i64
9913b49a9fcSbipmis; LE-NEXT:    [[E2:%.*]] = zext i16 [[L2]] to i64
9923b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i16 [[L3]] to i64
9933b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i16 [[L4]] to i64
9943b49a9fcSbipmis; LE-NEXT:    [[S1:%.*]] = shl i64 [[E1]], 48
9953b49a9fcSbipmis; LE-NEXT:    [[S2:%.*]] = shl i64 [[E2]], 32
9963b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i64 [[E3]], 16
9973b49a9fcSbipmis; LE-NEXT:    [[O1:%.*]] = or i64 [[S1]], [[S2]]
9983b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i64 [[O1]], [[S3]]
9993b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i64 [[O2]], [[E4]]
10003b49a9fcSbipmis; LE-NEXT:    ret i64 [[O3]]
10013b49a9fcSbipmis;
10023b49a9fcSbipmis; BE-LABEL: @loadCombine_i64_BE(
10033b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i64, ptr [[P:%.*]], align 2
10043b49a9fcSbipmis; BE-NEXT:    ret i64 [[L1]]
1005dd48c0beSbipmis;
1006dd48c0beSbipmis  %p1 = getelementptr i16, ptr %p, i32 1
1007dd48c0beSbipmis  %p2 = getelementptr i16, ptr %p, i32 2
1008dd48c0beSbipmis  %p3 = getelementptr i16, ptr %p, i32 3
1009dd48c0beSbipmis  %l1 = load i16, ptr %p
1010dd48c0beSbipmis  %l2 = load i16, ptr %p1
1011dd48c0beSbipmis  %l3 = load i16, ptr %p2
1012dd48c0beSbipmis  %l4 = load i16, ptr %p3
1013dd48c0beSbipmis
1014dd48c0beSbipmis  %e1 = zext i16 %l1 to i64
1015dd48c0beSbipmis  %e2 = zext i16 %l2 to i64
1016dd48c0beSbipmis  %e3 = zext i16 %l3 to i64
1017dd48c0beSbipmis  %e4 = zext i16 %l4 to i64
1018dd48c0beSbipmis
1019dd48c0beSbipmis  %s1 = shl i64 %e1, 48
1020dd48c0beSbipmis  %s2 = shl i64 %e2, 32
1021dd48c0beSbipmis  %s3 = shl i64 %e3, 16
1022dd48c0beSbipmis
1023dd48c0beSbipmis  %o1 = or i64 %s1, %s2
1024dd48c0beSbipmis  %o2 = or i64 %o1, %s3
1025dd48c0beSbipmis  %o3 = or i64 %o2, %e4
1026dd48c0beSbipmis  ret i64 %o3
1027dd48c0beSbipmis}
1028dd48c0beSbipmis
1029dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_atomic(ptr %p) {
1030dd48c0beSbipmis; ALL-LABEL: @loadCombine_2consecutive_atomic(
1031dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1032dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load atomic i8, ptr [[P]] monotonic, align 1
1033dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load atomic i8, ptr [[P1]] monotonic, align 1
1034dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i16
1035dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i16
1036dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i16 [[E2]], 8
1037dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i16 [[E1]], [[S2]]
1038dd48c0beSbipmis; ALL-NEXT:    ret i16 [[O1]]
1039dd48c0beSbipmis;
1040dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
1041dd48c0beSbipmis  %l1 = load atomic i8, ptr %p monotonic, align 1
1042dd48c0beSbipmis  %l2 = load atomic i8, ptr %p1 monotonic, align 1
1043dd48c0beSbipmis  %e1 = zext i8 %l1 to i16
1044dd48c0beSbipmis  %e2 = zext i8 %l2 to i16
1045dd48c0beSbipmis  %s2 = shl i16 %e2, 8
1046dd48c0beSbipmis  %o1 = or i16 %e1, %s2
1047dd48c0beSbipmis  ret i16 %o1
1048dd48c0beSbipmis}
1049dd48c0beSbipmis
1050dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_volatile(ptr %p) {
1051dd48c0beSbipmis; ALL-LABEL: @loadCombine_2consecutive_volatile(
1052dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1053dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load volatile i8, ptr [[P]], align 1
1054dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load volatile i8, ptr [[P1]], align 1
1055dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i16
1056dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i16
1057dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i16 [[E2]], 8
1058dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i16 [[E1]], [[S2]]
1059dd48c0beSbipmis; ALL-NEXT:    ret i16 [[O1]]
1060dd48c0beSbipmis;
1061dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
1062dd48c0beSbipmis  %l1 = load volatile i8, ptr %p, align 1
1063dd48c0beSbipmis  %l2 = load volatile i8, ptr %p1, align 1
1064dd48c0beSbipmis  %e1 = zext i8 %l1 to i16
1065dd48c0beSbipmis  %e2 = zext i8 %l2 to i16
1066dd48c0beSbipmis  %s2 = shl i16 %e2, 8
1067dd48c0beSbipmis  %o1 = or i16 %e1, %s2
1068dd48c0beSbipmis  ret i16 %o1
1069dd48c0beSbipmis}
1070dd48c0beSbipmis
1071dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_separateBB(ptr %p) {
1072dd48c0beSbipmis; ALL-LABEL: @loadCombine_2consecutive_separateBB(
1073dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1074dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
1075dd48c0beSbipmis; ALL-NEXT:    br label [[BB2:%.*]]
1076dd48c0beSbipmis; ALL:       bb2:
1077dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
1078dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i16
1079dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i16
1080dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i16 [[E2]], 8
1081dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i16 [[E1]], [[S2]]
1082dd48c0beSbipmis; ALL-NEXT:    ret i16 [[O1]]
1083dd48c0beSbipmis;
1084dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
1085dd48c0beSbipmis  %l1 = load i8, ptr %p, align 1
1086dd48c0beSbipmis  br label %bb2
1087dd48c0beSbipmis
1088dd48c0beSbipmisbb2:
1089dd48c0beSbipmis  %l2 = load i8, ptr %p1, align 1
1090dd48c0beSbipmis  %e1 = zext i8 %l1 to i16
1091dd48c0beSbipmis  %e2 = zext i8 %l2 to i16
1092dd48c0beSbipmis  %s2 = shl i16 %e2, 8
1093dd48c0beSbipmis  %o1 = or i16 %e1, %s2
1094dd48c0beSbipmis  ret i16 %o1
1095dd48c0beSbipmis}
1096dd48c0beSbipmis
1097dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_separateptr(ptr %p, ptr %p2) {
1098dd48c0beSbipmis; ALL-LABEL: @loadCombine_2consecutive_separateptr(
1099dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P2:%.*]], i32 1
1100dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load i8, ptr [[P:%.*]], align 1
1101dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
1102dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i16
1103dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i16
1104dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i16 [[E2]], 8
1105dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i16 [[E1]], [[S2]]
1106dd48c0beSbipmis; ALL-NEXT:    ret i16 [[O1]]
1107dd48c0beSbipmis;
1108dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p2, i32 1
1109dd48c0beSbipmis  %l1 = load i8, ptr %p, align 1
1110dd48c0beSbipmis  %l2 = load i8, ptr %p1, align 1
1111dd48c0beSbipmis  %e1 = zext i8 %l1 to i16
1112dd48c0beSbipmis  %e2 = zext i8 %l2 to i16
1113dd48c0beSbipmis  %s2 = shl i16 %e2, 8
1114dd48c0beSbipmis  %o1 = or i16 %e1, %s2
1115dd48c0beSbipmis  ret i16 %o1
1116dd48c0beSbipmis}
1117dd48c0beSbipmis
1118dd48c0beSbipmisdefine i64 @load64_farLoads(ptr %ptr) {
11193b49a9fcSbipmis; LE-LABEL: @load64_farLoads(
11203b49a9fcSbipmis; LE-NEXT:  entry:
11213b49a9fcSbipmis; LE-NEXT:    [[TMP0:%.*]] = load i64, ptr [[PTR:%.*]], align 1
11223b49a9fcSbipmis; LE-NEXT:    ret i64 [[TMP0]]
11233b49a9fcSbipmis;
11243b49a9fcSbipmis; BE-LABEL: @load64_farLoads(
11253b49a9fcSbipmis; BE-NEXT:  entry:
11263b49a9fcSbipmis; BE-NEXT:    [[TMP0:%.*]] = load i8, ptr [[PTR:%.*]], align 1
11273b49a9fcSbipmis; BE-NEXT:    [[CONV:%.*]] = zext i8 [[TMP0]] to i64
11283b49a9fcSbipmis; BE-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 1
11293b49a9fcSbipmis; BE-NEXT:    [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
11303b49a9fcSbipmis; BE-NEXT:    [[CONV2:%.*]] = zext i8 [[TMP1]] to i64
11313b49a9fcSbipmis; BE-NEXT:    [[SHL:%.*]] = shl i64 [[CONV2]], 8
11323b49a9fcSbipmis; BE-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[SHL]]
11333b49a9fcSbipmis; BE-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 2
11343b49a9fcSbipmis; BE-NEXT:    [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX3]], align 1
11353b49a9fcSbipmis; BE-NEXT:    [[CONV4:%.*]] = zext i8 [[TMP2]] to i64
11363b49a9fcSbipmis; BE-NEXT:    [[SHL5:%.*]] = shl i64 [[CONV4]], 16
11373b49a9fcSbipmis; BE-NEXT:    [[OR6:%.*]] = or i64 [[OR]], [[SHL5]]
11383b49a9fcSbipmis; BE-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 3
11393b49a9fcSbipmis; BE-NEXT:    [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX7]], align 1
11403b49a9fcSbipmis; BE-NEXT:    [[CONV8:%.*]] = zext i8 [[TMP3]] to i64
11413b49a9fcSbipmis; BE-NEXT:    [[SHL9:%.*]] = shl i64 [[CONV8]], 24
11423b49a9fcSbipmis; BE-NEXT:    [[OR10:%.*]] = or i64 [[OR6]], [[SHL9]]
11433b49a9fcSbipmis; BE-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 4
11443b49a9fcSbipmis; BE-NEXT:    [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX11]], align 1
11453b49a9fcSbipmis; BE-NEXT:    [[CONV12:%.*]] = zext i8 [[TMP4]] to i64
11463b49a9fcSbipmis; BE-NEXT:    [[SHL13:%.*]] = shl i64 [[CONV12]], 32
11473b49a9fcSbipmis; BE-NEXT:    [[OR14:%.*]] = or i64 [[OR10]], [[SHL13]]
11483b49a9fcSbipmis; BE-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 5
11493b49a9fcSbipmis; BE-NEXT:    [[TMP5:%.*]] = load i8, ptr [[ARRAYIDX15]], align 1
11503b49a9fcSbipmis; BE-NEXT:    [[CONV16:%.*]] = zext i8 [[TMP5]] to i64
11513b49a9fcSbipmis; BE-NEXT:    [[SHL17:%.*]] = shl i64 [[CONV16]], 40
11523b49a9fcSbipmis; BE-NEXT:    [[OR18:%.*]] = or i64 [[OR14]], [[SHL17]]
11533b49a9fcSbipmis; BE-NEXT:    [[ARRAYIDX19:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 6
11543b49a9fcSbipmis; BE-NEXT:    [[TMP6:%.*]] = load i8, ptr [[ARRAYIDX19]], align 1
11553b49a9fcSbipmis; BE-NEXT:    [[CONV20:%.*]] = zext i8 [[TMP6]] to i64
11563b49a9fcSbipmis; BE-NEXT:    [[SHL21:%.*]] = shl i64 [[CONV20]], 48
11573b49a9fcSbipmis; BE-NEXT:    [[OR22:%.*]] = or i64 [[OR18]], [[SHL21]]
11583b49a9fcSbipmis; BE-NEXT:    [[ARRAYIDX23:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 7
11593b49a9fcSbipmis; BE-NEXT:    [[TMP7:%.*]] = load i8, ptr [[ARRAYIDX23]], align 1
11603b49a9fcSbipmis; BE-NEXT:    [[CONV24:%.*]] = zext i8 [[TMP7]] to i64
11613b49a9fcSbipmis; BE-NEXT:    [[SHL25:%.*]] = shl i64 [[CONV24]], 56
11623b49a9fcSbipmis; BE-NEXT:    [[OR26:%.*]] = or i64 [[OR22]], [[SHL25]]
11633b49a9fcSbipmis; BE-NEXT:    ret i64 [[OR26]]
1164dd48c0beSbipmis;
1165dd48c0beSbipmisentry:
1166dd48c0beSbipmis  %0 = load i8, ptr %ptr, align 1
1167dd48c0beSbipmis  %conv = zext i8 %0 to i64
1168dd48c0beSbipmis  %arrayidx1 = getelementptr inbounds i8, ptr %ptr, i64 1
1169dd48c0beSbipmis  %1 = load i8, ptr %arrayidx1, align 1
1170dd48c0beSbipmis  %conv2 = zext i8 %1 to i64
1171dd48c0beSbipmis  %shl = shl i64 %conv2, 8
1172dd48c0beSbipmis  %or = or i64 %conv, %shl
1173dd48c0beSbipmis  %arrayidx3 = getelementptr inbounds i8, ptr %ptr, i64 2
1174dd48c0beSbipmis  %2 = load i8, ptr %arrayidx3, align 1
1175dd48c0beSbipmis  %conv4 = zext i8 %2 to i64
1176dd48c0beSbipmis  %shl5 = shl i64 %conv4, 16
1177dd48c0beSbipmis  %or6 = or i64 %or, %shl5
1178dd48c0beSbipmis  %arrayidx7 = getelementptr inbounds i8, ptr %ptr, i64 3
1179dd48c0beSbipmis  %3 = load i8, ptr %arrayidx7, align 1
1180dd48c0beSbipmis  %conv8 = zext i8 %3 to i64
1181dd48c0beSbipmis  %shl9 = shl i64 %conv8, 24
1182dd48c0beSbipmis  %or10 = or i64 %or6, %shl9
1183dd48c0beSbipmis  %arrayidx11 = getelementptr inbounds i8, ptr %ptr, i64 4
1184dd48c0beSbipmis  %4 = load i8, ptr %arrayidx11, align 1
1185dd48c0beSbipmis  %conv12 = zext i8 %4 to i64
1186dd48c0beSbipmis  %shl13 = shl i64 %conv12, 32
1187dd48c0beSbipmis  %or14 = or i64 %or10, %shl13
1188dd48c0beSbipmis  %arrayidx15 = getelementptr inbounds i8, ptr %ptr, i64 5
1189dd48c0beSbipmis  %5 = load i8, ptr %arrayidx15, align 1
1190dd48c0beSbipmis  %conv16 = zext i8 %5 to i64
1191dd48c0beSbipmis  %shl17 = shl i64 %conv16, 40
1192dd48c0beSbipmis  %or18 = or i64 %or14, %shl17
1193dd48c0beSbipmis  %arrayidx19 = getelementptr inbounds i8, ptr %ptr, i64 6
1194dd48c0beSbipmis  %6 = load i8, ptr %arrayidx19, align 1
1195dd48c0beSbipmis  %conv20 = zext i8 %6 to i64
1196dd48c0beSbipmis  %shl21 = shl i64 %conv20, 48
1197dd48c0beSbipmis  %or22 = or i64 %or18, %shl21
1198dd48c0beSbipmis  %arrayidx23 = getelementptr inbounds i8, ptr %ptr, i64 7
1199dd48c0beSbipmis  %7 = load i8, ptr %arrayidx23, align 1
1200dd48c0beSbipmis  %conv24 = zext i8 %7 to i64
1201dd48c0beSbipmis  %shl25 = shl i64 %conv24, 56
1202dd48c0beSbipmis  %or26 = or i64 %or22, %shl25
1203dd48c0beSbipmis  ret i64 %or26
1204dd48c0beSbipmis}
1205dd48c0beSbipmis
1206dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_metadata(ptr %p, ptr %pstr) {
12073b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_metadata(
1208*f68b0e36SAntonio Frighetto; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1, !alias.scope [[META0:![0-9]+]]
1209*f68b0e36SAntonio Frighetto; LE-NEXT:    store i32 25, ptr [[PSTR:%.*]], align 4, !noalias [[META0]]
12103b49a9fcSbipmis; LE-NEXT:    ret i32 [[L1]]
12113b49a9fcSbipmis;
12123b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_metadata(
12133b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
12143b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
12153b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
1216*f68b0e36SAntonio Frighetto; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1, !alias.scope [[META0:![0-9]+]]
1217*f68b0e36SAntonio Frighetto; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1, !alias.scope [[META0]]
1218*f68b0e36SAntonio Frighetto; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1, !alias.scope [[META0]]
1219*f68b0e36SAntonio Frighetto; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1, !alias.scope [[META0]]
1220*f68b0e36SAntonio Frighetto; BE-NEXT:    store i32 25, ptr [[PSTR:%.*]], align 4, !noalias [[META0]]
12213b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
12223b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
12233b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
12243b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
12253b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
12263b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
12273b49a9fcSbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
12283b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
12293b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
12303b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
12313b49a9fcSbipmis; BE-NEXT:    ret i32 [[O3]]
1232dd48c0beSbipmis;
1233dd48c0beSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
1234dd48c0beSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
1235dd48c0beSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
1236dd48c0beSbipmis  %l1 = load i8, ptr %p, !alias.scope !2
1237dd48c0beSbipmis  %l2 = load i8, ptr %p1, !alias.scope !2
1238dd48c0beSbipmis  %l3 = load i8, ptr %p2, !alias.scope !2
1239dd48c0beSbipmis  %l4 = load i8, ptr %p3, !alias.scope !2
1240dd48c0beSbipmis  store i32 25, ptr %pstr, !noalias !2
1241dd48c0beSbipmis
1242dd48c0beSbipmis  %e1 = zext i8 %l1 to i32
1243dd48c0beSbipmis  %e2 = zext i8 %l2 to i32
1244dd48c0beSbipmis  %e3 = zext i8 %l3 to i32
1245dd48c0beSbipmis  %e4 = zext i8 %l4 to i32
1246dd48c0beSbipmis
1247dd48c0beSbipmis  %s2 = shl i32 %e2, 8
1248dd48c0beSbipmis  %s3 = shl i32 %e3, 16
1249dd48c0beSbipmis  %s4 = shl i32 %e4, 24
1250dd48c0beSbipmis
1251dd48c0beSbipmis  %o1 = or i32 %e1, %s2
1252dd48c0beSbipmis  %o2 = or i32 %o1, %s3
1253dd48c0beSbipmis  %o3 = or i32 %o2, %s4
1254dd48c0beSbipmis  ret i32 %o3
1255dd48c0beSbipmis}
1256dd48c0beSbipmis
1257dd48c0beSbipmis!0 = distinct !{!0}
1258dd48c0beSbipmis!1 = distinct !{!1, !0}
1259dd48c0beSbipmis!2 = !{!1}
1260dd48c0beSbipmis
1261dd48c0beSbipmis; CHECK: !0 = !{!1}
1262dd48c0beSbipmis; CHECK: !1 = distinct !{!1, !2}
1263dd48c0beSbipmis; CHECK: !2 = distinct !{!2}
1264dd48c0beSbipmis
1265dd48c0beSbipmisdefine i16 @loadCombine_4consecutive_4bit(ptr %p) {
1266dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_4bit(
1267dd48c0beSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i4, ptr [[P:%.*]], i32 1
1268dd48c0beSbipmis; ALL-NEXT:    [[P2:%.*]] = getelementptr i4, ptr [[P]], i32 2
1269dd48c0beSbipmis; ALL-NEXT:    [[P3:%.*]] = getelementptr i4, ptr [[P]], i32 3
1270dd48c0beSbipmis; ALL-NEXT:    [[L1:%.*]] = load i4, ptr [[P]], align 1
1271dd48c0beSbipmis; ALL-NEXT:    [[L2:%.*]] = load i4, ptr [[P1]], align 1
1272dd48c0beSbipmis; ALL-NEXT:    [[L3:%.*]] = load i4, ptr [[P2]], align 1
1273dd48c0beSbipmis; ALL-NEXT:    [[L4:%.*]] = load i4, ptr [[P3]], align 1
1274dd48c0beSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i4 [[L1]] to i16
1275dd48c0beSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i4 [[L2]] to i16
1276dd48c0beSbipmis; ALL-NEXT:    [[E3:%.*]] = zext i4 [[L3]] to i16
1277dd48c0beSbipmis; ALL-NEXT:    [[E4:%.*]] = zext i4 [[L4]] to i16
1278dd48c0beSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i16 [[E2]], 4
1279dd48c0beSbipmis; ALL-NEXT:    [[S3:%.*]] = shl i16 [[E3]], 8
1280dd48c0beSbipmis; ALL-NEXT:    [[S4:%.*]] = shl i16 [[E4]], 12
1281dd48c0beSbipmis; ALL-NEXT:    [[O1:%.*]] = or i16 [[E1]], [[S2]]
1282dd48c0beSbipmis; ALL-NEXT:    [[O2:%.*]] = or i16 [[O1]], [[S3]]
1283dd48c0beSbipmis; ALL-NEXT:    [[O3:%.*]] = or i16 [[O2]], [[S4]]
1284dd48c0beSbipmis; ALL-NEXT:    ret i16 [[O3]]
1285dd48c0beSbipmis;
1286dd48c0beSbipmis  %p1 = getelementptr i4, ptr %p, i32 1
1287dd48c0beSbipmis  %p2 = getelementptr i4, ptr %p, i32 2
1288dd48c0beSbipmis  %p3 = getelementptr i4, ptr %p, i32 3
1289dd48c0beSbipmis  %l1 = load i4, ptr %p
1290dd48c0beSbipmis  %l2 = load i4, ptr %p1
1291dd48c0beSbipmis  %l3 = load i4, ptr %p2
1292dd48c0beSbipmis  %l4 = load i4, ptr %p3
1293dd48c0beSbipmis  %e1 = zext i4 %l1 to i16
1294dd48c0beSbipmis  %e2 = zext i4 %l2 to i16
1295dd48c0beSbipmis  %e3 = zext i4 %l3 to i16
1296dd48c0beSbipmis  %e4 = zext i4 %l4 to i16
1297dd48c0beSbipmis  %s2 = shl i16 %e2, 4
1298dd48c0beSbipmis  %s3 = shl i16 %e3, 8
1299dd48c0beSbipmis  %s4 = shl i16 %e4, 12
1300dd48c0beSbipmis  %o1 = or i16 %e1, %s2
1301dd48c0beSbipmis  %o2 = or i16 %o1, %s3
1302dd48c0beSbipmis  %o3 = or i16 %o2, %s4
1303dd48c0beSbipmis  ret i16 %o3
1304dd48c0beSbipmis}
13051dd7e576Sbipmis
13061dd7e576Sbipmisdefine i32 @loadCombine_4consecutive_rev(ptr %p) {
13073b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_rev(
130838f3e449Sbipmis; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
130938f3e449Sbipmis; LE-NEXT:    ret i32 [[L1]]
13103b49a9fcSbipmis;
13113b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_rev(
13123b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
13133b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
13143b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
13153b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
13163b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
13173b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
13183b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
13193b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
13203b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
13213b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
13223b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
13233b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
13243b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
13253b49a9fcSbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
13263b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[S4]], [[S3]]
13273b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S2]]
13283b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E1]]
13293b49a9fcSbipmis; BE-NEXT:    ret i32 [[O3]]
13301dd7e576Sbipmis;
13311dd7e576Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
13321dd7e576Sbipmis  %p2 = getelementptr i8, ptr %p, i32 2
13331dd7e576Sbipmis  %p3 = getelementptr i8, ptr %p, i32 3
13341dd7e576Sbipmis  %l1 = load i8, ptr %p
13351dd7e576Sbipmis  %l2 = load i8, ptr %p1
13361dd7e576Sbipmis  %l3 = load i8, ptr %p2
13371dd7e576Sbipmis  %l4 = load i8, ptr %p3
13381dd7e576Sbipmis
13391dd7e576Sbipmis  %e1 = zext i8 %l1 to i32
13401dd7e576Sbipmis  %e2 = zext i8 %l2 to i32
13411dd7e576Sbipmis  %e3 = zext i8 %l3 to i32
13421dd7e576Sbipmis  %e4 = zext i8 %l4 to i32
13431dd7e576Sbipmis
13441dd7e576Sbipmis  %s2 = shl i32 %e2, 8
13451dd7e576Sbipmis  %s3 = shl i32 %e3, 16
13461dd7e576Sbipmis  %s4 = shl i32 %e4, 24
13471dd7e576Sbipmis
13481dd7e576Sbipmis  %o1 = or i32 %s4, %s3
13491dd7e576Sbipmis  %o2 = or i32 %o1, %s2
13501dd7e576Sbipmis  %o3 = or i32 %o2, %e1
13511dd7e576Sbipmis  ret i32 %o3
13521dd7e576Sbipmis}
13531dd7e576Sbipmis
13541dd7e576Sbipmisdefine i64 @loadCombine_8consecutive_rev(ptr %p) {
13553b49a9fcSbipmis; LE-LABEL: @loadCombine_8consecutive_rev(
135638f3e449Sbipmis; LE-NEXT:    [[L1:%.*]] = load i64, ptr [[P:%.*]], align 1
135738f3e449Sbipmis; LE-NEXT:    ret i64 [[L1]]
13583b49a9fcSbipmis;
13593b49a9fcSbipmis; BE-LABEL: @loadCombine_8consecutive_rev(
13603b49a9fcSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
13613b49a9fcSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
13623b49a9fcSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
13633b49a9fcSbipmis; BE-NEXT:    [[P4:%.*]] = getelementptr i8, ptr [[P]], i32 4
13643b49a9fcSbipmis; BE-NEXT:    [[P5:%.*]] = getelementptr i8, ptr [[P]], i32 5
13653b49a9fcSbipmis; BE-NEXT:    [[P6:%.*]] = getelementptr i8, ptr [[P]], i32 6
13663b49a9fcSbipmis; BE-NEXT:    [[P7:%.*]] = getelementptr i8, ptr [[P]], i32 7
13673b49a9fcSbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
13683b49a9fcSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
13693b49a9fcSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
13703b49a9fcSbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
13713b49a9fcSbipmis; BE-NEXT:    [[L5:%.*]] = load i8, ptr [[P4]], align 1
13723b49a9fcSbipmis; BE-NEXT:    [[L6:%.*]] = load i8, ptr [[P5]], align 1
13733b49a9fcSbipmis; BE-NEXT:    [[L7:%.*]] = load i8, ptr [[P6]], align 1
13743b49a9fcSbipmis; BE-NEXT:    [[L8:%.*]] = load i8, ptr [[P7]], align 1
13753b49a9fcSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i64
13763b49a9fcSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i64
13773b49a9fcSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i64
13783b49a9fcSbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i64
13793b49a9fcSbipmis; BE-NEXT:    [[E5:%.*]] = zext i8 [[L5]] to i64
13803b49a9fcSbipmis; BE-NEXT:    [[E6:%.*]] = zext i8 [[L6]] to i64
13813b49a9fcSbipmis; BE-NEXT:    [[E7:%.*]] = zext i8 [[L7]] to i64
13823b49a9fcSbipmis; BE-NEXT:    [[E8:%.*]] = zext i8 [[L8]] to i64
13833b49a9fcSbipmis; BE-NEXT:    [[S2:%.*]] = shl i64 [[E2]], 8
13843b49a9fcSbipmis; BE-NEXT:    [[S3:%.*]] = shl i64 [[E3]], 16
13853b49a9fcSbipmis; BE-NEXT:    [[S4:%.*]] = shl i64 [[E4]], 24
13863b49a9fcSbipmis; BE-NEXT:    [[S5:%.*]] = shl i64 [[E5]], 32
13873b49a9fcSbipmis; BE-NEXT:    [[S6:%.*]] = shl i64 [[E6]], 40
13883b49a9fcSbipmis; BE-NEXT:    [[S7:%.*]] = shl i64 [[E7]], 48
13893b49a9fcSbipmis; BE-NEXT:    [[S8:%.*]] = shl i64 [[E8]], 56
13903b49a9fcSbipmis; BE-NEXT:    [[O7:%.*]] = or i64 [[S8]], [[S7]]
13913b49a9fcSbipmis; BE-NEXT:    [[O6:%.*]] = or i64 [[O7]], [[S6]]
13923b49a9fcSbipmis; BE-NEXT:    [[O5:%.*]] = or i64 [[O6]], [[S5]]
13933b49a9fcSbipmis; BE-NEXT:    [[O4:%.*]] = or i64 [[O5]], [[S4]]
13943b49a9fcSbipmis; BE-NEXT:    [[O3:%.*]] = or i64 [[O4]], [[S3]]
13953b49a9fcSbipmis; BE-NEXT:    [[O2:%.*]] = or i64 [[O3]], [[S2]]
13963b49a9fcSbipmis; BE-NEXT:    [[O1:%.*]] = or i64 [[O2]], [[E1]]
13973b49a9fcSbipmis; BE-NEXT:    ret i64 [[O1]]
13981dd7e576Sbipmis;
13991dd7e576Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
14001dd7e576Sbipmis  %p2 = getelementptr i8, ptr %p, i32 2
14011dd7e576Sbipmis  %p3 = getelementptr i8, ptr %p, i32 3
14021dd7e576Sbipmis  %p4 = getelementptr i8, ptr %p, i32 4
14031dd7e576Sbipmis  %p5 = getelementptr i8, ptr %p, i32 5
14041dd7e576Sbipmis  %p6 = getelementptr i8, ptr %p, i32 6
14051dd7e576Sbipmis  %p7 = getelementptr i8, ptr %p, i32 7
14061dd7e576Sbipmis  %l1 = load i8, ptr %p
14071dd7e576Sbipmis  %l2 = load i8, ptr %p1
14081dd7e576Sbipmis  %l3 = load i8, ptr %p2
14091dd7e576Sbipmis  %l4 = load i8, ptr %p3
14101dd7e576Sbipmis  %l5 = load i8, ptr %p4
14111dd7e576Sbipmis  %l6 = load i8, ptr %p5
14121dd7e576Sbipmis  %l7 = load i8, ptr %p6
14131dd7e576Sbipmis  %l8 = load i8, ptr %p7
14141dd7e576Sbipmis
14151dd7e576Sbipmis  %e1 = zext i8 %l1 to i64
14161dd7e576Sbipmis  %e2 = zext i8 %l2 to i64
14171dd7e576Sbipmis  %e3 = zext i8 %l3 to i64
14181dd7e576Sbipmis  %e4 = zext i8 %l4 to i64
14191dd7e576Sbipmis  %e5 = zext i8 %l5 to i64
14201dd7e576Sbipmis  %e6 = zext i8 %l6 to i64
14211dd7e576Sbipmis  %e7 = zext i8 %l7 to i64
14221dd7e576Sbipmis  %e8 = zext i8 %l8 to i64
14231dd7e576Sbipmis
14241dd7e576Sbipmis  %s2 = shl i64 %e2, 8
14251dd7e576Sbipmis  %s3 = shl i64 %e3, 16
14261dd7e576Sbipmis  %s4 = shl i64 %e4, 24
14271dd7e576Sbipmis  %s5 = shl i64 %e5, 32
14281dd7e576Sbipmis  %s6 = shl i64 %e6, 40
14291dd7e576Sbipmis  %s7 = shl i64 %e7, 48
14301dd7e576Sbipmis  %s8 = shl i64 %e8, 56
14311dd7e576Sbipmis
14321dd7e576Sbipmis  %o7 = or i64 %s8, %s7
14331dd7e576Sbipmis  %o6 = or i64 %o7, %s6
14341dd7e576Sbipmis  %o5 = or i64 %o6, %s5
14351dd7e576Sbipmis  %o4 = or i64 %o5, %s4
14361dd7e576Sbipmis  %o3 = or i64 %o4, %s3
14371dd7e576Sbipmis  %o2 = or i64 %o3, %s2
14381dd7e576Sbipmis  %o1 = or i64 %o2, %e1
14391dd7e576Sbipmis  ret i64 %o1
14401dd7e576Sbipmis}
14411dd7e576Sbipmis
14421dd7e576Sbipmisdefine i64 @loadCombine_8consecutive_rev_BE(ptr %p) {
14433b49a9fcSbipmis; LE-LABEL: @loadCombine_8consecutive_rev_BE(
14443b49a9fcSbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
14453b49a9fcSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
14463b49a9fcSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
14473b49a9fcSbipmis; LE-NEXT:    [[P4:%.*]] = getelementptr i8, ptr [[P]], i32 4
14483b49a9fcSbipmis; LE-NEXT:    [[P5:%.*]] = getelementptr i8, ptr [[P]], i32 5
14493b49a9fcSbipmis; LE-NEXT:    [[P6:%.*]] = getelementptr i8, ptr [[P]], i32 6
14503b49a9fcSbipmis; LE-NEXT:    [[P7:%.*]] = getelementptr i8, ptr [[P]], i32 7
14513b49a9fcSbipmis; LE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
14523b49a9fcSbipmis; LE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
14533b49a9fcSbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
14543b49a9fcSbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
14553b49a9fcSbipmis; LE-NEXT:    [[L5:%.*]] = load i8, ptr [[P4]], align 1
14563b49a9fcSbipmis; LE-NEXT:    [[L6:%.*]] = load i8, ptr [[P5]], align 1
14573b49a9fcSbipmis; LE-NEXT:    [[L7:%.*]] = load i8, ptr [[P6]], align 1
14583b49a9fcSbipmis; LE-NEXT:    [[L8:%.*]] = load i8, ptr [[P7]], align 1
14593b49a9fcSbipmis; LE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i64
14603b49a9fcSbipmis; LE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i64
14613b49a9fcSbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i64
14623b49a9fcSbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i64
14633b49a9fcSbipmis; LE-NEXT:    [[E5:%.*]] = zext i8 [[L5]] to i64
14643b49a9fcSbipmis; LE-NEXT:    [[E6:%.*]] = zext i8 [[L6]] to i64
14653b49a9fcSbipmis; LE-NEXT:    [[E7:%.*]] = zext i8 [[L7]] to i64
14663b49a9fcSbipmis; LE-NEXT:    [[E8:%.*]] = zext i8 [[L8]] to i64
14673b49a9fcSbipmis; LE-NEXT:    [[S1:%.*]] = shl i64 [[E1]], 56
14683b49a9fcSbipmis; LE-NEXT:    [[S2:%.*]] = shl i64 [[E2]], 48
14693b49a9fcSbipmis; LE-NEXT:    [[S3:%.*]] = shl i64 [[E3]], 40
14703b49a9fcSbipmis; LE-NEXT:    [[S4:%.*]] = shl i64 [[E4]], 32
14713b49a9fcSbipmis; LE-NEXT:    [[S5:%.*]] = shl i64 [[E5]], 24
14723b49a9fcSbipmis; LE-NEXT:    [[S6:%.*]] = shl i64 [[E6]], 16
14733b49a9fcSbipmis; LE-NEXT:    [[S7:%.*]] = shl i64 [[E7]], 8
14743b49a9fcSbipmis; LE-NEXT:    [[O7:%.*]] = or i64 [[E8]], [[S7]]
14753b49a9fcSbipmis; LE-NEXT:    [[O6:%.*]] = or i64 [[O7]], [[S6]]
14763b49a9fcSbipmis; LE-NEXT:    [[O5:%.*]] = or i64 [[O6]], [[S5]]
14773b49a9fcSbipmis; LE-NEXT:    [[O4:%.*]] = or i64 [[O5]], [[S4]]
14783b49a9fcSbipmis; LE-NEXT:    [[O3:%.*]] = or i64 [[O4]], [[S3]]
14793b49a9fcSbipmis; LE-NEXT:    [[O2:%.*]] = or i64 [[O3]], [[S2]]
14803b49a9fcSbipmis; LE-NEXT:    [[O1:%.*]] = or i64 [[O2]], [[S1]]
14813b49a9fcSbipmis; LE-NEXT:    ret i64 [[O1]]
14823b49a9fcSbipmis;
14833b49a9fcSbipmis; BE-LABEL: @loadCombine_8consecutive_rev_BE(
148438f3e449Sbipmis; BE-NEXT:    [[L1:%.*]] = load i64, ptr [[P:%.*]], align 1
148538f3e449Sbipmis; BE-NEXT:    ret i64 [[L1]]
14861dd7e576Sbipmis;
14871dd7e576Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
14881dd7e576Sbipmis  %p2 = getelementptr i8, ptr %p, i32 2
14891dd7e576Sbipmis  %p3 = getelementptr i8, ptr %p, i32 3
14901dd7e576Sbipmis  %p4 = getelementptr i8, ptr %p, i32 4
14911dd7e576Sbipmis  %p5 = getelementptr i8, ptr %p, i32 5
14921dd7e576Sbipmis  %p6 = getelementptr i8, ptr %p, i32 6
14931dd7e576Sbipmis  %p7 = getelementptr i8, ptr %p, i32 7
14941dd7e576Sbipmis  %l1 = load i8, ptr %p
14951dd7e576Sbipmis  %l2 = load i8, ptr %p1
14961dd7e576Sbipmis  %l3 = load i8, ptr %p2
14971dd7e576Sbipmis  %l4 = load i8, ptr %p3
14981dd7e576Sbipmis  %l5 = load i8, ptr %p4
14991dd7e576Sbipmis  %l6 = load i8, ptr %p5
15001dd7e576Sbipmis  %l7 = load i8, ptr %p6
15011dd7e576Sbipmis  %l8 = load i8, ptr %p7
15021dd7e576Sbipmis
15031dd7e576Sbipmis  %e1 = zext i8 %l1 to i64
15041dd7e576Sbipmis  %e2 = zext i8 %l2 to i64
15051dd7e576Sbipmis  %e3 = zext i8 %l3 to i64
15061dd7e576Sbipmis  %e4 = zext i8 %l4 to i64
15071dd7e576Sbipmis  %e5 = zext i8 %l5 to i64
15081dd7e576Sbipmis  %e6 = zext i8 %l6 to i64
15091dd7e576Sbipmis  %e7 = zext i8 %l7 to i64
15101dd7e576Sbipmis  %e8 = zext i8 %l8 to i64
15111dd7e576Sbipmis
15121dd7e576Sbipmis  %s1 = shl i64 %e1, 56
15131dd7e576Sbipmis  %s2 = shl i64 %e2, 48
15141dd7e576Sbipmis  %s3 = shl i64 %e3, 40
15151dd7e576Sbipmis  %s4 = shl i64 %e4, 32
15161dd7e576Sbipmis  %s5 = shl i64 %e5, 24
15171dd7e576Sbipmis  %s6 = shl i64 %e6, 16
15181dd7e576Sbipmis  %s7 = shl i64 %e7, 8
15191dd7e576Sbipmis
15201dd7e576Sbipmis  %o7 = or i64 %e8, %s7
15211dd7e576Sbipmis  %o6 = or i64 %o7, %s6
15221dd7e576Sbipmis  %o5 = or i64 %o6, %s5
15231dd7e576Sbipmis  %o4 = or i64 %o5, %s4
15241dd7e576Sbipmis  %o3 = or i64 %o4, %s3
15251dd7e576Sbipmis  %o2 = or i64 %o3, %s2
15261dd7e576Sbipmis  %o1 = or i64 %o2, %s1
15271dd7e576Sbipmis  ret i64 %o1
15281dd7e576Sbipmis}
15291dd7e576Sbipmis
15301dd7e576Sbipmisdefine i64 @eggs(ptr noundef readonly %arg) {
15313b49a9fcSbipmis; LE-LABEL: @eggs(
153238f3e449Sbipmis; LE-NEXT:    [[TMP3:%.*]] = load i64, ptr [[ARG:%.*]], align 1
153338f3e449Sbipmis; LE-NEXT:    ret i64 [[TMP3]]
15343b49a9fcSbipmis;
15353b49a9fcSbipmis; BE-LABEL: @eggs(
15363b49a9fcSbipmis; BE-NEXT:    [[TMP3:%.*]] = load i8, ptr [[ARG:%.*]], align 1
15373b49a9fcSbipmis; BE-NEXT:    [[TMP4:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 1
15383b49a9fcSbipmis; BE-NEXT:    [[TMP5:%.*]] = load i8, ptr [[TMP4]], align 1
15393b49a9fcSbipmis; BE-NEXT:    [[TMP6:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 2
15403b49a9fcSbipmis; BE-NEXT:    [[TMP7:%.*]] = load i8, ptr [[TMP6]], align 1
15413b49a9fcSbipmis; BE-NEXT:    [[TMP8:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 3
15423b49a9fcSbipmis; BE-NEXT:    [[TMP9:%.*]] = load i8, ptr [[TMP8]], align 1
15433b49a9fcSbipmis; BE-NEXT:    [[TMP10:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 4
15443b49a9fcSbipmis; BE-NEXT:    [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
15453b49a9fcSbipmis; BE-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 5
15463b49a9fcSbipmis; BE-NEXT:    [[TMP13:%.*]] = load i8, ptr [[TMP12]], align 1
15473b49a9fcSbipmis; BE-NEXT:    [[TMP14:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 6
15483b49a9fcSbipmis; BE-NEXT:    [[TMP15:%.*]] = load i8, ptr [[TMP14]], align 1
15493b49a9fcSbipmis; BE-NEXT:    [[TMP16:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 7
15503b49a9fcSbipmis; BE-NEXT:    [[TMP17:%.*]] = load i8, ptr [[TMP16]], align 1
15513b49a9fcSbipmis; BE-NEXT:    [[TMP18:%.*]] = zext i8 [[TMP17]] to i64
15523b49a9fcSbipmis; BE-NEXT:    [[TMP19:%.*]] = shl nuw i64 [[TMP18]], 56
15533b49a9fcSbipmis; BE-NEXT:    [[TMP20:%.*]] = zext i8 [[TMP15]] to i64
15543b49a9fcSbipmis; BE-NEXT:    [[TMP21:%.*]] = shl nuw nsw i64 [[TMP20]], 48
15553b49a9fcSbipmis; BE-NEXT:    [[TMP22:%.*]] = or i64 [[TMP19]], [[TMP21]]
15563b49a9fcSbipmis; BE-NEXT:    [[TMP23:%.*]] = zext i8 [[TMP13]] to i64
15573b49a9fcSbipmis; BE-NEXT:    [[TMP24:%.*]] = shl nuw nsw i64 [[TMP23]], 40
15583b49a9fcSbipmis; BE-NEXT:    [[TMP25:%.*]] = or i64 [[TMP22]], [[TMP24]]
15593b49a9fcSbipmis; BE-NEXT:    [[TMP26:%.*]] = zext i8 [[TMP11]] to i64
15603b49a9fcSbipmis; BE-NEXT:    [[TMP27:%.*]] = shl nuw nsw i64 [[TMP26]], 32
15613b49a9fcSbipmis; BE-NEXT:    [[TMP28:%.*]] = or i64 [[TMP25]], [[TMP27]]
15623b49a9fcSbipmis; BE-NEXT:    [[TMP29:%.*]] = zext i8 [[TMP9]] to i64
15633b49a9fcSbipmis; BE-NEXT:    [[TMP30:%.*]] = shl nuw nsw i64 [[TMP29]], 24
15643b49a9fcSbipmis; BE-NEXT:    [[TMP31:%.*]] = or i64 [[TMP28]], [[TMP30]]
15653b49a9fcSbipmis; BE-NEXT:    [[TMP32:%.*]] = zext i8 [[TMP7]] to i64
15663b49a9fcSbipmis; BE-NEXT:    [[TMP33:%.*]] = shl nuw nsw i64 [[TMP32]], 16
15673b49a9fcSbipmis; BE-NEXT:    [[TMP34:%.*]] = zext i8 [[TMP5]] to i64
15683b49a9fcSbipmis; BE-NEXT:    [[TMP35:%.*]] = shl nuw nsw i64 [[TMP34]], 8
15693b49a9fcSbipmis; BE-NEXT:    [[TMP36:%.*]] = or i64 [[TMP31]], [[TMP33]]
15703b49a9fcSbipmis; BE-NEXT:    [[TMP37:%.*]] = zext i8 [[TMP3]] to i64
15713b49a9fcSbipmis; BE-NEXT:    [[TMP38:%.*]] = or i64 [[TMP36]], [[TMP35]]
15723b49a9fcSbipmis; BE-NEXT:    [[TMP39:%.*]] = or i64 [[TMP38]], [[TMP37]]
15733b49a9fcSbipmis; BE-NEXT:    ret i64 [[TMP39]]
15741dd7e576Sbipmis;
15751dd7e576Sbipmis  %tmp3 = load i8, ptr %arg, align 1
15761dd7e576Sbipmis  %tmp4 = getelementptr inbounds i8, ptr %arg, i64 1
15771dd7e576Sbipmis  %tmp5 = load i8, ptr %tmp4, align 1
15781dd7e576Sbipmis  %tmp6 = getelementptr inbounds i8, ptr %arg, i64 2
15791dd7e576Sbipmis  %tmp7 = load i8, ptr %tmp6, align 1
15801dd7e576Sbipmis  %tmp8 = getelementptr inbounds i8, ptr %arg, i64 3
15811dd7e576Sbipmis  %tmp9 = load i8, ptr %tmp8, align 1
15821dd7e576Sbipmis  %tmp10 = getelementptr inbounds i8, ptr %arg, i64 4
15831dd7e576Sbipmis  %tmp11 = load i8, ptr %tmp10, align 1
15841dd7e576Sbipmis  %tmp12 = getelementptr inbounds i8, ptr %arg, i64 5
15851dd7e576Sbipmis  %tmp13 = load i8, ptr %tmp12, align 1
15861dd7e576Sbipmis  %tmp14 = getelementptr inbounds i8, ptr %arg, i64 6
15871dd7e576Sbipmis  %tmp15 = load i8, ptr %tmp14, align 1
15881dd7e576Sbipmis  %tmp16 = getelementptr inbounds i8, ptr %arg, i64 7
15891dd7e576Sbipmis  %tmp17 = load i8, ptr %tmp16, align 1
15901dd7e576Sbipmis  %tmp18 = zext i8 %tmp17 to i64
15911dd7e576Sbipmis  %tmp19 = shl nuw i64 %tmp18, 56
15921dd7e576Sbipmis  %tmp20 = zext i8 %tmp15 to i64
15931dd7e576Sbipmis  %tmp21 = shl nuw nsw i64 %tmp20, 48
15941dd7e576Sbipmis  %tmp22 = or i64 %tmp19, %tmp21
15951dd7e576Sbipmis  %tmp23 = zext i8 %tmp13 to i64
15961dd7e576Sbipmis  %tmp24 = shl nuw nsw i64 %tmp23, 40
15971dd7e576Sbipmis  %tmp25 = or i64 %tmp22, %tmp24
15981dd7e576Sbipmis  %tmp26 = zext i8 %tmp11 to i64
15991dd7e576Sbipmis  %tmp27 = shl nuw nsw i64 %tmp26, 32
16001dd7e576Sbipmis  %tmp28 = or i64 %tmp25, %tmp27
16011dd7e576Sbipmis  %tmp29 = zext i8 %tmp9 to i64
16021dd7e576Sbipmis  %tmp30 = shl nuw nsw i64 %tmp29, 24
16031dd7e576Sbipmis  %tmp31 = or i64 %tmp28, %tmp30
16041dd7e576Sbipmis  %tmp32 = zext i8 %tmp7 to i64
16051dd7e576Sbipmis  %tmp33 = shl nuw nsw i64 %tmp32, 16
16061dd7e576Sbipmis  %tmp34 = zext i8 %tmp5 to i64
16071dd7e576Sbipmis  %tmp35 = shl nuw nsw i64 %tmp34, 8
16081dd7e576Sbipmis  %tmp36 = or i64 %tmp31, %tmp33
16091dd7e576Sbipmis  %tmp37 = zext i8 %tmp3 to i64
16101dd7e576Sbipmis  %tmp38 = or i64 %tmp36, %tmp35
16111dd7e576Sbipmis  %tmp39 = or i64 %tmp38, %tmp37
16121dd7e576Sbipmis  ret i64 %tmp39
16131dd7e576Sbipmis}
16148344dfabSbipmis
16158344dfabSbipmisdefine i32 @loadCombine_4consecutive_mixsize1(ptr %p) {
16168344dfabSbipmis; ALL-LABEL: @loadCombine_4consecutive_mixsize1(
16178344dfabSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
16188344dfabSbipmis; ALL-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 3
16198344dfabSbipmis; ALL-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
16208344dfabSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
16218344dfabSbipmis; ALL-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
16228344dfabSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i16 [[L1]] to i32
16238344dfabSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
16248344dfabSbipmis; ALL-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
16258344dfabSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 16
16268344dfabSbipmis; ALL-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 24
16278344dfabSbipmis; ALL-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
16288344dfabSbipmis; ALL-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
16298344dfabSbipmis; ALL-NEXT:    ret i32 [[O2]]
16308344dfabSbipmis;
16318344dfabSbipmis  %p1 = getelementptr i8, ptr %p, i32 2
16328344dfabSbipmis  %p2 = getelementptr i8, ptr %p, i32 3
16338344dfabSbipmis  %l1 = load i16, ptr %p
16348344dfabSbipmis  %l2 = load i8, ptr %p1
16358344dfabSbipmis  %l3 = load i8, ptr %p2
16368344dfabSbipmis
16378344dfabSbipmis  %e1 = zext i16 %l1 to i32
16388344dfabSbipmis  %e2 = zext i8 %l2 to i32
16398344dfabSbipmis  %e3 = zext i8 %l3 to i32
16408344dfabSbipmis
16418344dfabSbipmis  %s2 = shl i32 %e2, 16
16428344dfabSbipmis  %s3 = shl i32 %e3, 24
16438344dfabSbipmis
16448344dfabSbipmis  %o1 = or i32 %e1, %s2
16458344dfabSbipmis  %o2 = or i32 %o1, %s3
16468344dfabSbipmis  ret i32 %o2
16478344dfabSbipmis}
16488344dfabSbipmis
16498344dfabSbipmisdefine i32 @loadCombine_4consecutive_mixsize1_BE(ptr %p) {
16508344dfabSbipmis; ALL-LABEL: @loadCombine_4consecutive_mixsize1_BE(
16518344dfabSbipmis; ALL-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
16528344dfabSbipmis; ALL-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 3
16538344dfabSbipmis; ALL-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
16548344dfabSbipmis; ALL-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
16558344dfabSbipmis; ALL-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
16568344dfabSbipmis; ALL-NEXT:    [[E1:%.*]] = zext i16 [[L1]] to i32
16578344dfabSbipmis; ALL-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
16588344dfabSbipmis; ALL-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
16598344dfabSbipmis; ALL-NEXT:    [[S1:%.*]] = shl i32 [[E1]], 16
16608344dfabSbipmis; ALL-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
16618344dfabSbipmis; ALL-NEXT:    [[O1:%.*]] = or i32 [[S1]], [[S2]]
16628344dfabSbipmis; ALL-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[E3]]
16638344dfabSbipmis; ALL-NEXT:    ret i32 [[O2]]
16648344dfabSbipmis;
16658344dfabSbipmis  %p1 = getelementptr i8, ptr %p, i32 2
16668344dfabSbipmis  %p2 = getelementptr i8, ptr %p, i32 3
16678344dfabSbipmis  %l1 = load i16, ptr %p
16688344dfabSbipmis  %l2 = load i8, ptr %p1
16698344dfabSbipmis  %l3 = load i8, ptr %p2
16708344dfabSbipmis
16718344dfabSbipmis  %e1 = zext i16 %l1 to i32
16728344dfabSbipmis  %e2 = zext i8 %l2 to i32
16738344dfabSbipmis  %e3 = zext i8 %l3 to i32
16748344dfabSbipmis
16758344dfabSbipmis  %s1 = shl i32 %e1, 16
16768344dfabSbipmis  %s2 = shl i32 %e2, 8
16778344dfabSbipmis
16788344dfabSbipmis  %o1 = or i32 %s1, %s2
16798344dfabSbipmis  %o2 = or i32 %o1, %e3
16808344dfabSbipmis  ret i32 %o2
16818344dfabSbipmis}
16828344dfabSbipmis
16838344dfabSbipmisdefine i32 @loadCombine_4consecutive_rev_mixsize1(ptr %p) {
16848344dfabSbipmis; LE-LABEL: @loadCombine_4consecutive_rev_mixsize1(
16858344dfabSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
16868344dfabSbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
16878344dfabSbipmis; LE-NEXT:    [[L2:%.*]] = load i16, ptr [[P2]], align 1
16888344dfabSbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[L2]] to i32
16898344dfabSbipmis; LE-NEXT:    [[TMP2:%.*]] = shl i32 [[TMP1]], 16
16908344dfabSbipmis; LE-NEXT:    [[E1:%.*]] = zext i16 [[L1]] to i32
16918344dfabSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[TMP2]], [[E1]]
16928344dfabSbipmis; LE-NEXT:    ret i32 [[O2]]
16938344dfabSbipmis;
16948344dfabSbipmis; BE-LABEL: @loadCombine_4consecutive_rev_mixsize1(
16958344dfabSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
16968344dfabSbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
16978344dfabSbipmis; BE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
16988344dfabSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P2]], align 1
16998344dfabSbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P3]], align 1
17008344dfabSbipmis; BE-NEXT:    [[E1:%.*]] = zext i16 [[L1]] to i32
17018344dfabSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
17028344dfabSbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
17038344dfabSbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 16
17048344dfabSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 24
17058344dfabSbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[S3]], [[S2]]
17068344dfabSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[E1]]
17078344dfabSbipmis; BE-NEXT:    ret i32 [[O2]]
17088344dfabSbipmis;
17098344dfabSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
17108344dfabSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
17118344dfabSbipmis  %l1 = load i16, ptr %p
17128344dfabSbipmis  %l2 = load i8, ptr %p2
17138344dfabSbipmis  %l3 = load i8, ptr %p3
17148344dfabSbipmis
17158344dfabSbipmis  %e1 = zext i16 %l1 to i32
17168344dfabSbipmis  %e2 = zext i8 %l2 to i32
17178344dfabSbipmis  %e3 = zext i8 %l3 to i32
17188344dfabSbipmis
17198344dfabSbipmis  %s2 = shl i32 %e2, 16
17208344dfabSbipmis  %s3 = shl i32 %e3, 24
17218344dfabSbipmis
17228344dfabSbipmis  %o1 = or i32 %s3, %s2
17238344dfabSbipmis  %o2 = or i32 %o1, %e1
17248344dfabSbipmis  ret i32 %o2
17258344dfabSbipmis}
17268344dfabSbipmis
17278344dfabSbipmisdefine i32 @loadCombine_4consecutive_rev_mixsize1_BE(ptr %p) {
17288344dfabSbipmis; LE-LABEL: @loadCombine_4consecutive_rev_mixsize1_BE(
17298344dfabSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
17308344dfabSbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
17318344dfabSbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
17328344dfabSbipmis; LE-NEXT:    [[L2:%.*]] = load i8, ptr [[P2]], align 1
17338344dfabSbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P3]], align 1
17348344dfabSbipmis; LE-NEXT:    [[E1:%.*]] = zext i16 [[L1]] to i32
17358344dfabSbipmis; LE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
17368344dfabSbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
17378344dfabSbipmis; LE-NEXT:    [[S1:%.*]] = shl i32 [[E1]], 16
17388344dfabSbipmis; LE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
17398344dfabSbipmis; LE-NEXT:    [[O1:%.*]] = or i32 [[E3]], [[S2]]
17408344dfabSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S1]]
17418344dfabSbipmis; LE-NEXT:    ret i32 [[O2]]
17428344dfabSbipmis;
17438344dfabSbipmis; BE-LABEL: @loadCombine_4consecutive_rev_mixsize1_BE(
17448344dfabSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
17458344dfabSbipmis; BE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
17468344dfabSbipmis; BE-NEXT:    [[L2:%.*]] = load i16, ptr [[P2]], align 1
17478344dfabSbipmis; BE-NEXT:    [[TMP1:%.*]] = zext i16 [[L2]] to i32
17488344dfabSbipmis; BE-NEXT:    [[E1:%.*]] = zext i16 [[L1]] to i32
17498344dfabSbipmis; BE-NEXT:    [[S1:%.*]] = shl i32 [[E1]], 16
17508344dfabSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[TMP1]], [[S1]]
17518344dfabSbipmis; BE-NEXT:    ret i32 [[O2]]
17528344dfabSbipmis;
17538344dfabSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
17548344dfabSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
17558344dfabSbipmis  %l1 = load i16, ptr %p
17568344dfabSbipmis  %l2 = load i8, ptr %p2
17578344dfabSbipmis  %l3 = load i8, ptr %p3
17588344dfabSbipmis
17598344dfabSbipmis  %e1 = zext i16 %l1 to i32
17608344dfabSbipmis  %e2 = zext i8 %l2 to i32
17618344dfabSbipmis  %e3 = zext i8 %l3 to i32
17628344dfabSbipmis
17638344dfabSbipmis  %s1 = shl i32 %e1, 16
17648344dfabSbipmis  %s2 = shl i32 %e2, 8
17658344dfabSbipmis
17668344dfabSbipmis  %o1 = or i32 %e3, %s2
17678344dfabSbipmis  %o2 = or i32 %o1, %s1
17688344dfabSbipmis  ret i32 %o2
17698344dfabSbipmis}
17708344dfabSbipmis
17718344dfabSbipmisdefine i32 @loadCombine_4consecutive_mixsize2(ptr %p) {
17728344dfabSbipmis; LE-LABEL: @loadCombine_4consecutive_mixsize2(
17738344dfabSbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
17748344dfabSbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
17758344dfabSbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[L1]] to i32
17768344dfabSbipmis; LE-NEXT:    [[L3:%.*]] = load i16, ptr [[P2]], align 2
17778344dfabSbipmis; LE-NEXT:    [[E3:%.*]] = zext i16 [[L3]] to i32
17788344dfabSbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
17798344dfabSbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[TMP1]], [[S3]]
17808344dfabSbipmis; LE-NEXT:    ret i32 [[O2]]
17818344dfabSbipmis;
17828344dfabSbipmis; BE-LABEL: @loadCombine_4consecutive_mixsize2(
17838344dfabSbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
17848344dfabSbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
17858344dfabSbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
17868344dfabSbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
17878344dfabSbipmis; BE-NEXT:    [[L3:%.*]] = load i16, ptr [[P2]], align 2
17888344dfabSbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
17898344dfabSbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
17908344dfabSbipmis; BE-NEXT:    [[E3:%.*]] = zext i16 [[L3]] to i32
17918344dfabSbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
17928344dfabSbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
17938344dfabSbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
17948344dfabSbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
17958344dfabSbipmis; BE-NEXT:    ret i32 [[O2]]
17968344dfabSbipmis;
17978344dfabSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
17988344dfabSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
17998344dfabSbipmis  %l1 = load i8, ptr %p
18008344dfabSbipmis  %l2 = load i8, ptr %p1
18018344dfabSbipmis  %l3 = load i16, ptr %p2
18028344dfabSbipmis
18038344dfabSbipmis  %e1 = zext i8 %l1 to i32
18048344dfabSbipmis  %e2 = zext i8 %l2 to i32
18058344dfabSbipmis  %e3 = zext i16 %l3 to i32
18068344dfabSbipmis
18078344dfabSbipmis  %s2 = shl i32 %e2, 8
18088344dfabSbipmis  %s3 = shl i32 %e3, 16
18098344dfabSbipmis
18108344dfabSbipmis  %o1 = or i32 %e1, %s2
18118344dfabSbipmis  %o2 = or i32 %o1, %s3
18128344dfabSbipmis  ret i32 %o2
18138344dfabSbipmis}
18148344dfabSbipmis
18158344dfabSbipmisdefine i32 @loadCombine_4consecutive_lower_index_comes_before(ptr %p) {
181638f3e449Sbipmis; LE-LABEL: @loadCombine_4consecutive_lower_index_comes_before(
181738f3e449Sbipmis; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
181838f3e449Sbipmis; LE-NEXT:    ret i32 [[L1]]
181938f3e449Sbipmis;
182038f3e449Sbipmis; BE-LABEL: @loadCombine_4consecutive_lower_index_comes_before(
182138f3e449Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
182238f3e449Sbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
182338f3e449Sbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
182438f3e449Sbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
182538f3e449Sbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
182638f3e449Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
182738f3e449Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
182838f3e449Sbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
182938f3e449Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
183038f3e449Sbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
183138f3e449Sbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
183238f3e449Sbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
183338f3e449Sbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
183438f3e449Sbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
183538f3e449Sbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
183638f3e449Sbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
183738f3e449Sbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
183838f3e449Sbipmis; BE-NEXT:    ret i32 [[O3]]
18398344dfabSbipmis;
18408344dfabSbipmis  %p1 = getelementptr i8, ptr %p, i32 1
18418344dfabSbipmis  %p2 = getelementptr i8, ptr %p, i32 2
18428344dfabSbipmis  %p3 = getelementptr i8, ptr %p, i32 3
18438344dfabSbipmis  %l4 = load i8, ptr %p3
18448344dfabSbipmis  %l3 = load i8, ptr %p2
18458344dfabSbipmis  %l2 = load i8, ptr %p1
18468344dfabSbipmis  %l1 = load i8, ptr %p
18478344dfabSbipmis
18488344dfabSbipmis  %e1 = zext i8 %l1 to i32
18498344dfabSbipmis  %e2 = zext i8 %l2 to i32
18508344dfabSbipmis  %e3 = zext i8 %l3 to i32
18518344dfabSbipmis  %e4 = zext i8 %l4 to i32
18528344dfabSbipmis
18538344dfabSbipmis  %s2 = shl i32 %e2, 8
18548344dfabSbipmis  %s3 = shl i32 %e3, 16
18558344dfabSbipmis  %s4 = shl i32 %e4, 24
18568344dfabSbipmis
18578344dfabSbipmis  %o1 = or i32 %e1, %s2
18588344dfabSbipmis  %o2 = or i32 %o1, %s3
18598344dfabSbipmis  %o3 = or i32 %o2, %s4
18608344dfabSbipmis  ret i32 %o3
18618344dfabSbipmis}
18628344dfabSbipmis
1863cc7b03b0Sbipmisdefine i16 @loadCombine_2consecutive_badinsert(ptr %p) {
1864e9393789Sbipmis; LE-LABEL: @loadCombine_2consecutive_badinsert(
1865e9393789Sbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1866e9393789Sbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
1867e9393789Sbipmis; LE-NEXT:    store i8 0, ptr [[P1]], align 1
1868e9393789Sbipmis; LE-NEXT:    ret i16 [[L1]]
1869e9393789Sbipmis;
1870e9393789Sbipmis; BE-LABEL: @loadCombine_2consecutive_badinsert(
1871e9393789Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1872e9393789Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
1873e9393789Sbipmis; BE-NEXT:    store i8 0, ptr [[P1]], align 1
1874e9393789Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
1875e9393789Sbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i16
1876e9393789Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i16
1877e9393789Sbipmis; BE-NEXT:    [[S2:%.*]] = shl i16 [[E2]], 8
1878e9393789Sbipmis; BE-NEXT:    [[O1:%.*]] = or i16 [[E1]], [[S2]]
1879e9393789Sbipmis; BE-NEXT:    ret i16 [[O1]]
1880cc7b03b0Sbipmis;
1881cc7b03b0Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
1882cc7b03b0Sbipmis  %l2 = load i8, ptr %p1
1883cc7b03b0Sbipmis  store i8 0, ptr %p1, align 1
1884cc7b03b0Sbipmis  %l1 = load i8, ptr %p
1885cc7b03b0Sbipmis  %e1 = zext i8 %l1 to i16
1886cc7b03b0Sbipmis  %e2 = zext i8 %l2 to i16
1887cc7b03b0Sbipmis  %s2 = shl i16 %e2, 8
1888cc7b03b0Sbipmis  %o1 = or i16 %e1, %s2
1889cc7b03b0Sbipmis  ret i16 %o1
1890cc7b03b0Sbipmis}
1891cc7b03b0Sbipmis
1892cc7b03b0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert(ptr %p) {
1893e9393789Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert(
1894e9393789Sbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1895e9393789Sbipmis; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[P]], align 1
1896e9393789Sbipmis; LE-NEXT:    store i8 0, ptr [[P1]], align 1
1897e9393789Sbipmis; LE-NEXT:    ret i32 [[L1]]
1898e9393789Sbipmis;
1899e9393789Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert(
1900e9393789Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1901e9393789Sbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
1902e9393789Sbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
1903e9393789Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
1904e9393789Sbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
1905e9393789Sbipmis; BE-NEXT:    store i8 0, ptr [[P1]], align 1
1906e9393789Sbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
1907e9393789Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
1908e9393789Sbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
1909e9393789Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
1910e9393789Sbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
1911e9393789Sbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
1912e9393789Sbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
1913e9393789Sbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
1914e9393789Sbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
1915e9393789Sbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
1916e9393789Sbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
1917e9393789Sbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
1918e9393789Sbipmis; BE-NEXT:    ret i32 [[O3]]
1919cc7b03b0Sbipmis;
1920cc7b03b0Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
1921cc7b03b0Sbipmis  %p2 = getelementptr i8, ptr %p, i32 2
1922cc7b03b0Sbipmis  %p3 = getelementptr i8, ptr %p, i32 3
1923cc7b03b0Sbipmis  %l2 = load i8, ptr %p1
1924cc7b03b0Sbipmis  %l3 = load i8, ptr %p2
1925cc7b03b0Sbipmis  store i8 0, ptr %p1, align 1
1926cc7b03b0Sbipmis  %l4 = load i8, ptr %p3
1927cc7b03b0Sbipmis  %l1 = load i8, ptr %p
1928cc7b03b0Sbipmis
1929cc7b03b0Sbipmis  %e1 = zext i8 %l1 to i32
1930cc7b03b0Sbipmis  %e2 = zext i8 %l2 to i32
1931cc7b03b0Sbipmis  %e3 = zext i8 %l3 to i32
1932cc7b03b0Sbipmis  %e4 = zext i8 %l4 to i32
1933cc7b03b0Sbipmis
1934cc7b03b0Sbipmis  %s2 = shl i32 %e2, 8
1935cc7b03b0Sbipmis  %s3 = shl i32 %e3, 16
1936cc7b03b0Sbipmis  %s4 = shl i32 %e4, 24
1937cc7b03b0Sbipmis
1938cc7b03b0Sbipmis  %o1 = or i32 %e1, %s2
1939cc7b03b0Sbipmis  %o2 = or i32 %o1, %s3
1940cc7b03b0Sbipmis  %o3 = or i32 %o2, %s4
1941cc7b03b0Sbipmis  ret i32 %o3
1942cc7b03b0Sbipmis}
19433ee18822Sbipmis
19443ee18822Sbipmisdefine i32 @loadCombine_4consecutive_badinsert2(ptr %p) {
1945e9393789Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert2(
1946e9393789Sbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
1947e9393789Sbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
1948e9393789Sbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
1949e9393789Sbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[L1]] to i32
1950e9393789Sbipmis; LE-NEXT:    store i8 0, ptr [[P3]], align 1
1951e9393789Sbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
1952e9393789Sbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
1953e9393789Sbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
1954e9393789Sbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
1955e9393789Sbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
1956e9393789Sbipmis; LE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
1957e9393789Sbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[TMP1]], [[S3]]
1958e9393789Sbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
1959e9393789Sbipmis; LE-NEXT:    ret i32 [[O3]]
1960e9393789Sbipmis;
1961e9393789Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert2(
1962e9393789Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1963e9393789Sbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
1964e9393789Sbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
1965e9393789Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
1966e9393789Sbipmis; BE-NEXT:    store i8 0, ptr [[P3]], align 1
1967e9393789Sbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
1968e9393789Sbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
1969e9393789Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
1970e9393789Sbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
1971e9393789Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
1972e9393789Sbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
1973e9393789Sbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
1974e9393789Sbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
1975e9393789Sbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
1976e9393789Sbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
1977e9393789Sbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
1978e9393789Sbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
1979e9393789Sbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
1980e9393789Sbipmis; BE-NEXT:    ret i32 [[O3]]
19813ee18822Sbipmis;
19823ee18822Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
19833ee18822Sbipmis  %p2 = getelementptr i8, ptr %p, i32 2
19843ee18822Sbipmis  %p3 = getelementptr i8, ptr %p, i32 3
19853ee18822Sbipmis  %l2 = load i8, ptr %p1
19863ee18822Sbipmis  store i8 0, ptr %p3, align 1
19873ee18822Sbipmis  %l3 = load i8, ptr %p2
19883ee18822Sbipmis  %l4 = load i8, ptr %p3
19893ee18822Sbipmis  %l1 = load i8, ptr %p
19903ee18822Sbipmis
19913ee18822Sbipmis  %e1 = zext i8 %l1 to i32
19923ee18822Sbipmis  %e2 = zext i8 %l2 to i32
19933ee18822Sbipmis  %e3 = zext i8 %l3 to i32
19943ee18822Sbipmis  %e4 = zext i8 %l4 to i32
19953ee18822Sbipmis
19963ee18822Sbipmis  %s2 = shl i32 %e2, 8
19973ee18822Sbipmis  %s3 = shl i32 %e3, 16
19983ee18822Sbipmis  %s4 = shl i32 %e4, 24
19993ee18822Sbipmis
20003ee18822Sbipmis  %o1 = or i32 %e1, %s2
20013ee18822Sbipmis  %o2 = or i32 %o1, %s3
20023ee18822Sbipmis  %o3 = or i32 %o2, %s4
20033ee18822Sbipmis  ret i32 %o3
20043ee18822Sbipmis}
2005ee53abb0Sbipmis
2006ee53abb0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert3(ptr %p) {
2007ee53abb0Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert3(
2008*f68b0e36SAntonio Frighetto; LE-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1
2009cbc50ba1Sbipmis; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[TMP1]], align 1
2010ee53abb0Sbipmis; LE-NEXT:    ret i32 [[L1]]
2011ee53abb0Sbipmis;
2012ee53abb0Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert3(
2013ee53abb0Sbipmis; BE-NEXT:    [[P4:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 4
2014ee53abb0Sbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P4]], align 1
2015ee53abb0Sbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
2016ee53abb0Sbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
2017ee53abb0Sbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
2018ee53abb0Sbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P3]], align 1
2019ee53abb0Sbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
2020ee53abb0Sbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
2021ee53abb0Sbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
2022ee53abb0Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P2]], align 1
2023ee53abb0Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
2024ee53abb0Sbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
2025ee53abb0Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P]], i32 1
2026ee53abb0Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P1]], align 1
2027ee53abb0Sbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
2028ee53abb0Sbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
2029ee53abb0Sbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
2030ee53abb0Sbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
2031ee53abb0Sbipmis; BE-NEXT:    ret i32 [[O3]]
2032ee53abb0Sbipmis;
2033ee53abb0Sbipmis  %p4 = getelementptr i8, ptr %p, i32 4
2034ee53abb0Sbipmis  %l4 = load i8, ptr %p4
2035ee53abb0Sbipmis  %e4 = zext i8 %l4 to i32
2036ee53abb0Sbipmis  %s4 = shl i32 %e4, 24
2037ee53abb0Sbipmis
2038ee53abb0Sbipmis  %p3 = getelementptr i8, ptr %p, i32 3
2039ee53abb0Sbipmis  %l3 = load i8, ptr %p3
2040ee53abb0Sbipmis  %e3 = zext i8 %l3 to i32
2041ee53abb0Sbipmis  %s3 = shl i32 %e3, 16
2042ee53abb0Sbipmis
2043ee53abb0Sbipmis  %p2 = getelementptr i8, ptr %p, i32 2
2044ee53abb0Sbipmis  %l2 = load i8, ptr %p2
2045ee53abb0Sbipmis  %e2 = zext i8 %l2 to i32
2046ee53abb0Sbipmis  %s2 = shl i32 %e2, 8
2047ee53abb0Sbipmis
2048ee53abb0Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
2049ee53abb0Sbipmis  %l1 = load i8, ptr %p1
2050ee53abb0Sbipmis  %e1 = zext i8 %l1 to i32
2051ee53abb0Sbipmis
2052ee53abb0Sbipmis  %o1 = or i32 %e1, %s2
2053ee53abb0Sbipmis  %o2 = or i32 %o1, %s3
2054ee53abb0Sbipmis  %o3 = or i32 %o2, %s4
2055ee53abb0Sbipmis  ret i32 %o3
2056ee53abb0Sbipmis}
2057ee53abb0Sbipmis
2058ee53abb0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert4(ptr %p) {
2059ee53abb0Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert4(
2060ee53abb0Sbipmis; LE-NEXT:  entry:
2061ee53abb0Sbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1
2062ee53abb0Sbipmis; LE-NEXT:    [[C1:%.*]] = load i8, ptr [[P1]], align 1
2063ee53abb0Sbipmis; LE-NEXT:    [[CMP:%.*]] = icmp eq i8 [[C1]], 0
2064ee53abb0Sbipmis; LE-NEXT:    br i1 [[CMP]], label [[END:%.*]], label [[BB2:%.*]]
2065ee53abb0Sbipmis; LE:       bb2:
2066ee53abb0Sbipmis; LE-NEXT:    [[L1:%.*]] = load i32, ptr [[P1]], align 1
2067ee53abb0Sbipmis; LE-NEXT:    br label [[END]]
2068ee53abb0Sbipmis; LE:       end:
2069ee53abb0Sbipmis; LE-NEXT:    [[COND:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[L1]], [[BB2]] ]
2070ee53abb0Sbipmis; LE-NEXT:    ret i32 [[COND]]
2071ee53abb0Sbipmis;
2072ee53abb0Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert4(
2073ee53abb0Sbipmis; BE-NEXT:  entry:
2074ee53abb0Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1
2075ee53abb0Sbipmis; BE-NEXT:    [[C1:%.*]] = load i8, ptr [[P1]], align 1
2076ee53abb0Sbipmis; BE-NEXT:    [[CMP:%.*]] = icmp eq i8 [[C1]], 0
2077ee53abb0Sbipmis; BE-NEXT:    br i1 [[CMP]], label [[END:%.*]], label [[BB2:%.*]]
2078ee53abb0Sbipmis; BE:       bb2:
2079ee53abb0Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P1]], align 1
2080ee53abb0Sbipmis; BE-NEXT:    [[C2:%.*]] = zext i8 [[L1]] to i32
2081ee53abb0Sbipmis; BE-NEXT:    [[P4:%.*]] = getelementptr i8, ptr [[P]], i64 4
2082ee53abb0Sbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P4]], align 1
2083ee53abb0Sbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
2084ee53abb0Sbipmis; BE-NEXT:    [[S4:%.*]] = shl nuw i32 [[E4]], 24
2085ee53abb0Sbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i64 3
2086ee53abb0Sbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P3]], align 1
2087ee53abb0Sbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
2088ee53abb0Sbipmis; BE-NEXT:    [[S3:%.*]] = shl nuw nsw i32 [[E3]], 16
2089ee53abb0Sbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i64 2
2090ee53abb0Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P2]], align 1
2091ee53abb0Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
2092ee53abb0Sbipmis; BE-NEXT:    [[S2:%.*]] = shl nuw nsw i32 [[E2]], 8
2093ee53abb0Sbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[S2]], [[C2]]
2094ee53abb0Sbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
2095ee53abb0Sbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
2096ee53abb0Sbipmis; BE-NEXT:    br label [[END]]
2097ee53abb0Sbipmis; BE:       end:
2098ee53abb0Sbipmis; BE-NEXT:    [[COND:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[O3]], [[BB2]] ]
2099ee53abb0Sbipmis; BE-NEXT:    ret i32 [[COND]]
2100ee53abb0Sbipmis;
2101ee53abb0Sbipmisentry:
2102ee53abb0Sbipmis  %p1 = getelementptr i8, ptr %p, i64 1
2103ee53abb0Sbipmis  %c1 = load i8, ptr %p1, align 1
2104ee53abb0Sbipmis  %cmp = icmp eq i8 %c1, 0
2105ee53abb0Sbipmis  br i1 %cmp, label %end, label %bb2
2106ee53abb0Sbipmis
2107ee53abb0Sbipmisbb2:
2108ee53abb0Sbipmis  %l1 = load i8, ptr %p1, align 1
2109ee53abb0Sbipmis  %c2 = zext i8 %l1 to i32
2110ee53abb0Sbipmis  %p4 = getelementptr i8, ptr %p, i64 4
2111ee53abb0Sbipmis  %l4 = load i8, ptr %p4, align 1
2112ee53abb0Sbipmis  %e4 = zext i8 %l4 to i32
2113ee53abb0Sbipmis  %s4 = shl nuw i32 %e4, 24
2114ee53abb0Sbipmis  %p3 = getelementptr i8, ptr %p, i64 3
2115ee53abb0Sbipmis  %l3 = load i8, ptr %p3, align 1
2116ee53abb0Sbipmis  %e3 = zext i8 %l3 to i32
2117ee53abb0Sbipmis  %s3 = shl nuw nsw i32 %e3, 16
2118ee53abb0Sbipmis  %p2 = getelementptr i8, ptr %p, i64 2
2119ee53abb0Sbipmis  %l2 = load i8, ptr %p2, align 1
2120ee53abb0Sbipmis  %e2 = zext i8 %l2 to i32
2121ee53abb0Sbipmis  %s2 = shl nuw nsw i32 %e2, 8
2122ee53abb0Sbipmis  %o1 = or i32 %s2, %c2
2123ee53abb0Sbipmis  %o2 = or i32 %o1, %s3
2124ee53abb0Sbipmis  %o3 = or i32 %o2, %s4
2125ee53abb0Sbipmis  br label %end
2126ee53abb0Sbipmis
2127ee53abb0Sbipmisend:
2128ee53abb0Sbipmis  %cond = phi i32 [ 0, %entry ], [ %o3, %bb2 ]
2129ee53abb0Sbipmis  ret i32 %cond
2130ee53abb0Sbipmis}
2131ee53abb0Sbipmis
2132ee53abb0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert5(ptr %p) {
2133ee53abb0Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert5(
2134ee53abb0Sbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
2135ee53abb0Sbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
2136ee53abb0Sbipmis; LE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
2137ee53abb0Sbipmis; LE-NEXT:    store i8 0, ptr [[P2]], align 1
2138ee53abb0Sbipmis; LE-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 1
2139ee53abb0Sbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[L1]] to i32
2140ee53abb0Sbipmis; LE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
2141ee53abb0Sbipmis; LE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
2142ee53abb0Sbipmis; LE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
2143ee53abb0Sbipmis; LE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
2144ee53abb0Sbipmis; LE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
2145ee53abb0Sbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[TMP1]], [[S3]]
2146ee53abb0Sbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
2147ee53abb0Sbipmis; LE-NEXT:    ret i32 [[O3]]
2148ee53abb0Sbipmis;
2149ee53abb0Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert5(
2150ee53abb0Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
2151ee53abb0Sbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
2152ee53abb0Sbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
2153ee53abb0Sbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
2154ee53abb0Sbipmis; BE-NEXT:    store i8 0, ptr [[P2]], align 1
2155ee53abb0Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
2156ee53abb0Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
2157ee53abb0Sbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
2158ee53abb0Sbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
2159ee53abb0Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
2160ee53abb0Sbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
2161ee53abb0Sbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
2162ee53abb0Sbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
2163ee53abb0Sbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
2164ee53abb0Sbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
2165ee53abb0Sbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[E1]], [[S2]]
2166ee53abb0Sbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S3]]
2167ee53abb0Sbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[S4]]
2168ee53abb0Sbipmis; BE-NEXT:    ret i32 [[O3]]
2169ee53abb0Sbipmis;
2170ee53abb0Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
2171ee53abb0Sbipmis  %p2 = getelementptr i8, ptr %p, i32 2
2172ee53abb0Sbipmis  %p3 = getelementptr i8, ptr %p, i32 3
2173ee53abb0Sbipmis  %l4 = load i8, ptr %p3
2174ee53abb0Sbipmis  store i8 0, ptr %p2, align 1
2175ee53abb0Sbipmis  %l1 = load i8, ptr %p
2176ee53abb0Sbipmis  %l2 = load i8, ptr %p1
2177ee53abb0Sbipmis  %l3 = load i8, ptr %p2
2178ee53abb0Sbipmis
2179ee53abb0Sbipmis  %e1 = zext i8 %l1 to i32
2180ee53abb0Sbipmis  %e2 = zext i8 %l2 to i32
2181ee53abb0Sbipmis  %e3 = zext i8 %l3 to i32
2182ee53abb0Sbipmis  %e4 = zext i8 %l4 to i32
2183ee53abb0Sbipmis
2184ee53abb0Sbipmis  %s2 = shl i32 %e2, 8
2185ee53abb0Sbipmis  %s3 = shl i32 %e3, 16
2186ee53abb0Sbipmis  %s4 = shl i32 %e4, 24
2187ee53abb0Sbipmis
2188ee53abb0Sbipmis  %o1 = or i32 %e1, %s2
2189ee53abb0Sbipmis  %o2 = or i32 %o1, %s3
2190ee53abb0Sbipmis  %o3 = or i32 %o2, %s4
2191ee53abb0Sbipmis  ret i32 %o3
2192ee53abb0Sbipmis}
2193ee53abb0Sbipmis
2194ee53abb0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert6(ptr %p) {
2195ee53abb0Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert6(
2196ee53abb0Sbipmis; LE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
2197ee53abb0Sbipmis; LE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
2198ee53abb0Sbipmis; LE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
2199ee53abb0Sbipmis; LE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
2200ee53abb0Sbipmis; LE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
2201ee53abb0Sbipmis; LE-NEXT:    store i8 0, ptr [[P3]], align 1
2202ee53abb0Sbipmis; LE-NEXT:    [[L3:%.*]] = load i16, ptr [[P2]], align 1
2203ee53abb0Sbipmis; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[L3]] to i32
2204ee53abb0Sbipmis; LE-NEXT:    [[TMP2:%.*]] = shl i32 [[TMP1]], 16
2205ee53abb0Sbipmis; LE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
2206ee53abb0Sbipmis; LE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
2207ee53abb0Sbipmis; LE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
2208ee53abb0Sbipmis; LE-NEXT:    [[O2:%.*]] = or i32 [[TMP2]], [[S2]]
2209ee53abb0Sbipmis; LE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E1]]
2210ee53abb0Sbipmis; LE-NEXT:    ret i32 [[O3]]
2211ee53abb0Sbipmis;
2212ee53abb0Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert6(
2213ee53abb0Sbipmis; BE-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
2214ee53abb0Sbipmis; BE-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
2215ee53abb0Sbipmis; BE-NEXT:    [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
2216ee53abb0Sbipmis; BE-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
2217ee53abb0Sbipmis; BE-NEXT:    [[L2:%.*]] = load i8, ptr [[P1]], align 1
2218ee53abb0Sbipmis; BE-NEXT:    store i8 0, ptr [[P3]], align 1
2219ee53abb0Sbipmis; BE-NEXT:    [[L3:%.*]] = load i8, ptr [[P2]], align 1
2220ee53abb0Sbipmis; BE-NEXT:    [[L4:%.*]] = load i8, ptr [[P3]], align 1
2221ee53abb0Sbipmis; BE-NEXT:    [[E1:%.*]] = zext i8 [[L1]] to i32
2222ee53abb0Sbipmis; BE-NEXT:    [[E2:%.*]] = zext i8 [[L2]] to i32
2223ee53abb0Sbipmis; BE-NEXT:    [[E3:%.*]] = zext i8 [[L3]] to i32
2224ee53abb0Sbipmis; BE-NEXT:    [[E4:%.*]] = zext i8 [[L4]] to i32
2225ee53abb0Sbipmis; BE-NEXT:    [[S2:%.*]] = shl i32 [[E2]], 8
2226ee53abb0Sbipmis; BE-NEXT:    [[S3:%.*]] = shl i32 [[E3]], 16
2227ee53abb0Sbipmis; BE-NEXT:    [[S4:%.*]] = shl i32 [[E4]], 24
2228ee53abb0Sbipmis; BE-NEXT:    [[O1:%.*]] = or i32 [[S3]], [[S4]]
2229ee53abb0Sbipmis; BE-NEXT:    [[O2:%.*]] = or i32 [[O1]], [[S2]]
2230ee53abb0Sbipmis; BE-NEXT:    [[O3:%.*]] = or i32 [[O2]], [[E1]]
2231ee53abb0Sbipmis; BE-NEXT:    ret i32 [[O3]]
2232ee53abb0Sbipmis;
2233ee53abb0Sbipmis  %p1 = getelementptr i8, ptr %p, i32 1
2234ee53abb0Sbipmis  %p2 = getelementptr i8, ptr %p, i32 2
2235ee53abb0Sbipmis  %p3 = getelementptr i8, ptr %p, i32 3
2236ee53abb0Sbipmis  %l1 = load i8, ptr %p
2237ee53abb0Sbipmis  %l2 = load i8, ptr %p1
2238ee53abb0Sbipmis  store i8 0, ptr %p3, align 1
2239ee53abb0Sbipmis  %l3 = load i8, ptr %p2
2240ee53abb0Sbipmis  %l4 = load i8, ptr %p3
2241ee53abb0Sbipmis
2242ee53abb0Sbipmis  %e1 = zext i8 %l1 to i32
2243ee53abb0Sbipmis  %e2 = zext i8 %l2 to i32
2244ee53abb0Sbipmis  %e3 = zext i8 %l3 to i32
2245ee53abb0Sbipmis  %e4 = zext i8 %l4 to i32
2246ee53abb0Sbipmis
2247ee53abb0Sbipmis  %s2 = shl i32 %e2, 8
2248ee53abb0Sbipmis  %s3 = shl i32 %e3, 16
2249ee53abb0Sbipmis  %s4 = shl i32 %e4, 24
2250ee53abb0Sbipmis
2251ee53abb0Sbipmis  %o1 = or i32 %s3, %s4
2252ee53abb0Sbipmis  %o2 = or i32 %o1, %s2
2253ee53abb0Sbipmis  %o3 = or i32 %o2, %e1
2254ee53abb0Sbipmis  ret i32 %o3
2255ee53abb0Sbipmis}
2256ed443d81SArthur Eubanks
2257ed443d81SArthur Eubanksdefine i64 @loadCombine_nonConstShift1(ptr %arg, i8 %b) {
2258ed443d81SArthur Eubanks; ALL-LABEL: @loadCombine_nonConstShift1(
2259ed443d81SArthur Eubanks; ALL-NEXT:    [[G1:%.*]] = getelementptr i8, ptr [[ARG:%.*]], i64 1
2260ed443d81SArthur Eubanks; ALL-NEXT:    [[LD0:%.*]] = load i8, ptr [[ARG]], align 1
2261ed443d81SArthur Eubanks; ALL-NEXT:    [[LD1:%.*]] = load i8, ptr [[G1]], align 1
2262ed443d81SArthur Eubanks; ALL-NEXT:    [[Z0:%.*]] = zext i8 [[LD0]] to i64
2263ed443d81SArthur Eubanks; ALL-NEXT:    [[Z1:%.*]] = zext i8 [[LD1]] to i64
2264ed443d81SArthur Eubanks; ALL-NEXT:    [[Z6:%.*]] = zext i8 [[B:%.*]] to i64
2265ed443d81SArthur Eubanks; ALL-NEXT:    [[S0:%.*]] = shl i64 [[Z0]], [[Z6]]
2266ed443d81SArthur Eubanks; ALL-NEXT:    [[S1:%.*]] = shl i64 [[Z1]], 8
2267ed443d81SArthur Eubanks; ALL-NEXT:    [[O7:%.*]] = or i64 [[S0]], [[S1]]
2268ed443d81SArthur Eubanks; ALL-NEXT:    ret i64 [[O7]]
2269ed443d81SArthur Eubanks;
2270ed443d81SArthur Eubanks  %g1 = getelementptr i8, ptr %arg, i64 1
2271ed443d81SArthur Eubanks  %ld0 = load i8, ptr %arg, align 1
2272ed443d81SArthur Eubanks  %ld1 = load i8, ptr %g1, align 1
2273ed443d81SArthur Eubanks  %z0 = zext i8 %ld0 to i64
2274ed443d81SArthur Eubanks  %z1 = zext i8 %ld1 to i64
2275ed443d81SArthur Eubanks  %z6 = zext i8 %b to i64
2276ed443d81SArthur Eubanks  %s0 = shl i64 %z0, %z6
2277ed443d81SArthur Eubanks  %s1 = shl i64 %z1, 8
2278ed443d81SArthur Eubanks  %o7 = or i64 %s0, %s1
2279ed443d81SArthur Eubanks  ret i64 %o7
2280ed443d81SArthur Eubanks}
2281ed443d81SArthur Eubanks
2282ed443d81SArthur Eubanksdefine i64 @loadCombine_nonConstShift2(ptr %arg, i8 %b) {
2283ed443d81SArthur Eubanks; ALL-LABEL: @loadCombine_nonConstShift2(
2284ed443d81SArthur Eubanks; ALL-NEXT:    [[G1:%.*]] = getelementptr i8, ptr [[ARG:%.*]], i64 1
2285ed443d81SArthur Eubanks; ALL-NEXT:    [[LD0:%.*]] = load i8, ptr [[ARG]], align 1
2286ed443d81SArthur Eubanks; ALL-NEXT:    [[LD1:%.*]] = load i8, ptr [[G1]], align 1
2287ed443d81SArthur Eubanks; ALL-NEXT:    [[Z0:%.*]] = zext i8 [[LD0]] to i64
2288ed443d81SArthur Eubanks; ALL-NEXT:    [[Z1:%.*]] = zext i8 [[LD1]] to i64
2289ed443d81SArthur Eubanks; ALL-NEXT:    [[Z6:%.*]] = zext i8 [[B:%.*]] to i64
2290ed443d81SArthur Eubanks; ALL-NEXT:    [[S0:%.*]] = shl i64 [[Z0]], [[Z6]]
2291ed443d81SArthur Eubanks; ALL-NEXT:    [[S1:%.*]] = shl i64 [[Z1]], 8
2292ed443d81SArthur Eubanks; ALL-NEXT:    [[O7:%.*]] = or i64 [[S1]], [[S0]]
2293ed443d81SArthur Eubanks; ALL-NEXT:    ret i64 [[O7]]
2294ed443d81SArthur Eubanks;
2295ed443d81SArthur Eubanks  %g1 = getelementptr i8, ptr %arg, i64 1
2296ed443d81SArthur Eubanks  %ld0 = load i8, ptr %arg, align 1
2297ed443d81SArthur Eubanks  %ld1 = load i8, ptr %g1, align 1
2298ed443d81SArthur Eubanks  %z0 = zext i8 %ld0 to i64
2299ed443d81SArthur Eubanks  %z1 = zext i8 %ld1 to i64
2300ed443d81SArthur Eubanks  %z6 = zext i8 %b to i64
2301ed443d81SArthur Eubanks  %s0 = shl i64 %z0, %z6
2302ed443d81SArthur Eubanks  %s1 = shl i64 %z1, 8
2303ed443d81SArthur Eubanks  %o7 = or i64 %s1, %s0
2304ed443d81SArthur Eubanks  ret i64 %o7
2305ed443d81SArthur Eubanks}
2306cbc50ba1Sbipmis
2307cbc50ba1Sbipmisdefine void @nested_gep(ptr %p, ptr %dest) {
2308cbc50ba1Sbipmis; LE-LABEL: @nested_gep(
2309*f68b0e36SAntonio Frighetto; LE-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 68
2310cbc50ba1Sbipmis; LE-NEXT:    [[LD2:%.*]] = load i64, ptr [[TMP1]], align 4
2311cbc50ba1Sbipmis; LE-NEXT:    [[TRUNC:%.*]] = trunc i64 [[LD2]] to i32
2312cbc50ba1Sbipmis; LE-NEXT:    store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4
2313cbc50ba1Sbipmis; LE-NEXT:    ret void
2314cbc50ba1Sbipmis;
2315cbc50ba1Sbipmis; BE-LABEL: @nested_gep(
2316cbc50ba1Sbipmis; BE-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 72
2317cbc50ba1Sbipmis; BE-NEXT:    [[LD1:%.*]] = load i32, ptr [[GEP1]], align 4
2318cbc50ba1Sbipmis; BE-NEXT:    [[LD1_ZEXT:%.*]] = zext i32 [[LD1]] to i64
2319cbc50ba1Sbipmis; BE-NEXT:    [[LD1_SHL:%.*]] = shl nuw i64 [[LD1_ZEXT]], 32
2320cbc50ba1Sbipmis; BE-NEXT:    [[GEP2:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 64
2321cbc50ba1Sbipmis; BE-NEXT:    [[FINAL_PTR:%.*]] = getelementptr inbounds i8, ptr [[GEP2]], i64 4
2322cbc50ba1Sbipmis; BE-NEXT:    [[LD2:%.*]] = load i32, ptr [[FINAL_PTR]], align 4
2323cbc50ba1Sbipmis; BE-NEXT:    [[LD2_ZEXT:%.*]] = zext i32 [[LD2]] to i64
2324cbc50ba1Sbipmis; BE-NEXT:    [[OR:%.*]] = or i64 [[LD1_SHL]], [[LD2_ZEXT]]
2325cbc50ba1Sbipmis; BE-NEXT:    [[ADD:%.*]] = add i64 [[OR]], 0
2326cbc50ba1Sbipmis; BE-NEXT:    [[TRUNC:%.*]] = trunc i64 [[ADD]] to i32
2327cbc50ba1Sbipmis; BE-NEXT:    store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4
2328cbc50ba1Sbipmis; BE-NEXT:    ret void
2329cbc50ba1Sbipmis;
2330cbc50ba1Sbipmis  %gep1 = getelementptr inbounds i8, ptr %p, i64 72
2331cbc50ba1Sbipmis  %ld1 = load i32, ptr %gep1, align 4
2332cbc50ba1Sbipmis  %ld1_zext = zext i32 %ld1 to i64
2333cbc50ba1Sbipmis  %ld1_shl = shl nuw i64 %ld1_zext, 32
2334cbc50ba1Sbipmis  %gep2 = getelementptr inbounds i8, ptr %p, i64 64
2335cbc50ba1Sbipmis  ; Don't move final_ptr before gep2
2336cbc50ba1Sbipmis  %final_ptr = getelementptr inbounds i8, ptr %gep2, i64 4
2337cbc50ba1Sbipmis  %ld2 = load i32, ptr %final_ptr, align 4
2338cbc50ba1Sbipmis  %ld2_zext = zext i32 %ld2 to i64
2339cbc50ba1Sbipmis  %or = or i64 %ld1_shl, %ld2_zext
2340cbc50ba1Sbipmis  %add = add i64 %or, 0
2341cbc50ba1Sbipmis  %trunc = trunc i64 %add to i32
2342cbc50ba1Sbipmis  store i32 %trunc, ptr %dest, align 4
2343cbc50ba1Sbipmis  ret void
2344cbc50ba1Sbipmis}
2345cbc50ba1Sbipmis
2346cbc50ba1Sbipmis
2347cbc50ba1Sbipmisdefine void @bitcast_gep(ptr %p, ptr %dest) {
2348cbc50ba1Sbipmis; LE-LABEL: @bitcast_gep(
2349*f68b0e36SAntonio Frighetto; LE-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 68
2350cbc50ba1Sbipmis; LE-NEXT:    [[LD2:%.*]] = load i64, ptr [[TMP1]], align 4
2351cbc50ba1Sbipmis; LE-NEXT:    [[TRUNC:%.*]] = trunc i64 [[LD2]] to i32
2352cbc50ba1Sbipmis; LE-NEXT:    store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4
2353cbc50ba1Sbipmis; LE-NEXT:    ret void
2354cbc50ba1Sbipmis;
2355cbc50ba1Sbipmis; BE-LABEL: @bitcast_gep(
2356cbc50ba1Sbipmis; BE-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 72
2357cbc50ba1Sbipmis; BE-NEXT:    [[LD1:%.*]] = load i32, ptr [[GEP1]], align 4
2358cbc50ba1Sbipmis; BE-NEXT:    [[LD1_ZEXT:%.*]] = zext i32 [[LD1]] to i64
2359cbc50ba1Sbipmis; BE-NEXT:    [[LD1_SHL:%.*]] = shl nuw i64 [[LD1_ZEXT]], 32
2360cbc50ba1Sbipmis; BE-NEXT:    [[GEP2:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 68
2361cbc50ba1Sbipmis; BE-NEXT:    [[FINAL_PTR:%.*]] = bitcast ptr [[GEP2]] to ptr
2362cbc50ba1Sbipmis; BE-NEXT:    [[LD2:%.*]] = load i32, ptr [[FINAL_PTR]], align 4
2363cbc50ba1Sbipmis; BE-NEXT:    [[LD2_ZEXT:%.*]] = zext i32 [[LD2]] to i64
2364cbc50ba1Sbipmis; BE-NEXT:    [[OR:%.*]] = or i64 [[LD1_SHL]], [[LD2_ZEXT]]
2365cbc50ba1Sbipmis; BE-NEXT:    [[ADD:%.*]] = add i64 [[OR]], 0
2366cbc50ba1Sbipmis; BE-NEXT:    [[TRUNC:%.*]] = trunc i64 [[ADD]] to i32
2367cbc50ba1Sbipmis; BE-NEXT:    store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4
2368cbc50ba1Sbipmis; BE-NEXT:    ret void
2369cbc50ba1Sbipmis;
2370cbc50ba1Sbipmis  %gep1 = getelementptr inbounds i8, ptr %p, i64 72
2371cbc50ba1Sbipmis  %ld1 = load i32, ptr %gep1, align 4
2372cbc50ba1Sbipmis  %ld1_zext = zext i32 %ld1 to i64
2373cbc50ba1Sbipmis  %ld1_shl = shl nuw i64 %ld1_zext, 32
2374cbc50ba1Sbipmis  %gep2 = getelementptr inbounds i8, ptr %p, i64 68
2375cbc50ba1Sbipmis  ; Don't move final_ptr before gep2
2376cbc50ba1Sbipmis  %final_ptr = bitcast ptr %gep2 to ptr
2377cbc50ba1Sbipmis  %ld2 = load i32, ptr %final_ptr, align 4
2378cbc50ba1Sbipmis  %ld2_zext = zext i32 %ld2 to i64
2379cbc50ba1Sbipmis  %or = or i64 %ld1_shl, %ld2_zext
2380cbc50ba1Sbipmis  %add = add i64 %or, 0
2381cbc50ba1Sbipmis  %trunc = trunc i64 %add to i32
2382cbc50ba1Sbipmis  store i32 %trunc, ptr %dest, align 4
2383cbc50ba1Sbipmis  ret void
2384cbc50ba1Sbipmis}
2385*f68b0e36SAntonio Frighetto
2386*f68b0e36SAntonio Frighettodefine i32 @loadcombine_consecutive_idx_64(ptr %data) {
2387*f68b0e36SAntonio Frighetto; LE-LABEL: @loadcombine_consecutive_idx_64(
2388*f68b0e36SAntonio Frighetto; LE-NEXT:  entry:
2389*f68b0e36SAntonio Frighetto; LE-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[DATA:%.*]], i64 2149675576
2390*f68b0e36SAntonio Frighetto; LE-NEXT:    [[VAL_2:%.*]] = load i16, ptr [[TMP0]], align 1
2391*f68b0e36SAntonio Frighetto; LE-NEXT:    [[TMP1:%.*]] = zext i16 [[VAL_2]] to i32
2392*f68b0e36SAntonio Frighetto; LE-NEXT:    ret i32 [[TMP1]]
2393*f68b0e36SAntonio Frighetto;
2394*f68b0e36SAntonio Frighetto; BE-LABEL: @loadcombine_consecutive_idx_64(
2395*f68b0e36SAntonio Frighetto; BE-NEXT:  entry:
2396*f68b0e36SAntonio Frighetto; BE-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[DATA:%.*]], i64 2149675577
2397*f68b0e36SAntonio Frighetto; BE-NEXT:    [[VAL:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
2398*f68b0e36SAntonio Frighetto; BE-NEXT:    [[CONV:%.*]] = zext i8 [[VAL]] to i32
2399*f68b0e36SAntonio Frighetto; BE-NEXT:    [[ARRAYIDX_2:%.*]] = getelementptr inbounds nuw i8, ptr [[DATA]], i64 2149675576
2400*f68b0e36SAntonio Frighetto; BE-NEXT:    [[VAL_2:%.*]] = load i8, ptr [[ARRAYIDX_2]], align 1
2401*f68b0e36SAntonio Frighetto; BE-NEXT:    [[CONV_2:%.*]] = zext i8 [[VAL_2]] to i32
2402*f68b0e36SAntonio Frighetto; BE-NEXT:    [[SHL:%.*]] = shl nuw nsw i32 [[CONV]], 8
2403*f68b0e36SAntonio Frighetto; BE-NEXT:    [[OR:%.*]] = or disjoint i32 [[SHL]], [[CONV_2]]
2404*f68b0e36SAntonio Frighetto; BE-NEXT:    ret i32 [[OR]]
2405*f68b0e36SAntonio Frighetto;
2406*f68b0e36SAntonio Frighettoentry:
2407*f68b0e36SAntonio Frighetto  %arrayidx = getelementptr inbounds nuw i8, ptr %data, i64 2149675577
2408*f68b0e36SAntonio Frighetto  %val = load i8, ptr %arrayidx, align 1
2409*f68b0e36SAntonio Frighetto  %conv = zext i8 %val to i32
2410*f68b0e36SAntonio Frighetto  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %data, i64 2149675576
2411*f68b0e36SAntonio Frighetto  %val.2 = load i8, ptr %arrayidx.2, align 1
2412*f68b0e36SAntonio Frighetto  %conv.2 = zext i8 %val.2 to i32
2413*f68b0e36SAntonio Frighetto  %shl = shl nuw nsw i32 %conv, 8
2414*f68b0e36SAntonio Frighetto  %or = or disjoint i32 %shl, %conv.2
2415*f68b0e36SAntonio Frighetto  ret i32 %or
2416*f68b0e36SAntonio Frighetto}
2417