[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-icmp-of-binop-to-icmp-of-0.mir
blob966b781463fd09250174d968cd269099a7d68b53
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
4 # Test:
5 #  (X + Y) == X --> Y == 0
6 #  (X - Y) == X --> Y == 0
7 #  (X ^ Y) == X --> Y == 0
8 #  (X + Y) != X --> Y != 0
9 #  (X - Y) != X --> Y != 0
10 #  (X ^ Y) != X --> Y != 0
12 # And all commuted cases.
14 ...
15 ---
16 name:            add_scalar_eq
17 tracksRegLiveness: true
18 body:             |
19   bb.0:
20     liveins: $w0, $w1
21     ; CHECK-LABEL: name: add_scalar_eq
22     ; CHECK: liveins: $w0, $w1
23     ; CHECK-NEXT: {{  $}}
24     ; CHECK-NEXT: %y:_(s32) = COPY $w1
25     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
26     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]]
27     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
28     ; CHECK-NEXT: $w0 = COPY %ext(s32)
29     ; CHECK-NEXT: RET_ReallyLR implicit $w0
30     %x:_(s32) = COPY $w0
31     %y:_(s32) = COPY $w1
32     %op:_(s32) = G_ADD %x, %y
33     %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x
34     %ext:_(s32) = G_ZEXT %cmp(s1)
35     $w0 = COPY %ext(s32)
36     RET_ReallyLR implicit $w0
37 ...
38 ---
39 name:            add_vector_eq
40 tracksRegLiveness: true
41 body:             |
42   bb.0:
43     liveins: $q0, $q1
44     ; CHECK-LABEL: name: add_vector_eq
45     ; CHECK: liveins: $q0, $q1
46     ; CHECK-NEXT: {{  $}}
47     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
48     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
49     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
50     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]]
51     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
52     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
53     ; CHECK-NEXT: RET_ReallyLR implicit $d0
54     %x:_(<4 x s32>) = COPY $q0
55     %y:_(<4 x s32>) = COPY $q1
56     %op:_(<4 x s32>) = G_ADD %x, %y
57     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x
58     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
59     $d0 = COPY %ext(<4 x s16>)
60     RET_ReallyLR implicit $d0
61 ...
62 ---
63 name:            add_scalar_eq_commuted_in_op
64 tracksRegLiveness: true
65 body:             |
66   bb.0:
67     liveins: $w0, $w1
68     ; CHECK-LABEL: name: add_scalar_eq_commuted_in_op
69     ; CHECK: liveins: $w0, $w1
70     ; CHECK-NEXT: {{  $}}
71     ; CHECK-NEXT: %y:_(s32) = COPY $w1
72     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
73     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]]
74     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
75     ; CHECK-NEXT: $w0 = COPY %ext(s32)
76     ; CHECK-NEXT: RET_ReallyLR implicit $w0
77     %x:_(s32) = COPY $w0
78     %y:_(s32) = COPY $w1
79     %op:_(s32) = G_ADD %y, %x
80     %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x
81     %ext:_(s32) = G_ZEXT %cmp(s1)
82     $w0 = COPY %ext(s32)
83     RET_ReallyLR implicit $w0
84 ...
85 ---
86 name:            add_vector_eq_commuted_in_op
87 tracksRegLiveness: true
88 body:             |
89   bb.0:
90     liveins: $q0, $q1
91     ; CHECK-LABEL: name: add_vector_eq_commuted_in_op
92     ; CHECK: liveins: $q0, $q1
93     ; CHECK-NEXT: {{  $}}
94     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
95     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
96     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
97     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]]
98     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
99     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
100     ; CHECK-NEXT: RET_ReallyLR implicit $d0
101     %x:_(<4 x s32>) = COPY $q0
102     %y:_(<4 x s32>) = COPY $q1
103     %op:_(<4 x s32>) = G_ADD %y, %x
104     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x
105     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
106     $d0 = COPY %ext(<4 x s16>)
107     RET_ReallyLR implicit $d0
110 name:            add_scalar_eq_commuted_in_cmp
111 tracksRegLiveness: true
112 body:             |
113   bb.0:
114     liveins: $w0, $w1
115     ; CHECK-LABEL: name: add_scalar_eq_commuted_in_cmp
116     ; CHECK: liveins: $w0, $w1
117     ; CHECK-NEXT: {{  $}}
118     ; CHECK-NEXT: %y:_(s32) = COPY $w1
119     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
120     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]]
121     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
122     ; CHECK-NEXT: $w0 = COPY %ext(s32)
123     ; CHECK-NEXT: RET_ReallyLR implicit $w0
124     %x:_(s32) = COPY $w0
125     %y:_(s32) = COPY $w1
126     %op:_(s32) = G_ADD %x, %y
127     %cmp:_(s1) = G_ICMP intpred(eq), %x(s32), %op
128     %ext:_(s32) = G_ZEXT %cmp(s1)
129     $w0 = COPY %ext(s32)
130     RET_ReallyLR implicit $w0
133 name:            add_vector_eq_commuted_in_cmp
134 tracksRegLiveness: true
135 body:             |
136   bb.0:
137     liveins: $q0, $q1
138     ; CHECK-LABEL: name: add_vector_eq_commuted_in_cmp
139     ; CHECK: liveins: $q0, $q1
140     ; CHECK-NEXT: {{  $}}
141     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
142     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
143     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
144     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]]
145     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
146     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
147     ; CHECK-NEXT: RET_ReallyLR implicit $d0
148     %x:_(<4 x s32>) = COPY $q0
149     %y:_(<4 x s32>) = COPY $q1
150     %op:_(<4 x s32>) = G_ADD %x, %y
151     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %x(<4 x s32>), %op
152     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
153     $d0 = COPY %ext(<4 x s16>)
154     RET_ReallyLR implicit $d0
157 name:            xor_scalar_eq
158 tracksRegLiveness: true
159 body:             |
160   bb.0:
161     liveins: $w0, $w1
162     ; CHECK-LABEL: name: xor_scalar_eq
163     ; CHECK: liveins: $w0, $w1
164     ; CHECK-NEXT: {{  $}}
165     ; CHECK-NEXT: %y:_(s32) = COPY $w1
166     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
167     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]]
168     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
169     ; CHECK-NEXT: $w0 = COPY %ext(s32)
170     ; CHECK-NEXT: RET_ReallyLR implicit $w0
171     %x:_(s32) = COPY $w0
172     %y:_(s32) = COPY $w1
173     %op:_(s32) = G_XOR %x, %y
174     %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x
175     %ext:_(s32) = G_ZEXT %cmp(s1)
176     $w0 = COPY %ext(s32)
177     RET_ReallyLR implicit $w0
180 name:            xor_vector_eq
181 tracksRegLiveness: true
182 body:             |
183   bb.0:
184     liveins: $q0, $q1
185     ; CHECK-LABEL: name: xor_vector_eq
186     ; CHECK: liveins: $q0, $q1
187     ; CHECK-NEXT: {{  $}}
188     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
189     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
190     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
191     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]]
192     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
193     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
194     ; CHECK-NEXT: RET_ReallyLR implicit $d0
195     %x:_(<4 x s32>) = COPY $q0
196     %y:_(<4 x s32>) = COPY $q1
197     %op:_(<4 x s32>) = G_XOR %x, %y
198     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x
199     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
200     $d0 = COPY %ext(<4 x s16>)
201     RET_ReallyLR implicit $d0
204 name:            xor_scalar_eq_commuted_in_op
205 tracksRegLiveness: true
206 body:             |
207   bb.0:
208     liveins: $w0, $w1
209     ; CHECK-LABEL: name: xor_scalar_eq_commuted_in_op
210     ; CHECK: liveins: $w0, $w1
211     ; CHECK-NEXT: {{  $}}
212     ; CHECK-NEXT: %y:_(s32) = COPY $w1
213     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
214     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]]
215     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
216     ; CHECK-NEXT: $w0 = COPY %ext(s32)
217     ; CHECK-NEXT: RET_ReallyLR implicit $w0
218     %x:_(s32) = COPY $w0
219     %y:_(s32) = COPY $w1
220     %op:_(s32) = G_XOR %y, %x
221     %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x
222     %ext:_(s32) = G_ZEXT %cmp(s1)
223     $w0 = COPY %ext(s32)
224     RET_ReallyLR implicit $w0
227 name:            xor_vector_eq_commuted_in_op
228 tracksRegLiveness: true
229 body:             |
230   bb.0:
231     liveins: $q0, $q1
232     ; CHECK-LABEL: name: xor_vector_eq_commuted_in_op
233     ; CHECK: liveins: $q0, $q1
234     ; CHECK-NEXT: {{  $}}
235     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
236     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
237     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
238     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]]
239     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
240     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
241     ; CHECK-NEXT: RET_ReallyLR implicit $d0
242     %x:_(<4 x s32>) = COPY $q0
243     %y:_(<4 x s32>) = COPY $q1
244     %op:_(<4 x s32>) = G_XOR %y, %x
245     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x
246     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
247     $d0 = COPY %ext(<4 x s16>)
248     RET_ReallyLR implicit $d0
251 name:            xor_scalar_eq_commuted_in_cmp
252 tracksRegLiveness: true
253 body:             |
254   bb.0:
255     liveins: $w0, $w1
256     ; CHECK-LABEL: name: xor_scalar_eq_commuted_in_cmp
257     ; CHECK: liveins: $w0, $w1
258     ; CHECK-NEXT: {{  $}}
259     ; CHECK-NEXT: %y:_(s32) = COPY $w1
260     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
261     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]]
262     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
263     ; CHECK-NEXT: $w0 = COPY %ext(s32)
264     ; CHECK-NEXT: RET_ReallyLR implicit $w0
265     %x:_(s32) = COPY $w0
266     %y:_(s32) = COPY $w1
267     %op:_(s32) = G_XOR %x, %y
268     %cmp:_(s1) = G_ICMP intpred(eq), %x(s32), %op
269     %ext:_(s32) = G_ZEXT %cmp(s1)
270     $w0 = COPY %ext(s32)
271     RET_ReallyLR implicit $w0
274 name:            xor_vector_eq_commuted_in_cmp
275 tracksRegLiveness: true
276 body:             |
277   bb.0:
278     liveins: $q0, $q1
279     ; CHECK-LABEL: name: xor_vector_eq_commuted_in_cmp
280     ; CHECK: liveins: $q0, $q1
281     ; CHECK-NEXT: {{  $}}
282     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
283     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
284     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
285     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]]
286     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
287     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
288     ; CHECK-NEXT: RET_ReallyLR implicit $d0
289     %x:_(<4 x s32>) = COPY $q0
290     %y:_(<4 x s32>) = COPY $q1
291     %op:_(<4 x s32>) = G_XOR %x, %y
292     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %x(<4 x s32>), %op
293     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
294     $d0 = COPY %ext(<4 x s16>)
295     RET_ReallyLR implicit $d0
298 name:            sub_scalar_eq
299 tracksRegLiveness: true
300 body:             |
301   bb.0:
302     liveins: $w0, $w1
303     ; CHECK-LABEL: name: sub_scalar_eq
304     ; CHECK: liveins: $w0, $w1
305     ; CHECK-NEXT: {{  $}}
306     ; CHECK-NEXT: %y:_(s32) = COPY $w1
307     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
308     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]]
309     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
310     ; CHECK-NEXT: $w0 = COPY %ext(s32)
311     ; CHECK-NEXT: RET_ReallyLR implicit $w0
312     %x:_(s32) = COPY $w0
313     %y:_(s32) = COPY $w1
314     %op:_(s32) = G_SUB %x, %y
315     %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x
316     %ext:_(s32) = G_ZEXT %cmp(s1)
317     $w0 = COPY %ext(s32)
318     RET_ReallyLR implicit $w0
321 name:            sub_vector_eq
322 tracksRegLiveness: true
323 body:             |
324   bb.0:
325     liveins: $q0, $q1
326     ; CHECK-LABEL: name: sub_vector_eq
327     ; CHECK: liveins: $q0, $q1
328     ; CHECK-NEXT: {{  $}}
329     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
330     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
331     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
332     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]]
333     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
334     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
335     ; CHECK-NEXT: RET_ReallyLR implicit $d0
336     %x:_(<4 x s32>) = COPY $q0
337     %y:_(<4 x s32>) = COPY $q1
338     %op:_(<4 x s32>) = G_SUB %x, %y
339     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x
340     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
341     $d0 = COPY %ext(<4 x s16>)
342     RET_ReallyLR implicit $d0
345 name:            sub_scalar_eq_commuted_in_cmp
346 tracksRegLiveness: true
347 body:             |
348   bb.0:
349     liveins: $w0, $w1
350     ; CHECK-LABEL: name: sub_scalar_eq_commuted_in_cmp
351     ; CHECK: liveins: $w0, $w1
352     ; CHECK-NEXT: {{  $}}
353     ; CHECK-NEXT: %y:_(s32) = COPY $w1
354     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
355     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]]
356     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
357     ; CHECK-NEXT: $w0 = COPY %ext(s32)
358     ; CHECK-NEXT: RET_ReallyLR implicit $w0
359     %x:_(s32) = COPY $w0
360     %y:_(s32) = COPY $w1
361     %op:_(s32) = G_SUB %x, %y
362     %cmp:_(s1) = G_ICMP intpred(eq), %x(s32), %op
363     %ext:_(s32) = G_ZEXT %cmp(s1)
364     $w0 = COPY %ext(s32)
365     RET_ReallyLR implicit $w0
368 name:            sub_vector_eq_commuted_in_cmp
369 tracksRegLiveness: true
370 body:             |
371   bb.0:
372     liveins: $q0, $q1
373     ; CHECK-LABEL: name: sub_vector_eq_commuted_in_cmp
374     ; CHECK: liveins: $q0, $q1
375     ; CHECK-NEXT: {{  $}}
376     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
377     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
378     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
379     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]]
380     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
381     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
382     ; CHECK-NEXT: RET_ReallyLR implicit $d0
383     %x:_(<4 x s32>) = COPY $q0
384     %y:_(<4 x s32>) = COPY $q1
385     %op:_(<4 x s32>) = G_SUB %x, %y
386     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %x(<4 x s32>), %op
387     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
388     $d0 = COPY %ext(<4 x s16>)
389     RET_ReallyLR implicit $d0
392 name:            add_scalar_ne
393 tracksRegLiveness: true
394 body:             |
395   bb.0:
396     liveins: $w0, $w1
397     ; CHECK-LABEL: name: add_scalar_ne
398     ; CHECK: liveins: $w0, $w1
399     ; CHECK-NEXT: {{  $}}
400     ; CHECK-NEXT: %y:_(s32) = COPY $w1
401     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
402     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]]
403     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
404     ; CHECK-NEXT: $w0 = COPY %ext(s32)
405     ; CHECK-NEXT: RET_ReallyLR implicit $w0
406     %x:_(s32) = COPY $w0
407     %y:_(s32) = COPY $w1
408     %op:_(s32) = G_ADD %x, %y
409     %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x
410     %ext:_(s32) = G_ZEXT %cmp(s1)
411     $w0 = COPY %ext(s32)
412     RET_ReallyLR implicit $w0
415 name:            add_vector_ne
416 tracksRegLiveness: true
417 body:             |
418   bb.0:
419     liveins: $q0, $q1
420     ; CHECK-LABEL: name: add_vector_ne
421     ; CHECK: liveins: $q0, $q1
422     ; CHECK-NEXT: {{  $}}
423     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
424     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
425     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
426     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]]
427     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
428     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
429     ; CHECK-NEXT: RET_ReallyLR implicit $d0
430     %x:_(<4 x s32>) = COPY $q0
431     %y:_(<4 x s32>) = COPY $q1
432     %op:_(<4 x s32>) = G_ADD %x, %y
433     %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x
434     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
435     $d0 = COPY %ext(<4 x s16>)
436     RET_ReallyLR implicit $d0
439 name:            add_scalar_ne_commuted_in_op
440 tracksRegLiveness: true
441 body:             |
442   bb.0:
443     liveins: $w0, $w1
444     ; CHECK-LABEL: name: add_scalar_ne_commuted_in_op
445     ; CHECK: liveins: $w0, $w1
446     ; CHECK-NEXT: {{  $}}
447     ; CHECK-NEXT: %y:_(s32) = COPY $w1
448     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
449     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]]
450     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
451     ; CHECK-NEXT: $w0 = COPY %ext(s32)
452     ; CHECK-NEXT: RET_ReallyLR implicit $w0
453     %x:_(s32) = COPY $w0
454     %y:_(s32) = COPY $w1
455     %op:_(s32) = G_ADD %y, %x
456     %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x
457     %ext:_(s32) = G_ZEXT %cmp(s1)
458     $w0 = COPY %ext(s32)
459     RET_ReallyLR implicit $w0
462 name:            add_vector_ne_commuted_in_op
463 tracksRegLiveness: true
464 body:             |
465   bb.0:
466     liveins: $q0, $q1
467     ; CHECK-LABEL: name: add_vector_ne_commuted_in_op
468     ; CHECK: liveins: $q0, $q1
469     ; CHECK-NEXT: {{  $}}
470     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
471     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
472     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
473     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]]
474     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
475     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
476     ; CHECK-NEXT: RET_ReallyLR implicit $d0
477     %x:_(<4 x s32>) = COPY $q0
478     %y:_(<4 x s32>) = COPY $q1
479     %op:_(<4 x s32>) = G_ADD %y, %x
480     %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x
481     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
482     $d0 = COPY %ext(<4 x s16>)
483     RET_ReallyLR implicit $d0
486 name:            add_scalar_ne_commuted_in_cmp
487 tracksRegLiveness: true
488 body:             |
489   bb.0:
490     liveins: $w0, $w1
491     ; CHECK-LABEL: name: add_scalar_ne_commuted_in_cmp
492     ; CHECK: liveins: $w0, $w1
493     ; CHECK-NEXT: {{  $}}
494     ; CHECK-NEXT: %y:_(s32) = COPY $w1
495     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
496     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]]
497     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
498     ; CHECK-NEXT: $w0 = COPY %ext(s32)
499     ; CHECK-NEXT: RET_ReallyLR implicit $w0
500     %x:_(s32) = COPY $w0
501     %y:_(s32) = COPY $w1
502     %op:_(s32) = G_ADD %x, %y
503     %cmp:_(s1) = G_ICMP intpred(ne), %x(s32), %op
504     %ext:_(s32) = G_ZEXT %cmp(s1)
505     $w0 = COPY %ext(s32)
506     RET_ReallyLR implicit $w0
509 name:            add_vector_ne_commuted_in_cmp
510 tracksRegLiveness: true
511 body:             |
512   bb.0:
513     liveins: $q0, $q1
514     ; CHECK-LABEL: name: add_vector_ne_commuted_in_cmp
515     ; CHECK: liveins: $q0, $q1
516     ; CHECK-NEXT: {{  $}}
517     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
518     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
519     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
520     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]]
521     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
522     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
523     ; CHECK-NEXT: RET_ReallyLR implicit $d0
524     %x:_(<4 x s32>) = COPY $q0
525     %y:_(<4 x s32>) = COPY $q1
526     %op:_(<4 x s32>) = G_ADD %x, %y
527     %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %x(<4 x s32>), %op
528     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
529     $d0 = COPY %ext(<4 x s16>)
530     RET_ReallyLR implicit $d0
533 name:            xor_scalar_ne
534 tracksRegLiveness: true
535 body:             |
536   bb.0:
537     liveins: $w0, $w1
538     ; CHECK-LABEL: name: xor_scalar_ne
539     ; CHECK: liveins: $w0, $w1
540     ; CHECK-NEXT: {{  $}}
541     ; CHECK-NEXT: %y:_(s32) = COPY $w1
542     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
543     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]]
544     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
545     ; CHECK-NEXT: $w0 = COPY %ext(s32)
546     ; CHECK-NEXT: RET_ReallyLR implicit $w0
547     %x:_(s32) = COPY $w0
548     %y:_(s32) = COPY $w1
549     %op:_(s32) = G_XOR %x, %y
550     %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x
551     %ext:_(s32) = G_ZEXT %cmp(s1)
552     $w0 = COPY %ext(s32)
553     RET_ReallyLR implicit $w0
556 name:            xor_vector_ne
557 tracksRegLiveness: true
558 body:             |
559   bb.0:
560     liveins: $q0, $q1
561     ; CHECK-LABEL: name: xor_vector_ne
562     ; CHECK: liveins: $q0, $q1
563     ; CHECK-NEXT: {{  $}}
564     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
565     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
566     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
567     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]]
568     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
569     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
570     ; CHECK-NEXT: RET_ReallyLR implicit $d0
571     %x:_(<4 x s32>) = COPY $q0
572     %y:_(<4 x s32>) = COPY $q1
573     %op:_(<4 x s32>) = G_XOR %x, %y
574     %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x
575     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
576     $d0 = COPY %ext(<4 x s16>)
577     RET_ReallyLR implicit $d0
580 name:            xor_scalar_ne_commuted_in_op
581 tracksRegLiveness: true
582 body:             |
583   bb.0:
584     liveins: $w0, $w1
585     ; CHECK-LABEL: name: xor_scalar_ne_commuted_in_op
586     ; CHECK: liveins: $w0, $w1
587     ; CHECK-NEXT: {{  $}}
588     ; CHECK-NEXT: %y:_(s32) = COPY $w1
589     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
590     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]]
591     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
592     ; CHECK-NEXT: $w0 = COPY %ext(s32)
593     ; CHECK-NEXT: RET_ReallyLR implicit $w0
594     %x:_(s32) = COPY $w0
595     %y:_(s32) = COPY $w1
596     %op:_(s32) = G_XOR %y, %x
597     %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x
598     %ext:_(s32) = G_ZEXT %cmp(s1)
599     $w0 = COPY %ext(s32)
600     RET_ReallyLR implicit $w0
603 name:            xor_vector_ne_commuted_in_op
604 tracksRegLiveness: true
605 body:             |
606   bb.0:
607     liveins: $q0, $q1
608     ; CHECK-LABEL: name: xor_vector_ne_commuted_in_op
609     ; CHECK: liveins: $q0, $q1
610     ; CHECK-NEXT: {{  $}}
611     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
612     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
613     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
614     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]]
615     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
616     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
617     ; CHECK-NEXT: RET_ReallyLR implicit $d0
618     %x:_(<4 x s32>) = COPY $q0
619     %y:_(<4 x s32>) = COPY $q1
620     %op:_(<4 x s32>) = G_XOR %y, %x
621     %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x
622     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
623     $d0 = COPY %ext(<4 x s16>)
624     RET_ReallyLR implicit $d0
627 name:            xor_scalar_ne_commuted_in_cmp
628 tracksRegLiveness: true
629 body:             |
630   bb.0:
631     liveins: $w0, $w1
632     ; CHECK-LABEL: name: xor_scalar_ne_commuted_in_cmp
633     ; CHECK: liveins: $w0, $w1
634     ; CHECK-NEXT: {{  $}}
635     ; CHECK-NEXT: %y:_(s32) = COPY $w1
636     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
637     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]]
638     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
639     ; CHECK-NEXT: $w0 = COPY %ext(s32)
640     ; CHECK-NEXT: RET_ReallyLR implicit $w0
641     %x:_(s32) = COPY $w0
642     %y:_(s32) = COPY $w1
643     %op:_(s32) = G_XOR %x, %y
644     %cmp:_(s1) = G_ICMP intpred(ne), %x(s32), %op
645     %ext:_(s32) = G_ZEXT %cmp(s1)
646     $w0 = COPY %ext(s32)
647     RET_ReallyLR implicit $w0
650 name:            xor_vector_ne_commuted_in_cmp
651 tracksRegLiveness: true
652 body:             |
653   bb.0:
654     liveins: $q0, $q1
655     ; CHECK-LABEL: name: xor_vector_ne_commuted_in_cmp
656     ; CHECK: liveins: $q0, $q1
657     ; CHECK-NEXT: {{  $}}
658     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
659     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
660     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
661     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]]
662     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
663     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
664     ; CHECK-NEXT: RET_ReallyLR implicit $d0
665     %x:_(<4 x s32>) = COPY $q0
666     %y:_(<4 x s32>) = COPY $q1
667     %op:_(<4 x s32>) = G_XOR %x, %y
668     %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %x(<4 x s32>), %op
669     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
670     $d0 = COPY %ext(<4 x s16>)
671     RET_ReallyLR implicit $d0
674 name:            sub_scalar_ne
675 tracksRegLiveness: true
676 body:             |
677   bb.0:
678     liveins: $w0, $w1
679     ; CHECK-LABEL: name: sub_scalar_ne
680     ; CHECK: liveins: $w0, $w1
681     ; CHECK-NEXT: {{  $}}
682     ; CHECK-NEXT: %y:_(s32) = COPY $w1
683     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
684     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]]
685     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
686     ; CHECK-NEXT: $w0 = COPY %ext(s32)
687     ; CHECK-NEXT: RET_ReallyLR implicit $w0
688     %x:_(s32) = COPY $w0
689     %y:_(s32) = COPY $w1
690     %op:_(s32) = G_SUB %x, %y
691     %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x
692     %ext:_(s32) = G_ZEXT %cmp(s1)
693     $w0 = COPY %ext(s32)
694     RET_ReallyLR implicit $w0
697 name:            sub_vector_ne
698 tracksRegLiveness: true
699 body:             |
700   bb.0:
701     liveins: $q0, $q1
702     ; CHECK-LABEL: name: sub_vector_ne
703     ; CHECK: liveins: $q0, $q1
704     ; CHECK-NEXT: {{  $}}
705     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
706     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
707     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
708     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]]
709     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
710     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
711     ; CHECK-NEXT: RET_ReallyLR implicit $d0
712     %x:_(<4 x s32>) = COPY $q0
713     %y:_(<4 x s32>) = COPY $q1
714     %op:_(<4 x s32>) = G_SUB %x, %y
715     %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x
716     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
717     $d0 = COPY %ext(<4 x s16>)
718     RET_ReallyLR implicit $d0
721 name:            sub_scalar_ne_commuted_in_cmp
722 tracksRegLiveness: true
723 body:             |
724   bb.0:
725     liveins: $w0, $w1
726     ; CHECK-LABEL: name: sub_scalar_ne_commuted_in_cmp
727     ; CHECK: liveins: $w0, $w1
728     ; CHECK-NEXT: {{  $}}
729     ; CHECK-NEXT: %y:_(s32) = COPY $w1
730     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
731     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]]
732     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
733     ; CHECK-NEXT: $w0 = COPY %ext(s32)
734     ; CHECK-NEXT: RET_ReallyLR implicit $w0
735     %x:_(s32) = COPY $w0
736     %y:_(s32) = COPY $w1
737     %op:_(s32) = G_SUB %x, %y
738     %cmp:_(s1) = G_ICMP intpred(ne), %x(s32), %op
739     %ext:_(s32) = G_ZEXT %cmp(s1)
740     $w0 = COPY %ext(s32)
741     RET_ReallyLR implicit $w0
744 name:            sub_vector_ne_commuted_in_cmp
745 tracksRegLiveness: true
746 body:             |
747   bb.0:
748     liveins: $q0, $q1
749     ; CHECK-LABEL: name: sub_vector_ne_commuted_in_cmp
750     ; CHECK: liveins: $q0, $q1
751     ; CHECK-NEXT: {{  $}}
752     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
753     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
754     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
755     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]]
756     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
757     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
758     ; CHECK-NEXT: RET_ReallyLR implicit $d0
759     %x:_(<4 x s32>) = COPY $q0
760     %y:_(<4 x s32>) = COPY $q1
761     %op:_(<4 x s32>) = G_SUB %x, %y
762     %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %x(<4 x s32>), %op
763     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
764     $d0 = COPY %ext(<4 x s16>)
765     RET_ReallyLR implicit $d0
768 name:            dont_combine_sub_scalar_eq_commuted_in_op
769 tracksRegLiveness: true
770 body:             |
771   bb.0:
772     liveins: $w0, $w1
773     ; CHECK-LABEL: name: dont_combine_sub_scalar_eq_commuted_in_op
774     ; CHECK: liveins: $w0, $w1
775     ; CHECK-NEXT: {{  $}}
776     ; CHECK-NEXT: %x:_(s32) = COPY $w0
777     ; CHECK-NEXT: %y:_(s32) = COPY $w1
778     ; CHECK-NEXT: %op:_(s32) = G_SUB %y, %x
779     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x
780     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
781     ; CHECK-NEXT: $w0 = COPY %ext(s32)
782     ; CHECK-NEXT: RET_ReallyLR implicit $w0
783     %x:_(s32) = COPY $w0
784     %y:_(s32) = COPY $w1
785     %op:_(s32) = G_SUB %y, %x
786     %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x
787     %ext:_(s32) = G_ZEXT %cmp(s1)
788     $w0 = COPY %ext(s32)
789     RET_ReallyLR implicit $w0
792 name:            dont_combine_sub_vector_eq_commuted_in_op
793 tracksRegLiveness: true
794 body:             |
795   bb.0:
796     liveins: $q0, $q1
797     ; CHECK-LABEL: name: dont_combine_sub_vector_eq_commuted_in_op
798     ; CHECK: liveins: $q0, $q1
799     ; CHECK-NEXT: {{  $}}
800     ; CHECK-NEXT: %x:_(<4 x s32>) = COPY $q0
801     ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1
802     ; CHECK-NEXT: %op:_(<4 x s32>) = G_SUB %y, %x
803     ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x
804     ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
805     ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>)
806     ; CHECK-NEXT: RET_ReallyLR implicit $d0
807     %x:_(<4 x s32>) = COPY $q0
808     %y:_(<4 x s32>) = COPY $q1
809     %op:_(<4 x s32>) = G_SUB %y, %x
810     %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x
811     %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>)
812     $d0 = COPY %ext(<4 x s16>)
813     RET_ReallyLR implicit $d0
816 name:            dont_combine_not_equality
817 tracksRegLiveness: true
818 body:             |
819   bb.0:
820     liveins: $w0, $w1
821     ; CHECK-LABEL: name: dont_combine_not_equality
822     ; CHECK: liveins: $w0, $w1
823     ; CHECK-NEXT: {{  $}}
824     ; CHECK-NEXT: %x:_(s32) = COPY $w0
825     ; CHECK-NEXT: %y:_(s32) = COPY $w1
826     ; CHECK-NEXT: %op:_(s32) = G_ADD %x, %y
827     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(slt), %op(s32), %x
828     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
829     ; CHECK-NEXT: $w0 = COPY %ext(s32)
830     ; CHECK-NEXT: RET_ReallyLR implicit $w0
831     %x:_(s32) = COPY $w0
832     %y:_(s32) = COPY $w1
833     %op:_(s32) = G_ADD %x, %y
834     %cmp:_(s1) = G_ICMP intpred(slt), %op(s32), %x
835     %ext:_(s32) = G_ZEXT %cmp(s1)
836     $w0 = COPY %ext(s32)
837     RET_ReallyLR implicit $w0
840 name:            dont_combine_unique_operands
841 tracksRegLiveness: true
842 body:             |
843   bb.0:
844     liveins: $w0, $w1, $w2
845     ; CHECK-LABEL: name: dont_combine_unique_operands
846     ; CHECK: liveins: $w0, $w1, $w2
847     ; CHECK-NEXT: {{  $}}
848     ; CHECK-NEXT: %x:_(s32) = COPY $w0
849     ; CHECK-NEXT: %y:_(s32) = COPY $w1
850     ; CHECK-NEXT: %z:_(s32) = COPY $w2
851     ; CHECK-NEXT: %op:_(s32) = G_ADD %x, %y
852     ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %z
853     ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1)
854     ; CHECK-NEXT: $w0 = COPY %ext(s32)
855     ; CHECK-NEXT: RET_ReallyLR implicit $w0
856     %x:_(s32) = COPY $w0
857     %y:_(s32) = COPY $w1
858     %z:_(s32) = COPY $w2
859     %op:_(s32) = G_ADD %x, %y
860     %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %z
861     %ext:_(s32) = G_ZEXT %cmp(s1)
862     $w0 = COPY %ext(s32)
863     RET_ReallyLR implicit $w0