@@ -101,6 +101,107 @@ define i32 @loadCombine_4consecutive(ptr %p) {
101101 ret i32 %o3
102102}
103103
104+ define i32 @loadCombine_4consecutive_commuted (ptr %p ) {
105+ ; LE-LABEL: @loadCombine_4consecutive_commuted(
106+ ; LE-NEXT: [[O3:%.*]] = load i32, ptr [[P:%.*]], align 1
107+ ; LE-NEXT: ret i32 [[O3]]
108+ ;
109+ ; BE-LABEL: @loadCombine_4consecutive_commuted(
110+ ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
111+ ; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
112+ ; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
113+ ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
114+ ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
115+ ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
116+ ; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
117+ ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
118+ ; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
119+ ; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
120+ ; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
121+ ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
122+ ; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
123+ ; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
124+ ; BE-NEXT: [[O1:%.*]] = or i32 [[S2]], [[S3]]
125+ ; BE-NEXT: [[O2:%.*]] = or i32 [[S4]], [[O1]]
126+ ; BE-NEXT: [[O3:%.*]] = or i32 [[E1]], [[O2]]
127+ ; BE-NEXT: ret i32 [[O3]]
128+ ;
129+ %p1 = getelementptr i8 , ptr %p , i32 1
130+ %p2 = getelementptr i8 , ptr %p , i32 2
131+ %p3 = getelementptr i8 , ptr %p , i32 3
132+ %l1 = load i8 , ptr %p
133+ %l2 = load i8 , ptr %p1
134+ %l3 = load i8 , ptr %p2
135+ %l4 = load i8 , ptr %p3
136+
137+ %e1 = zext i8 %l1 to i32
138+ %e2 = zext i8 %l2 to i32
139+ %e3 = zext i8 %l3 to i32
140+ %e4 = zext i8 %l4 to i32
141+
142+ %s2 = shl i32 %e2 , 8
143+ %s3 = shl i32 %e3 , 16
144+ %s4 = shl i32 %e4 , 24
145+
146+ %o1 = or i32 %s2 , %s3
147+ %o2 = or i32 %s4 , %o1
148+ %o3 = or i32 %e1 , %o2
149+ ret i32 %o3
150+ }
151+
152+ define i32 @loadCombine_4consecutive_multiuse (ptr %p ) {
153+ ; LE-LABEL: @loadCombine_4consecutive_multiuse(
154+ ; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 3
155+ ; LE-NEXT: [[O3:%.*]] = load i32, ptr [[P]], align 1
156+ ; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
157+ ; LE-NEXT: call void @use(i8 [[L4]])
158+ ; LE-NEXT: ret i32 [[O3]]
159+ ;
160+ ; BE-LABEL: @loadCombine_4consecutive_multiuse(
161+ ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
162+ ; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
163+ ; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
164+ ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
165+ ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
166+ ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
167+ ; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
168+ ; BE-NEXT: call void @use(i8 [[L4]])
169+ ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
170+ ; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
171+ ; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
172+ ; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
173+ ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
174+ ; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
175+ ; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
176+ ; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
177+ ; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
178+ ; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]]
179+ ; BE-NEXT: ret i32 [[O3]]
180+ ;
181+ %p1 = getelementptr i8 , ptr %p , i32 1
182+ %p2 = getelementptr i8 , ptr %p , i32 2
183+ %p3 = getelementptr i8 , ptr %p , i32 3
184+ %l1 = load i8 , ptr %p
185+ %l2 = load i8 , ptr %p1
186+ %l3 = load i8 , ptr %p2
187+ %l4 = load i8 , ptr %p3
188+ call void @use (i8 %l4 )
189+
190+ %e1 = zext i8 %l1 to i32
191+ %e2 = zext i8 %l2 to i32
192+ %e3 = zext i8 %l3 to i32
193+ %e4 = zext i8 %l4 to i32
194+
195+ %s2 = shl i32 %e2 , 8
196+ %s3 = shl i32 %e3 , 16
197+ %s4 = shl i32 %e4 , 24
198+
199+ %o1 = or i32 %e1 , %s2
200+ %o2 = or i32 %o1 , %s3
201+ %o3 = or i32 %o2 , %s4
202+ ret i32 %o3
203+ }
204+
104205define i32 @loadCombine_4consecutive_BE (ptr %p ) {
105206; LE-LABEL: @loadCombine_4consecutive_BE(
106207; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
0 commit comments