11; 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
34
45
56%struct.uint8x16x2_t = type { [2 x <16 x i8 >] }
@@ -295,12 +296,18 @@ entry:
295296define <1 x i64 > @testDUP.v1i64 (ptr %a , ptr %b ) #0 {
296297; As there is a store operation depending on %1, LD1R pattern can't be selected.
297298; 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
304311 %1 = load i64 , ptr %a , align 8
305312 store i64 %1 , ptr %b , align 8
306313 %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 {
322329}
323330
324331define <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
329342entry:
330343 %0 = load i8 , ptr %a , align 1
331344 %vld1_lane = insertelement <16 x i8 > %b , i8 %0 , i32 15
@@ -388,12 +401,20 @@ entry:
388401}
389402
390403define <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
397418entry:
398419 %0 = load i8 , ptr %a , align 1
399420 %vld1_lane = insertelement <8 x i8 > %b , i8 %0 , i32 7
@@ -607,11 +628,16 @@ entry:
607628}
608629
609630define 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
615641entry:
616642 %0 = extractelement <4 x i16 > %b , i32 0
617643 store i16 %0 , ptr %a , align 2
@@ -631,23 +657,33 @@ entry:
631657}
632658
633659define 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
639670entry:
640671 %0 = extractelement <2 x i32 > %b , i32 0
641672 store i32 %0 , ptr %a , align 4
642673 ret void
643674}
644675
645676define 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
651687entry:
652688 %0 = extractelement <1 x i64 > %b , i32 0
653689 store i64 %0 , ptr %a , align 8
@@ -667,11 +703,16 @@ entry:
667703}
668704
669705define 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
675716entry:
676717 %0 = extractelement <2 x float > %b , i32 0
677718 store float %0 , ptr %a , align 4
0 commit comments