[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-extract-vector-elt.mir
blob1272d29c2ddc03d2c99f699f450024a7eb306152
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-linux-gnu -O0 -run-pass=legalizer -global-isel-abort=0 -verify-machineinstrs %s -o - | FileCheck %s
4 ---
5 name:            test_eve_1
6 body: |
7   bb.0:
8     liveins: $q0
9     ; CHECK-LABEL: name: test_eve_1
10     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
11     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
12     ; CHECK: [[EVEC:%[0-9]+]]:_(s64) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x s64>), [[C]](s64)
13     ; CHECK: $x0 = COPY [[EVEC]](s64)
14     ; CHECK: RET_ReallyLR
15     %0:_(<2 x s64>) = COPY $q0
16     %1:_(s32) = G_CONSTANT i32 1
17     %2:_(s64) = G_EXTRACT_VECTOR_ELT %0(<2 x s64>), %1(s32)
18     $x0 = COPY %2(s64)
19     RET_ReallyLR
20 ...
21 ---
22 name:            test_eve_v2s1
23 body: |
24   bb.0:
25     liveins: $q0, $q1, $x0
26     ; CHECK-LABEL: name: test_eve_v2s1
27     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
28     ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
29     ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $x0
30     ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(eq), [[COPY]](<2 x s64>), [[COPY1]]
31     ; CHECK: [[COPY3:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
32     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
33     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
34     ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY3]], [[BUILD_VECTOR]](<2 x s64>)
35     ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
36     ; CHECK: [[EVEC:%[0-9]+]]:_(s64) = G_EXTRACT_VECTOR_ELT [[ASHR]](<2 x s64>), [[COPY2]](s64)
37     ; CHECK: [[COPY4:%[0-9]+]]:_(s64) = COPY [[EVEC]](s64)
38     ; CHECK: $x0 = COPY [[COPY4]](s64)
39     ; CHECK: RET_ReallyLR
40     %0:_(<2 x s64>) = COPY $q0
41     %1:_(<2 x s64>) = COPY $q1
42     %2:_(s64) = COPY $x0
43     %3:_(<2 x s1>) = G_ICMP intpred(eq), %0(<2 x s64>), %1
44     %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<2 x s1>), %2:_(s64)
45     %5:_(s64) = G_ANYEXT %4(s1)
46     $x0 = COPY %5(s64)
47     RET_ReallyLR
48 ...
49 ---
50 name:            test_eve_v4s1
51 body: |
52   bb.0:
53     liveins: $q0, $q1, $x0
54     ; CHECK-LABEL: name: test_eve_v4s1
55     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
56     ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
57     ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $x0
58     ; CHECK: [[ICMP:%[0-9]+]]:_(<4 x s32>) = G_ICMP intpred(eq), [[COPY]](<4 x s32>), [[COPY1]]
59     ; CHECK: [[COPY3:%[0-9]+]]:_(<4 x s32>) = COPY [[ICMP]](<4 x s32>)
60     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
61     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
62     ; CHECK: [[SHL:%[0-9]+]]:_(<4 x s32>) = G_SHL [[COPY3]], [[BUILD_VECTOR]](<4 x s32>)
63     ; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<4 x s32>)
64     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[ASHR]](<4 x s32>), [[COPY2]](s64)
65     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[EVEC]](s32)
66     ; CHECK: $x0 = COPY [[ANYEXT]](s64)
67     ; CHECK: RET_ReallyLR
68     %0:_(<4 x s32>) = COPY $q0
69     %1:_(<4 x s32>) = COPY $q1
70     %2:_(s64) = COPY $x0
71     %3:_(<4 x s1>) = G_ICMP intpred(eq), %0(<4 x s32>), %1
72     %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<4 x s1>), %2:_(s64)
73     %5:_(s64) = G_ANYEXT %4(s1)
74     $x0 = COPY %5(s64)
75     RET_ReallyLR
76 ...
77 ---
78 name:            test_eve_v8s1
79 body: |
80   bb.0:
81     liveins: $q0, $q1, $x0
82     ; CHECK-LABEL: name: test_eve_v8s1
83     ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
84     ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
85     ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $x0
86     ; CHECK: [[ICMP:%[0-9]+]]:_(<8 x s16>) = G_ICMP intpred(eq), [[COPY]](<8 x s16>), [[COPY1]]
87     ; CHECK: [[COPY3:%[0-9]+]]:_(<8 x s16>) = COPY [[ICMP]](<8 x s16>)
88     ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 15
89     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16)
90     ; CHECK: [[SHL:%[0-9]+]]:_(<8 x s16>) = G_SHL [[COPY3]], [[BUILD_VECTOR]](<8 x s16>)
91     ; CHECK: [[ASHR:%[0-9]+]]:_(<8 x s16>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<8 x s16>)
92     ; CHECK: [[EVEC:%[0-9]+]]:_(s16) = G_EXTRACT_VECTOR_ELT [[ASHR]](<8 x s16>), [[COPY2]](s64)
93     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[EVEC]](s16)
94     ; CHECK: $x0 = COPY [[ANYEXT]](s64)
95     ; CHECK: RET_ReallyLR
96     %0:_(<8 x s16>) = COPY $q0
97     %1:_(<8 x s16>) = COPY $q1
98     %2:_(s64) = COPY $x0
99     %3:_(<8 x s1>) = G_ICMP intpred(eq), %0(<8 x s16>), %1
100     %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<8 x s1>), %2:_(s64)
101     %5:_(s64) = G_ANYEXT %4(s1)
102     $x0 = COPY %5(s64)
103     RET_ReallyLR
106 name:            test_eve_v16s1
107 body: |
108   bb.0:
109     liveins: $q0, $q1, $x0
110     ; CHECK-LABEL: name: test_eve_v16s1
111     ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
112     ; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
113     ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $x0
114     ; CHECK: [[ICMP:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY]](<16 x s8>), [[COPY1]]
115     ; CHECK: [[COPY3:%[0-9]+]]:_(<16 x s8>) = COPY [[ICMP]](<16 x s8>)
116     ; CHECK: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 7
117     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8)
118     ; CHECK: [[SHL:%[0-9]+]]:_(<16 x s8>) = G_SHL [[COPY3]], [[BUILD_VECTOR]](<16 x s8>)
119     ; CHECK: [[ASHR:%[0-9]+]]:_(<16 x s8>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<16 x s8>)
120     ; CHECK: [[EVEC:%[0-9]+]]:_(s8) = G_EXTRACT_VECTOR_ELT [[ASHR]](<16 x s8>), [[COPY2]](s64)
121     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[EVEC]](s8)
122     ; CHECK: $x0 = COPY [[ANYEXT]](s64)
123     ; CHECK: RET_ReallyLR
124     %0:_(<16 x s8>) = COPY $q0
125     %1:_(<16 x s8>) = COPY $q1
126     %2:_(s64) = COPY $x0
127     %3:_(<16 x s1>) = G_ICMP intpred(eq), %0(<16 x s8>), %1
128     %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<16 x s1>), %2:_(s64)
129     %5:_(s64) = G_ANYEXT %4(s1)
130     $x0 = COPY %5(s64)
131     RET_ReallyLR
134 name:            test_eve_v2p0
135 body: |
136   bb.0:
137     liveins: $q0, $q1, $x0
138     ; CHECK-LABEL: name: test_eve_v2p0
139     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $q0
140     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x0
141     ; CHECK: [[EVEC:%[0-9]+]]:_(p0) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x p0>), [[COPY1]](s64)
142     ; CHECK: $x0 = COPY [[EVEC]](p0)
143     ; CHECK: RET_ReallyLR
144     %0:_(<2 x p0>) = COPY $q0
145     %2:_(s64) = COPY $x0
146     %3:_(p0) = G_EXTRACT_VECTOR_ELT %0:_(<2 x p0>), %2:_(s64)
147     $x0 = COPY %3(p0)
148     RET_ReallyLR
151 name:            test_eve_v4s64
152 body: |
153   bb.0:
154     liveins: $q0, $q1, $x0
155     ; CHECK-LABEL: name: test_eve_v4s64
156     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
157     ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
158     ; CHECK: %idx:_(s32) = G_CONSTANT i32 1
159     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
160     ; CHECK: [[EVEC:%[0-9]+]]:_(s64) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x s64>), [[C]](s64)
161     ; CHECK: $x0 = COPY [[EVEC]](s64)
162     ; CHECK: RET_ReallyLR
163     %0:_(<2 x s64>) = COPY $q0
164     %1:_(<2 x s64>) = COPY $q1
165     %concat:_(<4 x s64>) = G_CONCAT_VECTORS %0(<2 x s64>), %1(<2 x s64>)
166     %idx:_(s32) = G_CONSTANT i32 1
167     %idxprom:_(s64) = G_SEXT %idx(s32)
168     %3:_(s64) = G_EXTRACT_VECTOR_ELT %concat:_(<4 x s64>), %idxprom:_(s64)
169     $x0 = COPY %3(s64)
170     RET_ReallyLR
173 name:            test_eve_v4s64_unknown_idx
174 body: |
175   bb.0:
176     liveins: $q0, $q1, $x0
177     ; CHECK-LABEL: name: test_eve_v4s64_unknown_idx
178     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
179     ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
180     ; CHECK: %idx:_(s64) = COPY $x0
181     ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0
182     ; CHECK: G_STORE [[COPY]](<2 x s64>), [[FRAME_INDEX]](p0) :: (store (<2 x s64>) into %stack.0, align 32)
183     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
184     ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)
185     ; CHECK: G_STORE [[COPY1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into %stack.0 + 16, basealign 32)
186     ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 3
187     ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND %idx, [[C1]]
188     ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
189     ; CHECK: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C2]]
190     ; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)
191     ; CHECK: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD1]](p0) :: (load (s64))
192     ; CHECK: $x0 = COPY [[LOAD]](s64)
193     ; CHECK: RET_ReallyLR
194     %0:_(<2 x s64>) = COPY $q0
195     %1:_(<2 x s64>) = COPY $q1
196     %concat:_(<4 x s64>) = G_CONCAT_VECTORS %0(<2 x s64>), %1(<2 x s64>)
197     %idx:_(s64) = COPY $x0
198     %3:_(s64) = G_EXTRACT_VECTOR_ELT %concat:_(<4 x s64>), %idx:_(s64)
199     $x0 = COPY %3(s64)
200     RET_ReallyLR
203 name:            test_eve_v8s32
204 body: |
205   bb.0:
206     liveins: $q0, $q1, $x0
207     ; CHECK-LABEL: name: test_eve_v8s32
208     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
209     ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
210     ; CHECK: %idx:_(s32) = G_CONSTANT i32 1
211     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
212     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[COPY]](<4 x s32>), [[C]](s64)
213     ; CHECK: $w0 = COPY [[EVEC]](s32)
214     ; CHECK: RET_ReallyLR
215     %0:_(<4 x s32>) = COPY $q0
216     %1:_(<4 x s32>) = COPY $q1
217     %concat:_(<8 x s32>) = G_CONCAT_VECTORS %0(<4 x s32>), %1(<4 x s32>)
218     %idx:_(s32) = G_CONSTANT i32 1
219     %idxprom:_(s64) = G_SEXT %idx(s32)
220     %3:_(s32) = G_EXTRACT_VECTOR_ELT %concat:_(<8 x s32>), %idxprom:_(s64)
221     $w0 = COPY %3(s32)
222     RET_ReallyLR
225 name:            test_eve_v16s16
226 body: |
227   bb.0:
228     liveins: $q0, $q1, $x0
229     ; CHECK-LABEL: name: test_eve_v16s16
230     ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
231     ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
232     ; CHECK: %idx:_(s32) = G_CONSTANT i32 9
233     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
234     ; CHECK: [[EVEC:%[0-9]+]]:_(s16) = G_EXTRACT_VECTOR_ELT [[COPY1]](<8 x s16>), [[C]](s64)
235     ; CHECK: %ext:_(s32) = G_ANYEXT [[EVEC]](s16)
236     ; CHECK: $w0 = COPY %ext(s32)
237     ; CHECK: RET_ReallyLR
238     %0:_(<8 x s16>) = COPY $q0
239     %1:_(<8 x s16>) = COPY $q1
240     %concat:_(<16 x s16>) = G_CONCAT_VECTORS %0(<8 x s16>), %1(<8 x s16>)
241     %idx:_(s32) = G_CONSTANT i32 9
242     %idxprom:_(s64) = G_SEXT %idx(s32)
243     %3:_(s16) = G_EXTRACT_VECTOR_ELT %concat:_(<16 x s16>), %idxprom:_(s64)
244     %ext:_(s32) = G_ANYEXT %3
245     $w0 = COPY %ext(s32)
246     RET_ReallyLR
249 name:            test_eve_v4p0
250 body: |
251   bb.0:
252     liveins: $x0
253     ; CHECK-LABEL: name: test_eve_v4p0
254     ; CHECK: [[DEF:%[0-9]+]]:_(p0) = G_IMPLICIT_DEF
255     ; CHECK: %idx:_(s64) = G_CONSTANT i64 1
256     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[DEF]](p0), [[DEF]](p0)
257     ; CHECK: %eve:_(p0) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<2 x p0>), %idx(s64)
258     ; CHECK: $x0 = COPY %eve(p0)
259     ; CHECK: RET_ReallyLR
260     %vec:_(<4 x p0>) = G_IMPLICIT_DEF
261     %idx:_(s64) = G_CONSTANT i64 1
262     %eve:_(p0) = G_EXTRACT_VECTOR_ELT %vec:_(<4 x p0>), %idx:_(s64)
263     $x0 = COPY %eve(p0)
264     RET_ReallyLR
267 name:            cant_legalize_different_address_spaces
268 body: |
269   bb.0:
270     liveins: $x0
271     ; Make sure that the pointer legalization rules don't apply when we have
272     ; different address spaces.
274     ; CHECK-LABEL: name: cant_legalize_different_address_spaces
275     ; CHECK: %vec:_(<4 x p1>) = G_IMPLICIT_DEF
276     ; CHECK: %idx:_(s64) = G_CONSTANT i64 1
277     ; CHECK: %eve:_(p0) = G_EXTRACT_VECTOR_ELT %vec(<4 x p1>), %idx(s64)
278     ; CHECK: $x0 = COPY %eve(p0)
279     ; CHECK: RET_ReallyLR
280     %vec:_(<4 x p1>) = G_IMPLICIT_DEF
281     %idx:_(s64) = G_CONSTANT i64 1
282     %eve:_(p0) = G_EXTRACT_VECTOR_ELT %vec:_(<4 x p1>), %idx:_(s64)
283     $x0 = COPY %eve(p0)
284     RET_ReallyLR