1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon | FileCheck %s
2
+ ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon -global-isel=0 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
3
+ ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon -global-isel=1 | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3
4
4
5
5
6
%struct.uint8x16x2_t = type { [2 x <16 x i8 >] }
@@ -295,12 +296,18 @@ entry:
295
296
define <1 x i64 > @testDUP.v1i64 (ptr %a , ptr %b ) #0 {
296
297
; As there is a store operation depending on %1, LD1R pattern can't be selected.
297
298
; So LDR and FMOV should be emitted.
298
- ; CHECK-LABEL: testDUP.v1i64:
299
- ; CHECK: // %bb.0:
300
- ; CHECK-NEXT: ldr x8, [x0]
301
- ; CHECK-NEXT: fmov d0, x8
302
- ; CHECK-NEXT: str x8, [x1]
303
- ; CHECK-NEXT: ret
299
+ ; CHECK-GI-LABEL: testDUP.v1i64:
300
+ ; CHECK-GI: // %bb.0:
301
+ ; CHECK-GI-NEXT: ldr x8, [x0]
302
+ ; CHECK-GI-NEXT: fmov d0, x8
303
+ ; CHECK-GI-NEXT: str x8, [x1]
304
+ ; CHECK-GI-NEXT: ret
305
+ ;
306
+ ; CHECK-SD-LABEL: testDUP.v1i64:
307
+ ; CHECK-SD: // %bb.0:
308
+ ; CHECK-SD-NEXT: ldr d0, [x0]
309
+ ; CHECK-SD-NEXT: str d0, [x1]
310
+ ; CHECK-SD-NEXT: ret
304
311
%1 = load i64 , ptr %a , align 8
305
312
store i64 %1 , ptr %b , align 8
306
313
%vecinit.i = insertelement <1 x i64 > undef , i64 %1 , i32 0
@@ -322,10 +329,16 @@ define <1 x double> @testDUP.v1f64(ptr %a, ptr %b) #0 {
322
329
}
323
330
324
331
define <16 x i8 > @test_vld1q_lane_s8 (ptr %a , <16 x i8 > %b ) {
325
- ; CHECK-LABEL: test_vld1q_lane_s8:
326
- ; CHECK: // %bb.0: // %entry
327
- ; CHECK-NEXT: ld1 { v0.b }[15], [x0]
328
- ; CHECK-NEXT: ret
332
+ ; CHECK-GI-LABEL: test_vld1q_lane_s8:
333
+ ; CHECK-GI: // %bb.0: // %entry
334
+ ; CHECK-GI-NEXT: ld1 { v0.b }[15], [x0]
335
+ ; CHECK-GI-NEXT: ret
336
+ ;
337
+ ; CHECK-SD-LABEL: test_vld1q_lane_s8:
338
+ ; CHECK-SD: // %bb.0: // %entry
339
+ ; CHECK-SD-NEXT: ldr b1, [x0]
340
+ ; CHECK-SD-NEXT: mov v0.b[15], v1.b[0]
341
+ ; CHECK-SD-NEXT: ret
329
342
entry:
330
343
%0 = load i8 , ptr %a , align 1
331
344
%vld1_lane = insertelement <16 x i8 > %b , i8 %0 , i32 15
@@ -388,12 +401,20 @@ entry:
388
401
}
389
402
390
403
define <8 x i8 > @test_vld1_lane_s8 (ptr %a , <8 x i8 > %b ) {
391
- ; CHECK-LABEL: test_vld1_lane_s8:
392
- ; CHECK: // %bb.0: // %entry
393
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
394
- ; CHECK-NEXT: ld1 { v0.b }[7], [x0]
395
- ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
396
- ; CHECK-NEXT: ret
404
+ ; CHECK-GI-LABEL: test_vld1_lane_s8:
405
+ ; CHECK-GI: // %bb.0: // %entry
406
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
407
+ ; CHECK-GI-NEXT: ld1 { v0.b }[7], [x0]
408
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
409
+ ; CHECK-GI-NEXT: ret
410
+ ;
411
+ ; CHECK-SD-LABEL: test_vld1_lane_s8:
412
+ ; CHECK-SD: // %bb.0: // %entry
413
+ ; CHECK-SD-NEXT: ldr b1, [x0]
414
+ ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
415
+ ; CHECK-SD-NEXT: mov v0.b[7], v1.b[0]
416
+ ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
417
+ ; CHECK-SD-NEXT: ret
397
418
entry:
398
419
%0 = load i8 , ptr %a , align 1
399
420
%vld1_lane = insertelement <8 x i8 > %b , i8 %0 , i32 7
@@ -607,11 +628,16 @@ entry:
607
628
}
608
629
609
630
define void @test_vst1_lane0_s16 (ptr %a , <4 x i16 > %b ) {
610
- ; CHECK-LABEL: test_vst1_lane0_s16:
611
- ; CHECK: // %bb.0: // %entry
612
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
613
- ; CHECK-NEXT: str h0, [x0]
614
- ; CHECK-NEXT: ret
631
+ ; CHECK-GI-LABEL: test_vst1_lane0_s16:
632
+ ; CHECK-GI: // %bb.0: // %entry
633
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
634
+ ; CHECK-GI-NEXT: str h0, [x0]
635
+ ; CHECK-GI-NEXT: ret
636
+ ;
637
+ ; CHECK-SD-LABEL: test_vst1_lane0_s16:
638
+ ; CHECK-SD: // %bb.0: // %entry
639
+ ; CHECK-SD-NEXT: str h0, [x0]
640
+ ; CHECK-SD-NEXT: ret
615
641
entry:
616
642
%0 = extractelement <4 x i16 > %b , i32 0
617
643
store i16 %0 , ptr %a , align 2
@@ -631,23 +657,33 @@ entry:
631
657
}
632
658
633
659
define void @test_vst1_lane0_s32 (ptr %a , <2 x i32 > %b ) {
634
- ; CHECK-LABEL: test_vst1_lane0_s32:
635
- ; CHECK: // %bb.0: // %entry
636
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
637
- ; CHECK-NEXT: str s0, [x0]
638
- ; CHECK-NEXT: ret
660
+ ; CHECK-GI-LABEL: test_vst1_lane0_s32:
661
+ ; CHECK-GI: // %bb.0: // %entry
662
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
663
+ ; CHECK-GI-NEXT: str s0, [x0]
664
+ ; CHECK-GI-NEXT: ret
665
+ ;
666
+ ; CHECK-SD-LABEL: test_vst1_lane0_s32:
667
+ ; CHECK-SD: // %bb.0: // %entry
668
+ ; CHECK-SD-NEXT: str s0, [x0]
669
+ ; CHECK-SD-NEXT: ret
639
670
entry:
640
671
%0 = extractelement <2 x i32 > %b , i32 0
641
672
store i32 %0 , ptr %a , align 4
642
673
ret void
643
674
}
644
675
645
676
define void @test_vst1_lane_s64 (ptr %a , <1 x i64 > %b ) {
646
- ; CHECK-LABEL: test_vst1_lane_s64:
647
- ; CHECK: // %bb.0: // %entry
648
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
649
- ; CHECK-NEXT: str d0, [x0]
650
- ; CHECK-NEXT: ret
677
+ ; CHECK-GI-LABEL: test_vst1_lane_s64:
678
+ ; CHECK-GI: // %bb.0: // %entry
679
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
680
+ ; CHECK-GI-NEXT: str d0, [x0]
681
+ ; CHECK-GI-NEXT: ret
682
+ ;
683
+ ; CHECK-SD-LABEL: test_vst1_lane_s64:
684
+ ; CHECK-SD: // %bb.0: // %entry
685
+ ; CHECK-SD-NEXT: str d0, [x0]
686
+ ; CHECK-SD-NEXT: ret
651
687
entry:
652
688
%0 = extractelement <1 x i64 > %b , i32 0
653
689
store i64 %0 , ptr %a , align 8
@@ -667,11 +703,16 @@ entry:
667
703
}
668
704
669
705
define void @test_vst1_lane0_f32 (ptr %a , <2 x float > %b ) {
670
- ; CHECK-LABEL: test_vst1_lane0_f32:
671
- ; CHECK: // %bb.0: // %entry
672
- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
673
- ; CHECK-NEXT: str s0, [x0]
674
- ; CHECK-NEXT: ret
706
+ ; CHECK-GI-LABEL: test_vst1_lane0_f32:
707
+ ; CHECK-GI: // %bb.0: // %entry
708
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
709
+ ; CHECK-GI-NEXT: str s0, [x0]
710
+ ; CHECK-GI-NEXT: ret
711
+ ;
712
+ ; CHECK-SD-LABEL: test_vst1_lane0_f32:
713
+ ; CHECK-SD: // %bb.0: // %entry
714
+ ; CHECK-SD-NEXT: str s0, [x0]
715
+ ; CHECK-SD-NEXT: ret
675
716
entry:
676
717
%0 = extractelement <2 x float > %b , i32 0
677
718
store float %0 , ptr %a , align 4
0 commit comments