@@ -278,6 +278,58 @@ entry:
278
278
ret void
279
279
}
280
280
281
+ define void @store_trunc_add_from_64bits (ptr %src , ptr %dst ) {
282
+ ; CHECK-LABEL: store_trunc_add_from_64bits:
283
+ ; CHECK: ; %bb.0: ; %entry
284
+ ; CHECK-NEXT: sub sp, sp, #16
285
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
286
+ ; CHECK-NEXT: ldr s0, [x0]
287
+ ; CHECK-NEXT: add x9, x0, #4
288
+ ; CHECK-NEXT: Lloh0:
289
+ ; CHECK-NEXT: adrp x8, lCPI7_0@PAGE
290
+ ; CHECK-NEXT: Lloh1:
291
+ ; CHECK-NEXT: ldr d1, [x8, lCPI7_0@PAGEOFF]
292
+ ; CHECK-NEXT: ld1.h { v0 }[2], [x9]
293
+ ; CHECK-NEXT: add.4h v0, v0, v1
294
+ ; CHECK-NEXT: xtn.8b v1, v0
295
+ ; CHECK-NEXT: umov.h w8, v0[2]
296
+ ; CHECK-NEXT: str s1, [sp, #12]
297
+ ; CHECK-NEXT: ldrh w9, [sp, #12]
298
+ ; CHECK-NEXT: strb w8, [x1, #2]
299
+ ; CHECK-NEXT: strh w9, [x1]
300
+ ; CHECK-NEXT: add sp, sp, #16
301
+ ; CHECK-NEXT: ret
302
+ ; CHECK-NEXT: .loh AdrpLdr Lloh0, Lloh1
303
+ ;
304
+ ; BE-LABEL: store_trunc_add_from_64bits:
305
+ ; BE: // %bb.0: // %entry
306
+ ; BE-NEXT: sub sp, sp, #16
307
+ ; BE-NEXT: .cfi_def_cfa_offset 16
308
+ ; BE-NEXT: ldr s0, [x0]
309
+ ; BE-NEXT: add x8, x0, #4
310
+ ; BE-NEXT: rev32 v0.4h, v0.4h
311
+ ; BE-NEXT: ld1 { v0.h }[2], [x8]
312
+ ; BE-NEXT: adrp x8, .LCPI7_0
313
+ ; BE-NEXT: add x8, x8, :lo12:.LCPI7_0
314
+ ; BE-NEXT: ld1 { v1.4h }, [x8]
315
+ ; BE-NEXT: add v0.4h, v0.4h, v1.4h
316
+ ; BE-NEXT: xtn v1.8b, v0.8h
317
+ ; BE-NEXT: umov w8, v0.h[2]
318
+ ; BE-NEXT: rev32 v1.16b, v1.16b
319
+ ; BE-NEXT: str s1, [sp, #12]
320
+ ; BE-NEXT: ldrh w9, [sp, #12]
321
+ ; BE-NEXT: strb w8, [x1, #2]
322
+ ; BE-NEXT: strh w9, [x1]
323
+ ; BE-NEXT: add sp, sp, #16
324
+ ; BE-NEXT: ret
325
+ entry:
326
+ %l = load <3 x i16 >, ptr %src , align 1
327
+ %a = add <3 x i16 > %l , <i16 3 , i16 4 , i16 5 >
328
+ %t = trunc <3 x i16 > %a to <3 x i8 >
329
+ store <3 x i8 > %t , ptr %dst , align 1
330
+ ret void
331
+ }
332
+
281
333
define void @load_ext_to_64bits (ptr %src , ptr %dst ) {
282
334
; CHECK-LABEL: load_ext_to_64bits:
283
335
; CHECK: ; %bb.0: ; %entry
@@ -321,6 +373,60 @@ entry:
321
373
ret void
322
374
}
323
375
376
+ define void @load_ext_add_to_64bits (ptr %src , ptr %dst ) {
377
+ ; CHECK-LABEL: load_ext_add_to_64bits:
378
+ ; CHECK: ; %bb.0: ; %entry
379
+ ; CHECK-NEXT: sub sp, sp, #16
380
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
381
+ ; CHECK-NEXT: ldrh w9, [x0]
382
+ ; CHECK-NEXT: Lloh2:
383
+ ; CHECK-NEXT: adrp x8, lCPI9_0@PAGE
384
+ ; CHECK-NEXT: Lloh3:
385
+ ; CHECK-NEXT: ldr d1, [x8, lCPI9_0@PAGEOFF]
386
+ ; CHECK-NEXT: add x8, x1, #4
387
+ ; CHECK-NEXT: strh w9, [sp, #12]
388
+ ; CHECK-NEXT: add x9, x0, #2
389
+ ; CHECK-NEXT: ldr s0, [sp, #12]
390
+ ; CHECK-NEXT: ushll.8h v0, v0, #0
391
+ ; CHECK-NEXT: ld1.b { v0 }[4], [x9]
392
+ ; CHECK-NEXT: bic.4h v0, #255, lsl #8
393
+ ; CHECK-NEXT: add.4h v0, v0, v1
394
+ ; CHECK-NEXT: st1.h { v0 }[2], [x8]
395
+ ; CHECK-NEXT: str s0, [x1]
396
+ ; CHECK-NEXT: add sp, sp, #16
397
+ ; CHECK-NEXT: ret
398
+ ; CHECK-NEXT: .loh AdrpLdr Lloh2, Lloh3
399
+ ;
400
+ ; BE-LABEL: load_ext_add_to_64bits:
401
+ ; BE: // %bb.0: // %entry
402
+ ; BE-NEXT: sub sp, sp, #16
403
+ ; BE-NEXT: .cfi_def_cfa_offset 16
404
+ ; BE-NEXT: ldrh w8, [x0]
405
+ ; BE-NEXT: strh w8, [sp, #12]
406
+ ; BE-NEXT: add x8, x0, #2
407
+ ; BE-NEXT: ldr s0, [sp, #12]
408
+ ; BE-NEXT: rev32 v0.8b, v0.8b
409
+ ; BE-NEXT: ushll v0.8h, v0.8b, #0
410
+ ; BE-NEXT: ld1 { v0.b }[4], [x8]
411
+ ; BE-NEXT: adrp x8, .LCPI9_0
412
+ ; BE-NEXT: add x8, x8, :lo12:.LCPI9_0
413
+ ; BE-NEXT: ld1 { v1.4h }, [x8]
414
+ ; BE-NEXT: add x8, x1, #4
415
+ ; BE-NEXT: bic v0.4h, #255, lsl #8
416
+ ; BE-NEXT: add v0.4h, v0.4h, v1.4h
417
+ ; BE-NEXT: rev32 v1.8h, v0.8h
418
+ ; BE-NEXT: st1 { v0.h }[2], [x8]
419
+ ; BE-NEXT: str s1, [x1]
420
+ ; BE-NEXT: add sp, sp, #16
421
+ ; BE-NEXT: ret
422
+ entry:
423
+ %l = load <3 x i8 >, ptr %src , align 1
424
+ %e = zext <3 x i8 > %l to <3 x i16 >
425
+ %a = add <3 x i16 > %e , <i16 3 , i16 4 , i16 5 >
426
+ store <3 x i16 > %a , ptr %dst , align 1
427
+ ret void
428
+ }
429
+
324
430
define void @shift_trunc_store (ptr %src , ptr %dst ) {
325
431
; CHECK-LABEL: shift_trunc_store:
326
432
; CHECK: ; %bb.0:
0 commit comments