[TableGen] Fix validateOperandClass for non Phyical Reg (#118146)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-extract-vector-elt.mir
blob375506f300de0b5402922cfb8cf93110f1a7faeb
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-unknown-unknown -verify-machineinstrs -O0 -run-pass=instruction-select -global-isel-abort=1 %s -o - | FileCheck %s
3 ...
4 ---
5 name:            v2s32_fpr
6 alignment:       4
7 legalized:       true
8 regBankSelected: true
9 tracksRegLiveness: true
10 registers:
11   - { id: 0, class: fpr }
12   - { id: 1, class: fpr }
13   - { id: 2, class: gpr }
14   - { id: 3, class: fpr }
15 body:             |
16   bb.0:
17     liveins: $d0
19     ; CHECK-LABEL: name: v2s32_fpr
20     ; CHECK: liveins: $d0
21     ; CHECK-NEXT: {{  $}}
22     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
23     ; CHECK-NEXT: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
24     ; CHECK-NEXT: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.dsub
25     ; CHECK-NEXT: [[DUPi32_:%[0-9]+]]:fpr32 = DUPi32 [[INSERT_SUBREG]], 1
26     ; CHECK-NEXT: $s0 = COPY [[DUPi32_]]
27     ; CHECK-NEXT: RET_ReallyLR implicit $s0
28     %0:fpr(<2 x s32>) = COPY $d0
29     %2:gpr(s64) = G_CONSTANT i64 1
30     %3:fpr(s64) = COPY %2(s64)
31     %1:fpr(s32) = G_EXTRACT_VECTOR_ELT %0(<2 x s32>), %3(s64)
32     $s0 = COPY %1(s32)
33     RET_ReallyLR implicit $s0
35 ...
36 ---
37 name:            v2s32_fpr_idx0
38 alignment:       4
39 legalized:       true
40 regBankSelected: true
41 tracksRegLiveness: true
42 body:             |
43   bb.0:
44     liveins: $d0
45     ; CHECK-LABEL: name: v2s32_fpr_idx0
46     ; CHECK: liveins: $d0
47     ; CHECK-NEXT: {{  $}}
48     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
49     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY [[COPY]].ssub
50     ; CHECK-NEXT: $s0 = COPY [[COPY1]]
51     ; CHECK-NEXT: RET_ReallyLR implicit $s0
52     %0:fpr(<2 x s32>) = COPY $d0
53     %2:gpr(s64) = G_CONSTANT i64 0
54     %3:fpr(s64) = COPY %2(s64)
55     %1:fpr(s32) = G_EXTRACT_VECTOR_ELT %0(<2 x s32>), %3(s64)
56     $s0 = COPY %1(s32)
57     RET_ReallyLR implicit $s0
59 ...
60 ---
61 name:            v2s64_fpr
62 alignment:       4
63 legalized:       true
64 regBankSelected: true
65 tracksRegLiveness: true
66 registers:
67   - { id: 0, class: fpr }
68   - { id: 1, class: fpr }
69   - { id: 2, class: gpr }
70   - { id: 3, class: fpr }
71 body:             |
72   bb.0:
73     liveins: $q0
75     ; CHECK-LABEL: name: v2s64_fpr
76     ; CHECK: liveins: $q0
77     ; CHECK-NEXT: {{  $}}
78     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
79     ; CHECK-NEXT: [[DUPi64_:%[0-9]+]]:fpr64 = DUPi64 [[COPY]], 2
80     ; CHECK-NEXT: $d0 = COPY [[DUPi64_]]
81     ; CHECK-NEXT: RET_ReallyLR implicit $d0
82     %0:fpr(<2 x s64>) = COPY $q0
83     %2:gpr(s64) = G_CONSTANT i64 2
84     %3:fpr(s64) = COPY %2(s64)
85     %1:fpr(s64) = G_EXTRACT_VECTOR_ELT %0(<2 x s64>), %3(s64)
86     $d0 = COPY %1(s64)
87     RET_ReallyLR implicit $d0
89 ...
90 ---
91 name:            v4s16_fpr
92 alignment:       4
93 legalized:       true
94 regBankSelected: true
95 tracksRegLiveness: true
96 registers:
97   - { id: 0, class: fpr }
98   - { id: 1, class: fpr }
99   - { id: 2, class: gpr }
100   - { id: 3, class: fpr }
101 body:             |
102   bb.0:
103     liveins: $d0
105     ; CHECK-LABEL: name: v4s16_fpr
106     ; CHECK: liveins: $d0
107     ; CHECK-NEXT: {{  $}}
108     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
109     ; CHECK-NEXT: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
110     ; CHECK-NEXT: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.dsub
111     ; CHECK-NEXT: [[DUPi16_:%[0-9]+]]:fpr16 = DUPi16 [[INSERT_SUBREG]], 1
112     ; CHECK-NEXT: $h0 = COPY [[DUPi16_]]
113     ; CHECK-NEXT: RET_ReallyLR implicit $h0
114     %0:fpr(<4 x s16>) = COPY $d0
115     %2:gpr(s64) = G_CONSTANT i64 1
116     %3:fpr(s64) = COPY %2(s64)
117     %1:fpr(s16) = G_EXTRACT_VECTOR_ELT %0(<4 x s16>), %3(s64)
118     $h0 = COPY %1(s16)
119     RET_ReallyLR implicit $h0
123 name:            v8s16_fpr
124 alignment:       4
125 legalized:       true
126 regBankSelected: true
127 tracksRegLiveness: true
128 body:             |
129   bb.0:
130     liveins: $q0
131     ; CHECK-LABEL: name: v8s16_fpr
132     ; CHECK: liveins: $q0
133     ; CHECK-NEXT: {{  $}}
134     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
135     ; CHECK-NEXT: [[DUPi16_:%[0-9]+]]:fpr16 = DUPi16 [[COPY]], 1
136     ; CHECK-NEXT: $h0 = COPY [[DUPi16_]]
137     ; CHECK-NEXT: RET_ReallyLR implicit $h0
138     %0:fpr(<8 x s16>) = COPY $q0
139     %2:gpr(s64) = G_CONSTANT i64 1
140     %3:fpr(s64) = COPY %2(s64)
141     %1:fpr(s16) = G_EXTRACT_VECTOR_ELT %0(<8 x s16>), %3(s64)
142     $h0 = COPY %1(s16)
143     RET_ReallyLR implicit $h0
147 name:            v8s16_fpr_zext
148 alignment:       4
149 legalized:       true
150 regBankSelected: true
151 tracksRegLiveness: true
152 body:             |
153   bb.0:
154     liveins: $q0
155     ; CHECK-LABEL: name: v8s16_fpr_zext
156     ; CHECK: liveins: $q0
157     ; CHECK-NEXT: {{  $}}
158     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
159     ; CHECK-NEXT: [[DUPi16_:%[0-9]+]]:fpr16 = DUPi16 [[COPY]], 1
160     ; CHECK-NEXT: $h0 = COPY [[DUPi16_]]
161     ; CHECK-NEXT: RET_ReallyLR implicit $h0
162     %0:fpr(<8 x s16>) = COPY $q0
163     %1:gpr(s32) = G_CONSTANT i32 1
164     %2:gpr(s64) = G_ZEXT %1
165     %3:fpr(s64) = COPY %2(s64)
166     %4:fpr(s16) = G_EXTRACT_VECTOR_ELT %0(<8 x s16>), %3(s64)
167     $h0 = COPY %4(s16)
168     RET_ReallyLR implicit $h0
172 name:            v8s16_fpr_sext
173 alignment:       4
174 legalized:       true
175 regBankSelected: true
176 tracksRegLiveness: true
177 body:             |
178   bb.0:
179     liveins: $q0
180     ; CHECK-LABEL: name: v8s16_fpr_sext
181     ; CHECK: liveins: $q0
182     ; CHECK-NEXT: {{  $}}
183     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
184     ; CHECK-NEXT: [[DUPi16_:%[0-9]+]]:fpr16 = DUPi16 [[COPY]], 1
185     ; CHECK-NEXT: $h0 = COPY [[DUPi16_]]
186     ; CHECK-NEXT: RET_ReallyLR implicit $h0
187     %0:fpr(<8 x s16>) = COPY $q0
188     %1:gpr(s32) = G_CONSTANT i32 1
189     %2:gpr(s64) = G_SEXT %1
190     %3:fpr(s64) = COPY %2(s64)
191     %4:fpr(s16) = G_EXTRACT_VECTOR_ELT %0(<8 x s16>), %3(s64)
192     $h0 = COPY %4(s16)
193     RET_ReallyLR implicit $h0
197 name:            v8s16_fpr_trunc
198 alignment:       4
199 legalized:       true
200 regBankSelected: true
201 tracksRegLiveness: true
202 body:             |
203   bb.0:
204     liveins: $q0
205     ; CHECK-LABEL: name: v8s16_fpr_trunc
206     ; CHECK: liveins: $q0
207     ; CHECK-NEXT: {{  $}}
208     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
209     ; CHECK-NEXT: [[DUPi16_:%[0-9]+]]:fpr16 = DUPi16 [[COPY]], 1
210     ; CHECK-NEXT: $h0 = COPY [[DUPi16_]]
211     ; CHECK-NEXT: RET_ReallyLR implicit $h0
212     %0:fpr(<8 x s16>) = COPY $q0
213     %1:gpr(s64) = G_CONSTANT i64 1
214     %2:gpr(s32) = G_TRUNC %1
215     %3:gpr(s64) = G_SEXT %2
216     %4:fpr(s64) = COPY %3(s64)
217     %5:fpr(s16) = G_EXTRACT_VECTOR_ELT %0(<8 x s16>), %4(s64)
218     $h0 = COPY %5(s16)
219     RET_ReallyLR implicit $h0
222 name:            v16s8
223 alignment:       4
224 legalized:       true
225 regBankSelected: true
226 tracksRegLiveness: true
227 liveins:
228   - { reg: '$q0' }
229 body:             |
230   bb.1:
231     liveins: $q0
233     ; CHECK-LABEL: name: v16s8
234     ; CHECK: liveins: $q0
235     ; CHECK-NEXT: {{  $}}
236     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
237     ; CHECK-NEXT: [[UMOVvi8_:%[0-9]+]]:gpr32 = UMOVvi8 [[COPY]], 0
238     ; CHECK-NEXT: $w0 = COPY [[UMOVvi8_]]
239     ; CHECK-NEXT: RET_ReallyLR implicit $w0
240     %0:fpr(<16 x s8>) = COPY $q0
241     %2:gpr(s64) = G_CONSTANT i64 0
242     %1:fpr(s8) = G_EXTRACT_VECTOR_ELT %0(<16 x s8>), %2(s64)
243     %4:gpr(s8) = COPY %1(s8)
244     %3:gpr(s32) = G_ANYEXT %4(s8)
245     $w0 = COPY %3(s32)
246     RET_ReallyLR implicit $w0
250 name:            v8s8
251 alignment:       4
252 legalized:       true
253 regBankSelected: true
254 tracksRegLiveness: true
255 liveins:
256   - { reg: '$q0' }
257 body:             |
258   bb.1:
259     liveins: $d0
261     ; CHECK-LABEL: name: v8s8
262     ; CHECK: liveins: $d0
263     ; CHECK-NEXT: {{  $}}
264     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
265     ; CHECK-NEXT: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
266     ; CHECK-NEXT: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.dsub
267     ; CHECK-NEXT: [[UMOVvi8_:%[0-9]+]]:gpr32 = UMOVvi8 [[INSERT_SUBREG]], 0
268     ; CHECK-NEXT: $w0 = COPY [[UMOVvi8_]]
269     ; CHECK-NEXT: RET_ReallyLR implicit $w0
270     %0:fpr(<8 x s8>) = COPY $d0
271     %2:gpr(s64) = G_CONSTANT i64 0
272     %1:fpr(s8) = G_EXTRACT_VECTOR_ELT %0(<8 x s8>), %2(s64)
273     %4:gpr(s8) = COPY %1(s8)
274     %3:gpr(s32) = G_ANYEXT %4(s8)
275     $w0 = COPY %3(s32)
276     RET_ReallyLR implicit $w0
280 name:            v2p0
281 alignment:       4
282 legalized:       true
283 regBankSelected: true
284 tracksRegLiveness: true
285 body:             |
286   bb.0:
287     liveins: $q0
289     ; CHECK-LABEL: name: v2p0
290     ; CHECK: liveins: $q0
291     ; CHECK-NEXT: {{  $}}
292     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
293     ; CHECK-NEXT: [[DUPi64_:%[0-9]+]]:fpr64 = DUPi64 [[COPY]], 1
294     ; CHECK-NEXT: $d0 = COPY [[DUPi64_]]
295     ; CHECK-NEXT: RET_ReallyLR implicit $d0
296     %0:fpr(<2 x p0>) = COPY $q0
297     %2:gpr(s64) = G_CONSTANT i64 1
298     %1:fpr(p0) = G_EXTRACT_VECTOR_ELT %0(<2 x p0>), %2(s64)
299     $d0 = COPY %1(p0)
300     RET_ReallyLR implicit $d0