1+ ; RUN: llc -mtriple=aarch64-linux-gnu -stop-after=instruction-select < %s | FileCheck %s
2+
3+ %struct.__neon_float32x2x2_t = type { <2 x float >, <2 x float > }
4+ %struct.__neon_float32x2x3_t = type { <2 x float >, <2 x float >, <2 x float > }
5+ %struct.__neon_float32x2x4_t = type { <2 x float >, <2 x float >, <2 x float >, <2 x float > }
6+
7+ declare %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld2.v2f32.p0f32 (float *)
8+ declare %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld3.v2f32.p0f32 (float *)
9+ declare %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld4.v2f32.p0f32 (float *)
10+
11+ declare %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld1x2.v2f32.p0f32 (float *)
12+ declare %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld1x3.v2f32.p0f32 (float *)
13+ declare %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld1x4.v2f32.p0f32 (float *)
14+
15+ declare %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld2r.v2f32.p0f32 (float *)
16+ declare %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld3r.v2f32.p0f32 (float *)
17+ declare %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld4r.v2f32.p0f32 (float *)
18+
19+ declare %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld2lane.v2f32.p0f32 (<2 x float >, <2 x float >, i64 , float *)
20+ declare %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld3lane.v2f32.p0f32 (<2 x float >, <2 x float >, <2 x float >, i64 , float *)
21+ declare %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld4lane.v2f32.p0f32 (<2 x float >, <2 x float >, <2 x float >, <2 x float >, i64 , float *)
22+
23+
24+ define %struct.__neon_float32x2x2_t @test_ld2 (float * %addr ) {
25+ ; CHECK-LABEL: name: test_ld2
26+ ; CHECK: LD2Twov2s {{.*}} :: (load (s128) {{.*}})
27+ %val = call %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld2.v2f32.p0f32 (float * %addr )
28+ ret %struct.__neon_float32x2x2_t %val
29+ }
30+
31+ define %struct.__neon_float32x2x3_t @test_ld3 (float * %addr ) {
32+ ; CHECK-LABEL: name: test_ld3
33+ ; CHECK: LD3Threev2s {{.*}} :: (load (s192) {{.*}})
34+ %val = call %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld3.v2f32.p0f32 (float * %addr )
35+ ret %struct.__neon_float32x2x3_t %val
36+ }
37+
38+ define %struct.__neon_float32x2x4_t @test_ld4 (float * %addr ) {
39+ ; CHECK-LABEL: name: test_ld4
40+ ; CHECK: LD4Fourv2s {{.*}} :: (load (s256) {{.*}})
41+ %val = call %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld4.v2f32.p0f32 (float * %addr )
42+ ret %struct.__neon_float32x2x4_t %val
43+ }
44+
45+ define %struct.__neon_float32x2x2_t @test_ld1x2 (float * %addr ) {
46+ ; CHECK-LABEL: name: test_ld1x2
47+ ; CHECK: LD1Twov2s {{.*}} :: (load (s128) {{.*}})
48+ %val = call %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld1x2.v2f32.p0f32 (float * %addr )
49+ ret %struct.__neon_float32x2x2_t %val
50+ }
51+
52+ define %struct.__neon_float32x2x3_t @test_ld1x3 (float * %addr ) {
53+ ; CHECK-LABEL: name: test_ld1x3
54+ ; CHECK: LD1Threev2s {{.*}} :: (load (s192) {{.*}})
55+ %val = call %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld1x3.v2f32.p0f32 (float * %addr )
56+ ret %struct.__neon_float32x2x3_t %val
57+ }
58+
59+ define %struct.__neon_float32x2x4_t @test_ld1x4 (float * %addr ) {
60+ ; CHECK-LABEL: name: test_ld1x4
61+ ; CHECK: LD1Fourv2s {{.*}} :: (load (s256) {{.*}})
62+ %val = call %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld1x4.v2f32.p0f32 (float * %addr )
63+ ret %struct.__neon_float32x2x4_t %val
64+ }
65+
66+ define %struct.__neon_float32x2x2_t @test_ld2r (float * %addr ) {
67+ ; CHECK-LABEL: name: test_ld2r
68+ ; CHECK: LD2Rv2s {{.*}} :: (load (s64) {{.*}})
69+ %val = call %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld2r.v2f32.p0f32 (float * %addr )
70+ ret %struct.__neon_float32x2x2_t %val
71+ }
72+
73+ define %struct.__neon_float32x2x3_t @test_ld3r (float * %addr ) {
74+ ; CHECK-LABEL: name: test_ld3r
75+ ; CHECK: LD3Rv2s {{.*}} :: (load (s96) {{.*}})
76+ %val = call %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld3r.v2f32.p0f32 (float * %addr )
77+ ret %struct.__neon_float32x2x3_t %val
78+ }
79+
80+ define %struct.__neon_float32x2x4_t @test_ld4r (float * %addr ) {
81+ ; CHECK-LABEL: name: test_ld4r
82+ ; CHECK: LD4Rv2s {{.*}} :: (load (s128) {{.*}})
83+ %val = call %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld4r.v2f32.p0f32 (float * %addr )
84+ ret %struct.__neon_float32x2x4_t %val
85+ }
86+
87+ define %struct.__neon_float32x2x2_t @test_ld2lane (<2 x float > %a , <2 x float > %b , float * %addr ) {
88+ ; CHECK-LABEL: name: test_ld2lane
89+ ; CHECK: {{.*}} LD2i32 {{.*}}
90+ %val = call %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld2lane.v2f32.p0f32 (<2 x float > %a , <2 x float > %b , i64 1 , float * %addr )
91+ ret %struct.__neon_float32x2x2_t %val
92+ }
93+
94+ define %struct.__neon_float32x2x3_t @test_ld3lane (<2 x float > %a , <2 x float > %b , <2 x float > %c , float * %addr ) {
95+ ; CHECK-LABEL: name: test_ld3lane
96+ ; CHECK: {{.*}} LD3i32 {{.*}}
97+ %val = call %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld3lane.v2f32.p0f32 (<2 x float > %a , <2 x float > %b , <2 x float > %c , i64 1 , float * %addr )
98+ ret %struct.__neon_float32x2x3_t %val
99+ }
100+
101+ define %struct.__neon_float32x2x4_t @test_ld4lane (<2 x float > %a , <2 x float > %b , <2 x float > %c , <2 x float > %d , float * %addr ) {
102+ ; CHECK-LABEL: name: test_ld4lane
103+ ; CHECK: {{.*}} LD4i32 {{.*}}
104+ %val = call %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld4lane.v2f32.p0f32 (<2 x float > %a , <2 x float > %b , <2 x float > %c , <2 x float > %d , i64 1 , float * %addr )
105+ ret %struct.__neon_float32x2x4_t %val
106+ }
0 commit comments