Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AArch64 / neon-stepvector.ll
blob7255574f42097a3fddd15f22505bd8f416bb02a0
1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+neon < %s | FileCheck %s --check-prefixes=CHECK
3 ; LEGAL INTEGER TYPES
5 define <2 x i64> @stepvector_v2i64() {
6 ; CHECK-LABEL: .LCPI0_0:
7 ; CHECK-NEXT:    .xword 0
8 ; CHECK-NEXT:    .xword 1
9 ; CHECK-LABEL: stepvector_v2i64:
10 ; CHECK:       // %bb.0: // %entry
11 ; CHECK-NEXT:    adrp x8, .LCPI0_0
12 ; CHECK-NEXT:    ldr q0, [x8, :lo12:.LCPI0_0]
13 ; CHECK-NEXT:    ret
14 entry:
15   %0 = call <2 x i64> @llvm.experimental.stepvector.v2i64()
16   ret <2 x i64> %0
19 define <4 x i32> @stepvector_v4i32() {
20 ; CHECK-LABEL: .LCPI1_0:
21 ; CHECK-NEXT:    .word 0
22 ; CHECK-NEXT:    .word 1
23 ; CHECK-NEXT:    .word 2
24 ; CHECK-NEXT:    .word 3
25 ; CHECK-LABEL: stepvector_v4i32:
26 ; CHECK:       // %bb.0: // %entry
27 ; CHECK-NEXT:    adrp x8, .LCPI1_0
28 ; CHECK-NEXT:    ldr q0, [x8, :lo12:.LCPI1_0]
29 ; CHECK-NEXT:    ret
30 entry:
31   %0 = call <4 x i32> @llvm.experimental.stepvector.v4i32()
32   ret <4 x i32> %0
35 define <8 x i16> @stepvector_v8i16() {
36 ; CHECK-LABEL: .LCPI2_0:
37 ; CHECK-NEXT:    .hword 0
38 ; CHECK-NEXT:    .hword 1
39 ; CHECK-NEXT:    .hword 2
40 ; CHECK-NEXT:    .hword 3
41 ; CHECK-NEXT:    .hword 4
42 ; CHECK-NEXT:    .hword 5
43 ; CHECK-NEXT:    .hword 6
44 ; CHECK-NEXT:    .hword 7
45 ; CHECK-LABEL: stepvector_v8i16:
46 ; CHECK:       // %bb.0: // %entry
47 ; CHECK-NEXT:    adrp x8, .LCPI2_0
48 ; CHECK-NEXT:    ldr q0, [x8, :lo12:.LCPI2_0]
49 ; CHECK-NEXT:    ret
50 entry:
51   %0 = call <8 x i16> @llvm.experimental.stepvector.v8i16()
52   ret <8 x i16> %0
55 define <16 x i8> @stepvector_v16i8() {
56 ; CHECK-LABEL: .LCPI3_0:
57 ; CHECK-NEXT:    .byte 0
58 ; CHECK-NEXT:    .byte 1
59 ; CHECK-NEXT:    .byte 2
60 ; CHECK-NEXT:    .byte 3
61 ; CHECK-NEXT:    .byte 4
62 ; CHECK-NEXT:    .byte 5
63 ; CHECK-NEXT:    .byte 6
64 ; CHECK-NEXT:    .byte 7
65 ; CHECK-NEXT:    .byte 8
66 ; CHECK-NEXT:    .byte 9
67 ; CHECK-NEXT:    .byte 10
68 ; CHECK-NEXT:    .byte 11
69 ; CHECK-NEXT:    .byte 12
70 ; CHECK-NEXT:    .byte 13
71 ; CHECK-NEXT:    .byte 14
72 ; CHECK-NEXT:    .byte 15
73 ; CHECK-LABEL: stepvector_v16i8:
74 ; CHECK:       // %bb.0: // %entry
75 ; CHECK-NEXT:    adrp x8, .LCPI3_0
76 ; CHECK-NEXT:    ldr q0, [x8, :lo12:.LCPI3_0]
77 ; CHECK-NEXT:    ret
78 entry:
79   %0 = call <16 x i8> @llvm.experimental.stepvector.v16i8()
80   ret <16 x i8> %0
83 ; ILLEGAL INTEGER TYPES
85 define <4 x i64> @stepvector_v4i64() {
86 ; CHECK-LABEL: .LCPI4_0:
87 ; CHECK-NEXT:    .xword 0
88 ; CHECK-NEXT:    .xword 1
89 ; CHECK-LABEL: .LCPI4_1:
90 ; CHECK-NEXT:    .xword 2
91 ; CHECK-NEXT:    .xword 3
92 ; CHECK-LABEL: stepvector_v4i64:
93 ; CHECK:       // %bb.0: // %entry
94 ; CHECK-NEXT:    adrp x8, .LCPI4_0
95 ; CHECK-NEXT:    adrp x9, .LCPI4_1
96 ; CHECK-NEXT:    ldr q0, [x8, :lo12:.LCPI4_0]
97 ; CHECK-NEXT:    ldr q1, [x9, :lo12:.LCPI4_1]
98 ; CHECK-NEXT:    ret
99 entry:
100   %0 = call <4 x i64> @llvm.experimental.stepvector.v4i64()
101   ret <4 x i64> %0
104 define <16 x i32> @stepvector_v16i32() {
105 ; CHECK-LABEL: .LCPI5_0:
106 ; CHECK-NEXT:    .word 0
107 ; CHECK-NEXT:    .word 1
108 ; CHECK-NEXT:    .word 2
109 ; CHECK-NEXT:    .word 3
110 ; CHECK-LABEL: .LCPI5_1:
111 ; CHECK-NEXT:    .word 4
112 ; CHECK-NEXT:    .word 5
113 ; CHECK-NEXT:    .word 6
114 ; CHECK-NEXT:    .word 7
115 ; CHECK-LABEL: .LCPI5_2:
116 ; CHECK-NEXT:    .word 8
117 ; CHECK-NEXT:    .word 9
118 ; CHECK-NEXT:    .word 10
119 ; CHECK-NEXT:    .word 11
120 ; CHECK-LABEL: .LCPI5_3:
121 ; CHECK-NEXT:    .word 12
122 ; CHECK-NEXT:    .word 13
123 ; CHECK-NEXT:    .word 14
124 ; CHECK-NEXT:    .word 15
125 ; CHECK-LABEL: stepvector_v16i32:
126 ; CHECK:       // %bb.0: // %entry
127 ; CHECK-NEXT:    adrp x8, .LCPI5_0
128 ; CHECK-NEXT:    adrp x9, .LCPI5_1
129 ; CHECK-NEXT:    adrp x10, .LCPI5_2
130 ; CHECK-NEXT:    adrp x11, .LCPI5_3
131 ; CHECK-NEXT:    ldr q0, [x8, :lo12:.LCPI5_0]
132 ; CHECK-NEXT:    ldr q1, [x9, :lo12:.LCPI5_1]
133 ; CHECK-NEXT:    ldr q2, [x10, :lo12:.LCPI5_2]
134 ; CHECK-NEXT:    ldr q3, [x11, :lo12:.LCPI5_3]
135 ; CHECK-NEXT:    ret
136 entry:
137   %0 = call <16 x i32> @llvm.experimental.stepvector.v16i32()
138   ret <16 x i32> %0
141 define <2 x i32> @stepvector_v2i32() {
142 ; CHECK-LABEL: .LCPI6_0:
143 ; CHECK-NEXT:    .word 0
144 ; CHECK-NEXT:    .word 1
145 ; CHECK-LABEL: stepvector_v2i32:
146 ; CHECK:       // %bb.0: // %entry
147 ; CHECK-NEXT:    adrp x8, .LCPI6_0
148 ; CHECK-NEXT:    ldr d0, [x8, :lo12:.LCPI6_0]
149 ; CHECK-NEXT:    ret
150 entry:
151   %0 = call <2 x i32> @llvm.experimental.stepvector.v2i32()
152   ret <2 x i32> %0
155 define <4 x i16> @stepvector_v4i16() {
156 ; CHECK-LABEL: .LCPI7_0:
157 ; CHECK-NEXT:    .hword 0
158 ; CHECK-NEXT:    .hword 1
159 ; CHECK-NEXT:    .hword 2
160 ; CHECK-NEXT:    .hword 3
161 ; CHECK-LABEL: stepvector_v4i16:
162 ; CHECK:       // %bb.0: // %entry
163 ; CHECK-NEXT:    adrp x8, .LCPI7_0
164 ; CHECK-NEXT:    ldr d0, [x8, :lo12:.LCPI7_0]
165 ; CHECK-NEXT:    ret
166 entry:
167   %0 = call <4 x i16> @llvm.experimental.stepvector.v4i16()
168   ret <4 x i16> %0
172 declare <2 x i64> @llvm.experimental.stepvector.v2i64()
173 declare <4 x i32> @llvm.experimental.stepvector.v4i32()
174 declare <8 x i16> @llvm.experimental.stepvector.v8i16()
175 declare <16 x i8> @llvm.experimental.stepvector.v16i8()
177 declare <4 x i64> @llvm.experimental.stepvector.v4i64()
178 declare <16 x i32> @llvm.experimental.stepvector.v16i32()
179 declare <2 x i32> @llvm.experimental.stepvector.v2i32()
180 declare <4 x i16> @llvm.experimental.stepvector.v4i16()