xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/combine-insert-vec-elt.mir (revision 6d90ac1e06f31cae9806a8815158e2851cf8e987)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -o - -mtriple=aarch64 -run-pass=aarch64-prelegalizer-combiner %s | FileCheck %s
3---
4name:            test_combine_consecutive
5body:             |
6  bb.1:
7    liveins: $w0, $w1
8
9    ; CHECK-LABEL: name: test_combine_consecutive
10    ; CHECK: liveins: $w0, $w1
11    ; CHECK-NEXT: {{  $}}
12    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
13    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
14    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)
15    ; CHECK-NEXT: $x0 = COPY [[BUILD_VECTOR]](<2 x s32>)
16    %0:_(s32) = COPY $w0
17    %1:_(s32) = COPY $w1
18    %2:_(<2 x s32>) = G_IMPLICIT_DEF
19    %7:_(s64) = G_CONSTANT i64 0
20    %8:_(s64) = G_CONSTANT i64 1
21    %3:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)
22    %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %3, %1(s32), %8(s64)
23    $x0 = COPY %4
24...
25---
26name:            test_combine_diff_order
27body:             |
28  bb.1:
29    liveins: $w0, $w1
30
31    ; CHECK-LABEL: name: test_combine_diff_order
32    ; CHECK: liveins: $w0, $w1
33    ; CHECK-NEXT: {{  $}}
34    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
35    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
36    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY]](s32)
37    ; CHECK-NEXT: $x0 = COPY [[BUILD_VECTOR]](<2 x s32>)
38    %0:_(s32) = COPY $w0
39    %1:_(s32) = COPY $w1
40    %2:_(<2 x s32>) = G_IMPLICIT_DEF
41    %7:_(s64) = G_CONSTANT i64 1
42    %8:_(s64) = G_CONSTANT i64 0
43    %3:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)
44    %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %3, %1(s32), %8(s64)
45    $x0 = COPY %4
46...
47---
48name:            test_combine_insert_vec_build_vec_idx_1
49body:             |
50  bb.1:
51    liveins: $w0, $w1, $w2, $w3
52
53    ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_idx_1
54    ; CHECK: liveins: $w0, $w1, $w2, $w3
55    ; CHECK-NEXT: {{  $}}
56    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
57    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w2
58    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w3
59    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
60    ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>)
61    %0:_(s32) = COPY $w0
62    %1:_(s32) = COPY $w1
63    %6:_(s32) = COPY $w2
64    %7:_(s32) = COPY $w3
65    %2:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %6, %7
66    %3:_(s64) = G_CONSTANT i64 1
67    %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)
68    $q0 = COPY %4
69...
70---
71name:            test_combine_insert_vec_build_vec_idx_oob
72body:             |
73  bb.1:
74    liveins: $w0, $w1, $w2, $w3
75
76    ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_idx_oob
77    ; CHECK: liveins: $w0, $w1, $w2, $w3
78    ; CHECK-NEXT: {{  $}}
79    ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF
80    ; CHECK-NEXT: $q0 = COPY [[DEF]](<4 x s32>)
81    %0:_(s32) = COPY $w0
82    %1:_(s32) = COPY $w1
83    %6:_(s32) = COPY $w2
84    %7:_(s32) = COPY $w3
85    %2:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %6, %7
86    %3:_(s64) = G_CONSTANT i64 4
87    %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)
88    $q0 = COPY %4
89...
90---
91name:            test_combine_insert_vec_build_vec_variable
92body:             |
93  bb.1:
94    liveins: $x0, $w1, $w2, $w3
95
96    ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_variable
97    ; CHECK: liveins: $x0, $w1, $w2, $w3
98    ; CHECK-NEXT: {{  $}}
99    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
100    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
101    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
102    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $w3
103    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)
104    ; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[BUILD_VECTOR]], [[COPY1]](s32), [[COPY]](s64)
105    ; CHECK-NEXT: $q0 = COPY [[IVEC]](<4 x s32>)
106    %0:_(s64) = COPY $x0
107    %1:_(s32) = COPY $w1
108    %6:_(s32) = COPY $w2
109    %7:_(s32) = COPY $w3
110    %2:_(<4 x s32>) = G_BUILD_VECTOR %1, %1, %6, %7
111    %3:_(s64) = COPY %0
112    %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %1(s32), %3(s64)
113    $q0 = COPY %4
114...
115---
116name:            test_combine_multiple_same_idx_1
117body:             |
118  bb.1:
119    liveins: $w0, $w1
120
121    ; CHECK-LABEL: name: test_combine_multiple_same_idx_1
122    ; CHECK: liveins: $w0, $w1
123    ; CHECK-NEXT: {{  $}}
124    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
125    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
126    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)
127    ; CHECK-NEXT: $x0 = COPY [[BUILD_VECTOR]](<2 x s32>)
128    %0:_(s32) = COPY $w0
129    %1:_(s32) = COPY $w1
130    %2:_(<2 x s32>) = G_IMPLICIT_DEF
131    %7:_(s64) = G_CONSTANT i64 0
132    %8:_(s64) = G_CONSTANT i64 1
133    %3:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)
134    %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %3, %1(s32), %8(s64)
135    %5:_(<2 x s32>) = G_INSERT_VECTOR_ELT %4, %1(s32), %8(s64)
136    $x0 = COPY %5
137...
138---
139name:            test_combine_multiple_same_idx_2
140body:             |
141  bb.1:
142    liveins: $w0, $w1
143
144    ; CHECK-LABEL: name: test_combine_multiple_same_idx_2
145    ; CHECK: liveins: $w0, $w1
146    ; CHECK-NEXT: {{  $}}
147    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w1
148    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY]](s32)
149    ; CHECK-NEXT: $x0 = COPY [[BUILD_VECTOR]](<2 x s32>)
150    %0:_(s32) = COPY $w0
151    %1:_(s32) = COPY $w1
152    %2:_(<2 x s32>) = G_IMPLICIT_DEF
153    %7:_(s64) = G_CONSTANT i64 0
154    %8:_(s64) = G_CONSTANT i64 1
155    %3:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)
156    %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %3, %1(s32), %7(s64)
157    %5:_(<2 x s32>) = G_INSERT_VECTOR_ELT %4, %1(s32), %8(s64)
158    $x0 = COPY %5
159...
160---
161name:            test_combine_missing_idx
162body:             |
163  bb.1:
164    liveins: $w0, $w1
165
166    ; CHECK-LABEL: name: test_combine_missing_idx
167    ; CHECK: liveins: $w0, $w1
168    ; CHECK-NEXT: {{  $}}
169    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
170    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
171    ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
172    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[DEF]](s32), [[COPY1]](s32), [[COPY]](s32)
173    ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>)
174    %0:_(s32) = COPY $w0
175    %1:_(s32) = COPY $w1
176    %2:_(<4 x s32>) = G_IMPLICIT_DEF
177    %7:_(s64) = G_CONSTANT i64 0
178    %8:_(s64) = G_CONSTANT i64 2
179    %9:_(s64) = G_CONSTANT i64 3
180    %10:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)
181    %11:_(<4 x s32>) = G_INSERT_VECTOR_ELT %10, %1(s32), %8(s64)
182    %12:_(<4 x s32>) = G_INSERT_VECTOR_ELT %11, %0(s32), %9(s64)
183    $q0 = COPY %12
184...
185---
186name:            test_combine_negative_idx
187body:             |
188  bb.1:
189    liveins: $x0
190    ; CHECK-LABEL: name: test_combine_negative_idx
191    ; CHECK: liveins: $x0
192    ; CHECK-NEXT: {{  $}}
193    ; CHECK-NEXT: RET_ReallyLR
194    %3:_(s8) = G_CONSTANT i8 127
195    %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)
196    %4:_(s8) = G_CONSTANT i8 -128
197    %5:_(s64) = G_CONSTANT i64 -1
198    %0:_(p0) = COPY $x0
199    %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)
200    G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))
201    RET_ReallyLR
202
203...
204---
205name:            test_idx_undef
206body:             |
207  bb.1:
208    liveins: $x0
209    ; CHECK-LABEL: name: test_idx_undef
210    ; CHECK: liveins: $x0
211    ; CHECK-NEXT: {{  $}}
212    ; CHECK-NEXT: RET_ReallyLR
213    %3:_(s8) = G_CONSTANT i8 127
214    %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)
215    %4:_(s8) = G_CONSTANT i8 -128
216    %5:_(s64) = G_IMPLICIT_DEF
217    %0:_(p0) = COPY $x0
218    %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)
219    G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))
220    RET_ReallyLR
221
222...
223---
224name:            test_elt_undef
225body:             |
226  bb.1:
227    liveins: $x0
228    ; CHECK-LABEL: name: test_elt_undef
229    ; CHECK: liveins: $x0
230    ; CHECK-NEXT: {{  $}}
231    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127
232    ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
233    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
234    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s8>) = G_BUILD_VECTOR [[C]](s8), [[C]](s8), [[C]](s8), [[DEF]](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), [[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)
235    ; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s8>), [[COPY]](p0) :: (store (<32 x s8>))
236    ; CHECK-NEXT: RET_ReallyLR
237    %3:_(s8) = G_CONSTANT i8 127
238    %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)
239    %4:_(s8) = G_IMPLICIT_DEF
240    %5:_(s64) = G_CONSTANT i64 3
241    %0:_(p0) = COPY $x0
242    %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)
243    G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))
244    RET_ReallyLR
245
246...
247---
248name:            test_elt_undef_with_freeze
249body:             |
250  bb.1:
251    liveins: $x0
252    ; CHECK-LABEL: name: test_elt_undef_with_freeze
253    ; CHECK: liveins: $x0
254    ; CHECK-NEXT: {{  $}}
255    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127
256    ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
257    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
258    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s8>) = G_BUILD_VECTOR [[C]](s8), [[C]](s8), [[C]](s8), [[DEF]](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), [[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)
259    ; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s8>), [[COPY]](p0) :: (store (<32 x s8>))
260    ; CHECK-NEXT: RET_ReallyLR
261    %3:_(s8) = G_CONSTANT i8 127
262    %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)
263    %4:_(s8) = G_IMPLICIT_DEF
264    %5:_(s64) = G_CONSTANT i64 3
265    %0:_(p0) = COPY $x0
266    %9:_(<32 x s8>) = G_FREEZE %2
267    %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %9, %4(s8), %5(s64)
268    G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))
269    RET_ReallyLR
270
271...
272---
273name:            test_insert_extract
274body:             |
275  bb.1:
276    liveins: $x0
277    ; CHECK-LABEL: name: test_insert_extract
278    ; CHECK: liveins: $x0
279    ; CHECK-NEXT: {{  $}}
280    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127
281    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
282    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 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), [[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)
283    ; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s8>), [[COPY]](p0) :: (store (<32 x s8>))
284    ; CHECK-NEXT: RET_ReallyLR
285    %3:_(s8) = G_CONSTANT i8 127
286    %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)
287    %5:_(s64) = G_CONSTANT i64 3
288    %4:_(s8) = G_EXTRACT_VECTOR_ELT %2, %5
289    %0:_(p0) = COPY $x0
290    %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)
291    G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))
292    RET_ReallyLR
293
294...
295---
296name:            test_idx_oob
297body:             |
298  bb.1:
299    liveins: $x0
300    ; CHECK-LABEL: name: test_idx_oob
301    ; CHECK: liveins: $x0
302    ; CHECK-NEXT: {{  $}}
303    ; CHECK-NEXT: RET_ReallyLR
304    %3:_(s8) = G_CONSTANT i8 127
305    %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)
306    %4:_(s8) = G_CONSTANT i8 -128
307    %5:_(s64) = G_CONSTANT i64 1024
308    %0:_(p0) = COPY $x0
309    %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)
310    G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))
311    RET_ReallyLR
312
313...
314