[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-ld4.mir
blobec956ded6efff71ccd63d8014b699a93db4a0f6c
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
3 ...
4 ---
5 name:            LD4Fourv8b
6 legalized:       true
7 regBankSelected: true
8 tracksRegLiveness: true
9 body:             |
10   bb.0:
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
32 ...
33 ---
34 name:            LD4Fourv16b
35 legalized:       true
36 regBankSelected: true
37 tracksRegLiveness: true
38 body:             |
39   bb.0:
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
61 ...
62 ---
63 name:            LD4Fourv4h
64 legalized:       true
65 regBankSelected: true
66 tracksRegLiveness: true
67 body:             |
68   bb.0:
69     liveins: $x0
70     ; CHECK-LABEL: name: LD4Fourv4h
71     ; CHECK: liveins: $x0
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
90 ...
91 ---
92 name:            LD4Fourv8h
93 legalized:       true
94 regBankSelected: true
95 tracksRegLiveness: true
96 body:             |
97   bb.0:
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
121 name:            LD4Fourv2s
122 legalized:       true
123 regBankSelected: true
124 tracksRegLiveness: true
125 body:             |
126   bb.0:
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
150 name:            LD4Fourv4s
151 legalized:       true
152 regBankSelected: true
153 tracksRegLiveness: true
154 body:             |
155   bb.0:
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
180 legalized:       true
181 regBankSelected: true
182 tracksRegLiveness: true
183 body:             |
184   bb.0:
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
209 legalized:       true
210 regBankSelected: true
211 tracksRegLiveness: true
212 body:             |
213   bb.0:
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
237 name:            LD1Fourv1d_s64
238 legalized:       true
239 regBankSelected: true
240 tracksRegLiveness: true
241 body:             |
242   bb.0:
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
266 name:            LD1Fourv1d_p0
267 legalized:       true
268 regBankSelected: true
269 tracksRegLiveness: true
270 body:             |
271   bb.0:
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))
288     $d0 = COPY %dst1(p0)
289     $d1 = COPY %dst2(p0)
290     $d2 = COPY %dst3(p0)
291     $d3 = COPY %dst4(p0)
292     RET_ReallyLR implicit $d0, implicit $d1, implicit $d2, implicit $d3