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