@@ -156,175 +156,3 @@ define <4 x i16> @vcvt_f32tof16(<4 x float>* %A) nounwind {
156
156
157
157
declare <4 x float > @llvm.arm.neon.vcvthf2fp (<4 x i16 >) nounwind readnone
158
158
declare <4 x i16 > @llvm.arm.neon.vcvtfp2hf (<4 x float >) nounwind readnone
159
-
160
- ; We currently estimate the cost of sext/zext/trunc v8(v16)i32 <-> v8(v16)i8
161
- ; instructions as expensive. If lowering is improved the cost model needs to
162
- ; change.
163
- ; RUN: opt < %s -cost-model -analyze -mtriple=thumbv7-apple-ios6.0.0 -march=arm -mcpu=cortex-a8 | FileCheck %s --check-prefix=COST
164
- %T0_5 = type <8 x i8 >
165
- %T1_5 = type <8 x i32 >
166
- ; CHECK: func_cvt5:
167
- define void @func_cvt5 (%T0_5* %loadaddr , %T1_5* %storeaddr ) {
168
- ; CHECK: vmovl.s8
169
- ; CHECK: vmovl.s16
170
- ; CHECK: vmovl.s16
171
- %v0 = load %T0_5* %loadaddr
172
- ; COST: func_cvt5
173
- ; COST: cost of 3 {{.*}} sext
174
- %r = sext %T0_5 %v0 to %T1_5
175
- store %T1_5 %r , %T1_5* %storeaddr
176
- ret void
177
- }
178
- ;; We currently estimate the cost of this instruction as expensive. If lowering
179
- ;; is improved the cost needs to change.
180
- %TA0_5 = type <8 x i8 >
181
- %TA1_5 = type <8 x i32 >
182
- ; CHECK: func_cvt1:
183
- define void @func_cvt1 (%TA0_5* %loadaddr , %TA1_5* %storeaddr ) {
184
- ; CHECK: vmovl.u8
185
- ; CHECK: vmovl.u16
186
- ; CHECK: vmovl.u16
187
- %v0 = load %TA0_5* %loadaddr
188
- ; COST: func_cvt1
189
- ; COST: cost of 3 {{.*}} zext
190
- %r = zext %TA0_5 %v0 to %TA1_5
191
- store %TA1_5 %r , %TA1_5* %storeaddr
192
- ret void
193
- }
194
- ;; We currently estimate the cost of this instruction as expensive. If lowering
195
- ;; is improved the cost needs to change.
196
- %T0_51 = type <8 x i32 >
197
- %T1_51 = type <8 x i8 >
198
- ; CHECK: func_cvt51:
199
- define void @func_cvt51 (%T0_51* %loadaddr , %T1_51* %storeaddr ) {
200
- ; CHECK: strb
201
- ; CHECK: strb
202
- ; CHECK: strb
203
- ; CHECK: strb
204
- ; CHECK: strb
205
- ; CHECK: strb
206
- ; CHECK: strb
207
- ; CHECK: strb
208
- %v0 = load %T0_51* %loadaddr
209
- ; COST: func_cvt51
210
- ; COST: cost of 19 {{.*}} trunc
211
- %r = trunc %T0_51 %v0 to %T1_51
212
- store %T1_51 %r , %T1_51* %storeaddr
213
- ret void
214
- }
215
- ;; We currently estimate the cost of this instruction as expensive. If lowering
216
- ;; is improved the cost needs to change.
217
- %TT0_5 = type <16 x i8 >
218
- %TT1_5 = type <16 x i32 >
219
- ; CHECK: func_cvt52:
220
- define void @func_cvt52 (%TT0_5* %loadaddr , %TT1_5* %storeaddr ) {
221
- ; CHECK: vmovl.s16
222
- ; CHECK: vmovl.s16
223
- ; CHECK: vmovl.s16
224
- ; CHECK: vmovl.s16
225
- %v0 = load %TT0_5* %loadaddr
226
- ; COST: func_cvt52
227
- ; COST: cost of 6 {{.*}} sext
228
- %r = sext %TT0_5 %v0 to %TT1_5
229
- store %TT1_5 %r , %TT1_5* %storeaddr
230
- ret void
231
- }
232
- ;; We currently estimate the cost of this instruction as expensive. If lowering
233
- ;; is improved the cost needs to change.
234
- %TTA0_5 = type <16 x i8 >
235
- %TTA1_5 = type <16 x i32 >
236
- ; CHECK: func_cvt12:
237
- define void @func_cvt12 (%TTA0_5* %loadaddr , %TTA1_5* %storeaddr ) {
238
- ; CHECK: vmovl.u16
239
- ; CHECK: vmovl.u16
240
- ; CHECK: vmovl.u16
241
- ; CHECK: vmovl.u16
242
- %v0 = load %TTA0_5* %loadaddr
243
- ; COST: func_cvt12
244
- ; COST: cost of 6 {{.*}} zext
245
- %r = zext %TTA0_5 %v0 to %TTA1_5
246
- store %TTA1_5 %r , %TTA1_5* %storeaddr
247
- ret void
248
- }
249
- ;; We currently estimate the cost of this instruction as expensive. If lowering
250
- ;; is improved the cost needs to change.
251
- %TT0_51 = type <16 x i32 >
252
- %TT1_51 = type <16 x i8 >
253
- ; CHECK: func_cvt512:
254
- define void @func_cvt512 (%TT0_51* %loadaddr , %TT1_51* %storeaddr ) {
255
- ; CHECK: strb
256
- ; CHECK: strb
257
- ; CHECK: strb
258
- ; CHECK: strb
259
- ; CHECK: strb
260
- ; CHECK: strb
261
- ; CHECK: strb
262
- ; CHECK: strb
263
- ; CHECK: strb
264
- ; CHECK: strb
265
- ; CHECK: strb
266
- ; CHECK: strb
267
- ; CHECK: strb
268
- ; CHECK: strb
269
- ; CHECK: strb
270
- ; CHECK: strb
271
- %v0 = load %TT0_51* %loadaddr
272
- ; COST: func_cvt512
273
- ; COST: cost of 38 {{.*}} trunc
274
- %r = trunc %TT0_51 %v0 to %TT1_51
275
- store %TT1_51 %r , %TT1_51* %storeaddr
276
- ret void
277
- }
278
-
279
- ; CHECK: sext_v4i16_v4i64:
280
- define void @sext_v4i16_v4i64 (<4 x i16 >* %loadaddr , <4 x i64 >* %storeaddr ) {
281
- ; CHECK: vmovl.s32
282
- ; CHECK: vmovl.s32
283
- %v0 = load <4 x i16 >* %loadaddr
284
- ; COST: sext_v4i16_v4i64
285
- ; COST: cost of 3 {{.*}} sext
286
- %r = sext <4 x i16 > %v0 to <4 x i64 >
287
- store <4 x i64 > %r , <4 x i64 >* %storeaddr
288
- ret void
289
- }
290
-
291
- ; CHECK: zext_v4i16_v4i64:
292
- define void @zext_v4i16_v4i64 (<4 x i16 >* %loadaddr , <4 x i64 >* %storeaddr ) {
293
- ; CHECK: vmovl.u32
294
- ; CHECK: vmovl.u32
295
- %v0 = load <4 x i16 >* %loadaddr
296
- ; COST: zext_v4i16_v4i64
297
- ; COST: cost of 3 {{.*}} zext
298
- %r = zext <4 x i16 > %v0 to <4 x i64 >
299
- store <4 x i64 > %r , <4 x i64 >* %storeaddr
300
- ret void
301
- }
302
-
303
- ; CHECK: sext_v8i16_v8i64:
304
- define void @sext_v8i16_v8i64 (<8 x i16 >* %loadaddr , <8 x i64 >* %storeaddr ) {
305
- ; CHECK: vmovl.s32
306
- ; CHECK: vmovl.s32
307
- ; CHECK: vmovl.s32
308
- ; CHECK: vmovl.s32
309
- %v0 = load <8 x i16 >* %loadaddr
310
- ; COST: sext_v8i16_v8i64
311
- ; COST: cost of 6 {{.*}} sext
312
- %r = sext <8 x i16 > %v0 to <8 x i64 >
313
- store <8 x i64 > %r , <8 x i64 >* %storeaddr
314
- ret void
315
- }
316
-
317
- ; CHECK: zext_v8i16_v8i64:
318
- define void @zext_v8i16_v8i64 (<8 x i16 >* %loadaddr , <8 x i64 >* %storeaddr ) {
319
- ; CHECK: vmovl.u32
320
- ; CHECK: vmovl.u32
321
- ; CHECK: vmovl.u32
322
- ; CHECK: vmovl.u32
323
- %v0 = load <8 x i16 >* %loadaddr
324
- ; COST: zext_v8i16_v8i64
325
- ; COST: cost of 6 {{.*}} zext
326
- %r = zext <8 x i16 > %v0 to <8 x i64 >
327
- store <8 x i64 > %r , <8 x i64 >* %storeaddr
328
- ret void
329
- }
330
-
0 commit comments