@@ -142,6 +142,108 @@ entry:
142
142
ret i64 %add.15
143
143
}
144
144
145
+
146
+ define i64 @red_strided_ld_16xi64 (ptr %ptr ) {
147
+ ; CHECK-LABEL: @red_strided_ld_16xi64(
148
+ ; CHECK-NEXT: entry:
149
+ ; CHECK-NEXT: [[LD0:%.*]] = load i64, ptr [[PTR:%.*]], align 8
150
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 2
151
+ ; CHECK-NEXT: [[LD1:%.*]] = load i64, ptr [[GEP]], align 8
152
+ ; CHECK-NEXT: [[ADD_1:%.*]] = add nuw nsw i64 [[LD0]], [[LD1]]
153
+ ; CHECK-NEXT: [[GEP_1:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 4
154
+ ; CHECK-NEXT: [[LD2:%.*]] = load i64, ptr [[GEP_1]], align 8
155
+ ; CHECK-NEXT: [[ADD_2:%.*]] = add nuw nsw i64 [[ADD_1]], [[LD2]]
156
+ ; CHECK-NEXT: [[GEP_2:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 6
157
+ ; CHECK-NEXT: [[LD3:%.*]] = load i64, ptr [[GEP_2]], align 8
158
+ ; CHECK-NEXT: [[ADD_3:%.*]] = add nuw nsw i64 [[ADD_2]], [[LD3]]
159
+ ; CHECK-NEXT: [[GEP_3:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 8
160
+ ; CHECK-NEXT: [[LD4:%.*]] = load i64, ptr [[GEP_3]], align 8
161
+ ; CHECK-NEXT: [[ADD_4:%.*]] = add nuw nsw i64 [[ADD_3]], [[LD4]]
162
+ ; CHECK-NEXT: [[GEP_4:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 10
163
+ ; CHECK-NEXT: [[LD5:%.*]] = load i64, ptr [[GEP_4]], align 8
164
+ ; CHECK-NEXT: [[ADD_5:%.*]] = add nuw nsw i64 [[ADD_4]], [[LD5]]
165
+ ; CHECK-NEXT: [[GEP_5:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 12
166
+ ; CHECK-NEXT: [[LD6:%.*]] = load i64, ptr [[GEP_5]], align 8
167
+ ; CHECK-NEXT: [[ADD_6:%.*]] = add nuw nsw i64 [[ADD_5]], [[LD6]]
168
+ ; CHECK-NEXT: [[GEP_6:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 14
169
+ ; CHECK-NEXT: [[LD7:%.*]] = load i64, ptr [[GEP_6]], align 8
170
+ ; CHECK-NEXT: [[ADD_7:%.*]] = add nuw nsw i64 [[ADD_6]], [[LD7]]
171
+ ; CHECK-NEXT: [[GEP_7:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 16
172
+ ; CHECK-NEXT: [[LD8:%.*]] = load i64, ptr [[GEP_7]], align 8
173
+ ; CHECK-NEXT: [[ADD_8:%.*]] = add nuw nsw i64 [[ADD_7]], [[LD8]]
174
+ ; CHECK-NEXT: [[GEP_8:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 18
175
+ ; CHECK-NEXT: [[LD9:%.*]] = load i64, ptr [[GEP_8]], align 8
176
+ ; CHECK-NEXT: [[ADD_9:%.*]] = add nuw nsw i64 [[ADD_8]], [[LD9]]
177
+ ; CHECK-NEXT: [[GEP_9:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 20
178
+ ; CHECK-NEXT: [[LD10:%.*]] = load i64, ptr [[GEP_9]], align 8
179
+ ; CHECK-NEXT: [[ADD_10:%.*]] = add nuw nsw i64 [[ADD_9]], [[LD10]]
180
+ ; CHECK-NEXT: [[GEP_10:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 22
181
+ ; CHECK-NEXT: [[LD11:%.*]] = load i64, ptr [[GEP_10]], align 8
182
+ ; CHECK-NEXT: [[ADD_11:%.*]] = add nuw nsw i64 [[ADD_10]], [[LD11]]
183
+ ; CHECK-NEXT: [[GEP_11:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 24
184
+ ; CHECK-NEXT: [[LD12:%.*]] = load i64, ptr [[GEP_11]], align 8
185
+ ; CHECK-NEXT: [[ADD_12:%.*]] = add nuw nsw i64 [[ADD_11]], [[LD12]]
186
+ ; CHECK-NEXT: [[GEP_12:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 26
187
+ ; CHECK-NEXT: [[LD13:%.*]] = load i64, ptr [[GEP_12]], align 8
188
+ ; CHECK-NEXT: [[ADD_13:%.*]] = add nuw nsw i64 [[ADD_12]], [[LD13]]
189
+ ; CHECK-NEXT: [[GEP_13:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 28
190
+ ; CHECK-NEXT: [[LD14:%.*]] = load i64, ptr [[GEP_13]], align 8
191
+ ; CHECK-NEXT: [[ADD_14:%.*]] = add nuw nsw i64 [[ADD_13]], [[LD14]]
192
+ ; CHECK-NEXT: [[GEP_14:%.*]] = getelementptr inbounds i64, ptr [[PTR]], i64 30
193
+ ; CHECK-NEXT: [[LD15:%.*]] = load i64, ptr [[GEP_14]], align 8
194
+ ; CHECK-NEXT: [[ADD_15:%.*]] = add nuw nsw i64 [[ADD_14]], [[LD15]]
195
+ ; CHECK-NEXT: ret i64 [[ADD_15]]
196
+ ;
197
+ entry:
198
+ %ld0 = load i64 , ptr %ptr
199
+ %gep = getelementptr inbounds i64 , ptr %ptr , i64 2
200
+ %ld1 = load i64 , ptr %gep
201
+ %add.1 = add nuw nsw i64 %ld0 , %ld1
202
+ %gep.1 = getelementptr inbounds i64 , ptr %ptr , i64 4
203
+ %ld2 = load i64 , ptr %gep.1
204
+ %add.2 = add nuw nsw i64 %add.1 , %ld2
205
+ %gep.2 = getelementptr inbounds i64 , ptr %ptr , i64 6
206
+ %ld3 = load i64 , ptr %gep.2
207
+ %add.3 = add nuw nsw i64 %add.2 , %ld3
208
+ %gep.3 = getelementptr inbounds i64 , ptr %ptr , i64 8
209
+ %ld4 = load i64 , ptr %gep.3
210
+ %add.4 = add nuw nsw i64 %add.3 , %ld4
211
+ %gep.4 = getelementptr inbounds i64 , ptr %ptr , i64 10
212
+ %ld5 = load i64 , ptr %gep.4
213
+ %add.5 = add nuw nsw i64 %add.4 , %ld5
214
+ %gep.5 = getelementptr inbounds i64 , ptr %ptr , i64 12
215
+ %ld6 = load i64 , ptr %gep.5
216
+ %add.6 = add nuw nsw i64 %add.5 , %ld6
217
+ %gep.6 = getelementptr inbounds i64 , ptr %ptr , i64 14
218
+ %ld7 = load i64 , ptr %gep.6
219
+ %add.7 = add nuw nsw i64 %add.6 , %ld7
220
+ %gep.7 = getelementptr inbounds i64 , ptr %ptr , i64 16
221
+ %ld8 = load i64 , ptr %gep.7
222
+ %add.8 = add nuw nsw i64 %add.7 , %ld8
223
+ %gep.8 = getelementptr inbounds i64 , ptr %ptr , i64 18
224
+ %ld9 = load i64 , ptr %gep.8
225
+ %add.9 = add nuw nsw i64 %add.8 , %ld9
226
+ %gep.9 = getelementptr inbounds i64 , ptr %ptr , i64 20
227
+ %ld10 = load i64 , ptr %gep.9
228
+ %add.10 = add nuw nsw i64 %add.9 , %ld10
229
+ %gep.10 = getelementptr inbounds i64 , ptr %ptr , i64 22
230
+ %ld11 = load i64 , ptr %gep.10
231
+ %add.11 = add nuw nsw i64 %add.10 , %ld11
232
+ %gep.11 = getelementptr inbounds i64 , ptr %ptr , i64 24
233
+ %ld12 = load i64 , ptr %gep.11
234
+ %add.12 = add nuw nsw i64 %add.11 , %ld12
235
+ %gep.12 = getelementptr inbounds i64 , ptr %ptr , i64 26
236
+ %ld13 = load i64 , ptr %gep.12
237
+ %add.13 = add nuw nsw i64 %add.12 , %ld13
238
+ %gep.13 = getelementptr inbounds i64 , ptr %ptr , i64 28
239
+ %ld14 = load i64 , ptr %gep.13
240
+ %add.14 = add nuw nsw i64 %add.13 , %ld14
241
+ %gep.14 = getelementptr inbounds i64 , ptr %ptr , i64 30
242
+ %ld15 = load i64 , ptr %gep.14
243
+ %add.15 = add nuw nsw i64 %add.14 , %ld15
244
+ ret i64 %add.15
245
+ }
246
+
145
247
; Next batch test differen reductions kinds
146
248
147
249
%struct.buf = type { [8 x i8 ] }
0 commit comments