xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/vld-vst-upgrade.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm-eabi -mattr=+neon < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker%struct.__neon_int32x2x2_t = type { <2 x i32>, <2 x i32> }
4*9880d681SAndroid Build Coastguard Worker%struct.__neon_int32x2x3_t = type { <2 x i32>, <2 x i32>, <2 x i32> }
5*9880d681SAndroid Build Coastguard Worker%struct.__neon_int32x2x4_t = type { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> }
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; vld[1234] auto-upgrade tests
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vld1_upgrade:
10*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {d16}, [r0]
11*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vld1_upgrade(i8* %ptr) {
12*9880d681SAndroid Build Coastguard Worker  %tmp1 = call <2 x i32> @llvm.arm.neon.vld1.v2i32(i8* %ptr, i32 1)
13*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %tmp1
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.arm.neon.vld1.v2i32(i8*, i32) nounwind readonly
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vld2_upgrade:
19*9880d681SAndroid Build Coastguard Worker; CHECK: vld2.32 {d16, d17}, [r0]
20*9880d681SAndroid Build Coastguard Workerdefine %struct.__neon_int32x2x2_t @test_vld2_upgrade(i8* %ptr) {
21*9880d681SAndroid Build Coastguard Worker  %tmp1 = call %struct.__neon_int32x2x2_t @llvm.arm.neon.vld2.v2i32(i8* %ptr, i32 1)
22*9880d681SAndroid Build Coastguard Worker  ret %struct.__neon_int32x2x2_t %tmp1
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerdeclare %struct.__neon_int32x2x2_t @llvm.arm.neon.vld2.v2i32(i8*, i32) nounwind readonly
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vld3_upgrade:
28*9880d681SAndroid Build Coastguard Worker; CHECK: vld3.32 {d16, d17, d18}, [r1]
29*9880d681SAndroid Build Coastguard Workerdefine %struct.__neon_int32x2x3_t @test_vld3_upgrade(i8* %ptr) {
30*9880d681SAndroid Build Coastguard Worker  %tmp1 = call %struct.__neon_int32x2x3_t @llvm.arm.neon.vld3.v2i32(i8* %ptr, i32 1)
31*9880d681SAndroid Build Coastguard Worker  ret %struct.__neon_int32x2x3_t %tmp1
32*9880d681SAndroid Build Coastguard Worker}
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdeclare %struct.__neon_int32x2x3_t @llvm.arm.neon.vld3.v2i32(i8*, i32) nounwind readonly
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vld4_upgrade:
37*9880d681SAndroid Build Coastguard Worker; CHECK: vld4.32 {d16, d17, d18, d19}, [r1]
38*9880d681SAndroid Build Coastguard Workerdefine %struct.__neon_int32x2x4_t @test_vld4_upgrade(i8* %ptr) {
39*9880d681SAndroid Build Coastguard Worker  %tmp1 = call %struct.__neon_int32x2x4_t @llvm.arm.neon.vld4.v2i32(i8* %ptr, i32 1)
40*9880d681SAndroid Build Coastguard Worker  ret %struct.__neon_int32x2x4_t %tmp1
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdeclare %struct.__neon_int32x2x4_t @llvm.arm.neon.vld4.v2i32(i8*, i32) nounwind readonly
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; vld[234]lane auto-upgrade tests
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vld2lane_upgrade:
48*9880d681SAndroid Build Coastguard Worker; CHECK: vld2.32 {d16[1], d17[1]}, [r0]
49*9880d681SAndroid Build Coastguard Workerdefine %struct.__neon_int32x2x2_t @test_vld2lane_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B) {
50*9880d681SAndroid Build Coastguard Worker  %tmp1 = call %struct.__neon_int32x2x2_t @llvm.arm.neon.vld2lane.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, i32 1, i32 1)
51*9880d681SAndroid Build Coastguard Worker  ret %struct.__neon_int32x2x2_t %tmp1
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdeclare %struct.__neon_int32x2x2_t @llvm.arm.neon.vld2lane.v2i32(i8*, <2 x i32>, <2 x i32>, i32, i32) nounwind readonly
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vld3lane_upgrade:
57*9880d681SAndroid Build Coastguard Worker; CHECK: vld3.32 {d16[1], d17[1], d18[1]}, [r1]
58*9880d681SAndroid Build Coastguard Workerdefine %struct.__neon_int32x2x3_t @test_vld3lane_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C) {
59*9880d681SAndroid Build Coastguard Worker  %tmp1 = call %struct.__neon_int32x2x3_t @llvm.arm.neon.vld3lane.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, i32 1, i32 1)
60*9880d681SAndroid Build Coastguard Worker  ret %struct.__neon_int32x2x3_t %tmp1
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdeclare %struct.__neon_int32x2x3_t @llvm.arm.neon.vld3lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind readonly
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vld4lane_upgrade:
66*9880d681SAndroid Build Coastguard Worker; CHECK: vld4.32 {d16[1], d17[1], d18[1], d19[1]}, [r1]
67*9880d681SAndroid Build Coastguard Workerdefine %struct.__neon_int32x2x4_t @test_vld4lane_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) {
68*9880d681SAndroid Build Coastguard Worker  %tmp1 = call %struct.__neon_int32x2x4_t @llvm.arm.neon.vld4lane.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32 1, i32 1)
69*9880d681SAndroid Build Coastguard Worker  ret %struct.__neon_int32x2x4_t %tmp1
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdeclare %struct.__neon_int32x2x4_t @llvm.arm.neon.vld4lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind readonly
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker; vst[1234] auto-upgrade tests
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vst1_upgrade:
77*9880d681SAndroid Build Coastguard Worker; CHECK: vst1.32 {d16}, [r0]
78*9880d681SAndroid Build Coastguard Workerdefine void @test_vst1_upgrade(i8* %ptr, <2 x i32> %A) {
79*9880d681SAndroid Build Coastguard Worker  call void @llvm.arm.neon.vst1.v2i32(i8* %ptr, <2 x i32> %A, i32 1)
80*9880d681SAndroid Build Coastguard Worker  ret void
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst1.v2i32(i8*, <2 x i32>, i32) nounwind
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vst2_upgrade:
86*9880d681SAndroid Build Coastguard Worker; CHECK: vst2.32 {d16, d17}, [r0]
87*9880d681SAndroid Build Coastguard Workerdefine void @test_vst2_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B) {
88*9880d681SAndroid Build Coastguard Worker  call void @llvm.arm.neon.vst2.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, i32 1)
89*9880d681SAndroid Build Coastguard Worker  ret void
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst2.v2i32(i8*, <2 x i32>, <2 x i32>, i32) nounwind
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vst3_upgrade:
95*9880d681SAndroid Build Coastguard Worker; CHECK: vst3.32 {d16, d17, d18}, [r0]
96*9880d681SAndroid Build Coastguard Workerdefine void @test_vst3_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C) {
97*9880d681SAndroid Build Coastguard Worker  call void @llvm.arm.neon.vst3.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, i32 1)
98*9880d681SAndroid Build Coastguard Worker  ret void
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst3.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, i32) nounwind
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vst4_upgrade:
104*9880d681SAndroid Build Coastguard Worker; CHECK: vst4.32 {d16, d17, d18, d19}, [r0]
105*9880d681SAndroid Build Coastguard Workerdefine void @test_vst4_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) {
106*9880d681SAndroid Build Coastguard Worker  call void @llvm.arm.neon.vst4.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32 1)
107*9880d681SAndroid Build Coastguard Worker  ret void
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst4.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32) nounwind
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker; vst[234]lane auto-upgrade tests
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vst2lane_upgrade:
115*9880d681SAndroid Build Coastguard Worker; CHECK: vst2.32 {d16[1], d17[1]}, [r0]
116*9880d681SAndroid Build Coastguard Workerdefine void @test_vst2lane_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B) {
117*9880d681SAndroid Build Coastguard Worker  call void @llvm.arm.neon.vst2lane.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, i32 1, i32 1)
118*9880d681SAndroid Build Coastguard Worker  ret void
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst2lane.v2i32(i8*, <2 x i32>, <2 x i32>, i32, i32) nounwind
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vst3lane_upgrade:
124*9880d681SAndroid Build Coastguard Worker; CHECK: vst3.32 {d16[1], d17[1], d18[1]}, [r0]
125*9880d681SAndroid Build Coastguard Workerdefine void @test_vst3lane_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C) {
126*9880d681SAndroid Build Coastguard Worker  call void @llvm.arm.neon.vst3lane.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, i32 1, i32 1)
127*9880d681SAndroid Build Coastguard Worker  ret void
128*9880d681SAndroid Build Coastguard Worker}
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst3lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vst4lane_upgrade:
133*9880d681SAndroid Build Coastguard Worker; CHECK: vst4.32 {d16[1], d17[1], d18[1], d19[1]}, [r0]
134*9880d681SAndroid Build Coastguard Workerdefine void @test_vst4lane_upgrade(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) {
135*9880d681SAndroid Build Coastguard Worker  call void @llvm.arm.neon.vst4lane.v2i32(i8* %ptr, <2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32 1, i32 1)
136*9880d681SAndroid Build Coastguard Worker  ret void
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst4lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind
140