1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
8 tracksRegLiveness: true
11 liveins: $x0, $x1, $x2
12 ; CHECK-LABEL: name: LD4Fourv8b
13 ; CHECK: liveins: $x0, $x1, $x2
14 ; CHECK: %ptr:gpr64sp = COPY $x0
15 ; CHECK: [[LD4Fourv8b:%[0-9]+]]:dddd = LD4Fourv8b %ptr :: (load (<8 x s64>))
16 ; CHECK: %dst1:fpr64 = COPY [[LD4Fourv8b]].dsub0
17 ; CHECK: %dst2:fpr64 = COPY [[LD4Fourv8b]].dsub1
18 ; CHECK: %dst3:fpr64 = COPY [[LD4Fourv8b]].dsub2
19 ; CHECK: %dst4:fpr64 = COPY [[LD4Fourv8b]].dsub3
20 ; CHECK: $d0 = COPY %dst1
21 ; CHECK: $d1 = COPY %dst2
22 ; CHECK: $d2 = COPY %dst3
23 ; CHECK: $d3 = COPY %dst4
24 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
25 %ptr:gpr(p0) = COPY $x0
26 %dst1:fpr(<8 x s8>), %dst2:fpr(<8 x s8>), %dst3:fpr(<8 x s8>), %dst4:fpr(<8 x s8>)= G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (<8 x s64>))
27 $d0 = COPY %dst1(<8 x s8>)
28 $d1 = COPY %dst2(<8 x s8>)
29 $d2 = COPY %dst3(<8 x s8>)
30 $d3 = COPY %dst4(<8 x s8>)
31 RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
37 tracksRegLiveness: true
40 liveins: $x0, $x1, $x2
41 ; CHECK-LABEL: name: LD4Fourv16b
42 ; CHECK: liveins: $x0, $x1, $x2
43 ; CHECK: %ptr:gpr64sp = COPY $x0
44 ; CHECK: [[LD4Fourv16b:%[0-9]+]]:qqqq = LD4Fourv16b %ptr :: (load (<16 x s64>))
45 ; CHECK: %dst1:fpr128 = COPY [[LD4Fourv16b]].qsub0
46 ; CHECK: %dst2:fpr128 = COPY [[LD4Fourv16b]].qsub1
47 ; CHECK: %dst3:fpr128 = COPY [[LD4Fourv16b]].qsub2
48 ; CHECK: %dst4:fpr128 = COPY [[LD4Fourv16b]].qsub3
49 ; CHECK: $q0 = COPY %dst1
50 ; CHECK: $q1 = COPY %dst2
51 ; CHECK: $q2 = COPY %dst3
52 ; CHECK: $q3 = COPY %dst4
53 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
54 %ptr:gpr(p0) = COPY $x0
55 %dst1:fpr(<16 x s8>), %dst2:fpr(<16 x s8>), %dst3:fpr(<16 x s8>), %dst4:fpr(<16 x s8>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (<16 x s64>))
56 $q0 = COPY %dst1(<16 x s8>)
57 $q1 = COPY %dst2(<16 x s8>)
58 $q2 = COPY %dst3(<16 x s8>)
59 $q3 = COPY %dst4(<16 x s8>)
60 RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
66 tracksRegLiveness: true
70 ; CHECK-LABEL: name: LD4Fourv4h
72 ; CHECK: %ptr:gpr64sp = COPY $x0
73 ; CHECK: [[LD4Fourv4h:%[0-9]+]]:dddd = LD4Fourv4h %ptr :: (load (<4 x s64>))
74 ; CHECK: %dst1:fpr64 = COPY [[LD4Fourv4h]].dsub0
75 ; CHECK: %dst2:fpr64 = COPY [[LD4Fourv4h]].dsub1
76 ; CHECK: %dst3:fpr64 = COPY [[LD4Fourv4h]].dsub2
77 ; CHECK: %dst4:fpr64 = COPY [[LD4Fourv4h]].dsub3
78 ; CHECK: $d0 = COPY %dst1
79 ; CHECK: $d1 = COPY %dst2
80 ; CHECK: $d2 = COPY %dst3
81 ; CHECK: $d3 = COPY %dst4
82 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
83 %ptr:gpr(p0) = COPY $x0
84 %dst1:fpr(<4 x s16>), %dst2:fpr(<4 x s16>), %dst3:fpr(<4 x s16>), %dst4:fpr(<4 x s16>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (<4 x s64>))
85 $d0 = COPY %dst1(<4 x s16>)
86 $d1 = COPY %dst2(<4 x s16>)
87 $d2 = COPY %dst3(<4 x s16>)
88 $d3 = COPY %dst4(<4 x s16>)
89 RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
95 tracksRegLiveness: true
98 liveins: $x0, $x1, $x2
99 ; CHECK-LABEL: name: LD4Fourv8h
100 ; CHECK: liveins: $x0, $x1, $x2
101 ; CHECK: %ptr:gpr64sp = COPY $x0
102 ; CHECK: [[LD4Fourv8h:%[0-9]+]]:qqqq = LD4Fourv8h %ptr :: (load (<8 x s64>))
103 ; CHECK: %dst1:fpr128 = COPY [[LD4Fourv8h]].qsub0
104 ; CHECK: %dst2:fpr128 = COPY [[LD4Fourv8h]].qsub1
105 ; CHECK: %dst3:fpr128 = COPY [[LD4Fourv8h]].qsub2
106 ; CHECK: %dst4:fpr128 = COPY [[LD4Fourv8h]].qsub3
107 ; CHECK: $q0 = COPY %dst1
108 ; CHECK: $q1 = COPY %dst2
109 ; CHECK: $q2 = COPY %dst3
110 ; CHECK: $q3 = COPY %dst4
111 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
112 %ptr:gpr(p0) = COPY $x0
113 %dst1:fpr(<8 x s16>), %dst2:fpr(<8 x s16>), %dst3:fpr(<8 x s16>), %dst4:fpr(<8 x s16>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (<8 x s64>))
114 $q0 = COPY %dst1(<8 x s16>)
115 $q1 = COPY %dst2(<8 x s16>)
116 $q2 = COPY %dst3(<8 x s16>)
117 $q3 = COPY %dst4(<8 x s16>)
118 RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
123 regBankSelected: true
124 tracksRegLiveness: true
127 liveins: $x0, $x1, $x2
128 ; CHECK-LABEL: name: LD4Fourv2s
129 ; CHECK: liveins: $x0, $x1, $x2
130 ; CHECK: %ptr:gpr64sp = COPY $x0
131 ; CHECK: [[LD4Fourv2s:%[0-9]+]]:dddd = LD4Fourv2s %ptr :: (load (<2 x s64>))
132 ; CHECK: %dst1:fpr64 = COPY [[LD4Fourv2s]].dsub0
133 ; CHECK: %dst2:fpr64 = COPY [[LD4Fourv2s]].dsub1
134 ; CHECK: %dst3:fpr64 = COPY [[LD4Fourv2s]].dsub2
135 ; CHECK: %dst4:fpr64 = COPY [[LD4Fourv2s]].dsub3
136 ; CHECK: $d0 = COPY %dst1
137 ; CHECK: $d1 = COPY %dst2
138 ; CHECK: $d2 = COPY %dst3
139 ; CHECK: $d3 = COPY %dst4
140 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
141 %ptr:gpr(p0) = COPY $x0
142 %dst1:fpr(<2 x s32>), %dst2:fpr(<2 x s32>), %dst3:fpr(<2 x s32>), %dst4:fpr(<2 x s32>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (<2 x s64>))
143 $d0 = COPY %dst1(<2 x s32>)
144 $d1 = COPY %dst2(<2 x s32>)
145 $d2 = COPY %dst3(<2 x s32>)
146 $d3 = COPY %dst4(<2 x s32>)
147 RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
152 regBankSelected: true
153 tracksRegLiveness: true
156 liveins: $x0, $x1, $x2
157 ; CHECK-LABEL: name: LD4Fourv4s
158 ; CHECK: liveins: $x0, $x1, $x2
159 ; CHECK: %ptr:gpr64sp = COPY $x0
160 ; CHECK: [[LD4Fourv4s:%[0-9]+]]:qqqq = LD4Fourv4s %ptr :: (load (<4 x s64>))
161 ; CHECK: %dst1:fpr128 = COPY [[LD4Fourv4s]].qsub0
162 ; CHECK: %dst2:fpr128 = COPY [[LD4Fourv4s]].qsub1
163 ; CHECK: %dst3:fpr128 = COPY [[LD4Fourv4s]].qsub2
164 ; CHECK: %dst4:fpr128 = COPY [[LD4Fourv4s]].qsub3
165 ; CHECK: $q0 = COPY %dst1
166 ; CHECK: $q1 = COPY %dst2
167 ; CHECK: $q2 = COPY %dst3
168 ; CHECK: $q3 = COPY %dst4
169 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
170 %ptr:gpr(p0) = COPY $x0
171 %dst1:fpr(<4 x s32>), %dst2:fpr(<4 x s32>), %dst3:fpr(<4 x s32>), %dst4:fpr(<4 x s32>)= G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (<4 x s64>))
172 $q0 = COPY %dst1(<4 x s32>)
173 $q1 = COPY %dst2(<4 x s32>)
174 $q2 = COPY %dst3(<4 x s32>)
175 $q3 = COPY %dst4(<4 x s32>)
176 RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
179 name: LD4Fourv2d_v2s64
181 regBankSelected: true
182 tracksRegLiveness: true
185 liveins: $x0, $x1, $x2
186 ; CHECK-LABEL: name: LD4Fourv2d_v2s64
187 ; CHECK: liveins: $x0, $x1, $x2
188 ; CHECK: %ptr:gpr64sp = COPY $x0
189 ; CHECK: [[LD4Fourv2d:%[0-9]+]]:qqqq = LD4Fourv2d %ptr :: (load (<2 x s64>))
190 ; CHECK: %dst1:fpr128 = COPY [[LD4Fourv2d]].qsub0
191 ; CHECK: %dst2:fpr128 = COPY [[LD4Fourv2d]].qsub1
192 ; CHECK: %dst3:fpr128 = COPY [[LD4Fourv2d]].qsub2
193 ; CHECK: %dst4:fpr128 = COPY [[LD4Fourv2d]].qsub3
194 ; CHECK: $q0 = COPY %dst1
195 ; CHECK: $q1 = COPY %dst2
196 ; CHECK: $q2 = COPY %dst3
197 ; CHECK: $q3 = COPY %dst4
198 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
199 %ptr:gpr(p0) = COPY $x0
200 %dst1:fpr(<2 x s64>), %dst2:fpr(<2 x s64>), %dst3:fpr(<2 x s64>), %dst4:fpr(<2 x s64>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (<2 x s64>))
201 $q0 = COPY %dst1(<2 x s64>)
202 $q1 = COPY %dst2(<2 x s64>)
203 $q2 = COPY %dst3(<2 x s64>)
204 $q3 = COPY %dst4(<2 x s64>)
205 RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
208 name: LD4Fourv2d_v2p0
210 regBankSelected: true
211 tracksRegLiveness: true
214 liveins: $x0, $x1, $x2
215 ; CHECK-LABEL: name: LD4Fourv2d_v2p0
216 ; CHECK: liveins: $x0, $x1, $x2
217 ; CHECK: %ptr:gpr64sp = COPY $x0
218 ; CHECK: [[LD4Fourv2d:%[0-9]+]]:qqqq = LD4Fourv2d %ptr :: (load (<2 x p0>))
219 ; CHECK: %dst1:fpr128 = COPY [[LD4Fourv2d]].qsub0
220 ; CHECK: %dst2:fpr128 = COPY [[LD4Fourv2d]].qsub1
221 ; CHECK: %dst3:fpr128 = COPY [[LD4Fourv2d]].qsub2
222 ; CHECK: %dst4:fpr128 = COPY [[LD4Fourv2d]].qsub3
223 ; CHECK: $q0 = COPY %dst1
224 ; CHECK: $q1 = COPY %dst2
225 ; CHECK: $q2 = COPY %dst3
226 ; CHECK: $q3 = COPY %dst4
227 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
228 %ptr:gpr(p0) = COPY $x0
229 %dst1:fpr(<2 x p0>), %dst2:fpr(<2 x p0>), %dst3:fpr(<2 x p0>), %dst4:fpr(<2 x p0>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (<2 x p0>))
230 $q0 = COPY %dst1(<2 x p0>)
231 $q1 = COPY %dst2(<2 x p0>)
232 $q2 = COPY %dst3(<2 x p0>)
233 $q3 = COPY %dst4(<2 x p0>)
234 RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
239 regBankSelected: true
240 tracksRegLiveness: true
243 liveins: $x0, $x1, $x2
244 ; CHECK-LABEL: name: LD1Fourv1d_s64
245 ; CHECK: liveins: $x0, $x1, $x2
246 ; CHECK: %ptr:gpr64sp = COPY $x0
247 ; CHECK: [[LD1Fourv1d:%[0-9]+]]:dddd = LD1Fourv1d %ptr :: (load (s64))
248 ; CHECK: %dst1:fpr64 = COPY [[LD1Fourv1d]].dsub0
249 ; CHECK: %dst2:fpr64 = COPY [[LD1Fourv1d]].dsub1
250 ; CHECK: %dst3:fpr64 = COPY [[LD1Fourv1d]].dsub2
251 ; CHECK: %dst4:fpr64 = COPY [[LD1Fourv1d]].dsub3
252 ; CHECK: $d0 = COPY %dst1
253 ; CHECK: $d1 = COPY %dst2
254 ; CHECK: $d2 = COPY %dst3
255 ; CHECK: $d3 = COPY %dst4
256 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
257 %ptr:gpr(p0) = COPY $x0
258 %dst1:fpr(s64), %dst2:fpr(s64), %dst3:fpr(s64), %dst4:fpr(s64) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (s64))
259 $d0 = COPY %dst1(s64)
260 $d1 = COPY %dst2(s64)
261 $d2 = COPY %dst3(s64)
262 $d3 = COPY %dst4(s64)
263 RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
268 regBankSelected: true
269 tracksRegLiveness: true
272 liveins: $x0, $x1, $x2
273 ; CHECK-LABEL: name: LD1Fourv1d_p0
274 ; CHECK: liveins: $x0, $x1, $x2
275 ; CHECK: %ptr:gpr64sp = COPY $x0
276 ; CHECK: [[LD1Fourv1d:%[0-9]+]]:dddd = LD1Fourv1d %ptr :: (load (p0))
277 ; CHECK: %dst1:fpr64 = COPY [[LD1Fourv1d]].dsub0
278 ; CHECK: %dst2:fpr64 = COPY [[LD1Fourv1d]].dsub1
279 ; CHECK: %dst3:fpr64 = COPY [[LD1Fourv1d]].dsub2
280 ; CHECK: %dst4:fpr64 = COPY [[LD1Fourv1d]].dsub3
281 ; CHECK: $d0 = COPY %dst1
282 ; CHECK: $d1 = COPY %dst2
283 ; CHECK: $d2 = COPY %dst3
284 ; CHECK: $d3 = COPY %dst4
285 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3
286 %ptr:gpr(p0) = COPY $x0
287 %dst1:fpr(p0), %dst2:fpr(p0), %dst3:fpr(p0), %dst4:fpr(p0) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld4), %ptr(p0) :: (load (p0))
292 RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3