[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / uaddo-8-16-bits.mir
blob0ab11b3ac558f83d589e5bb8627e2c235c8ef7f7
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -verify-machineinstrs -mtriple arm64-apple-ios -global-isel -run-pass=aarch64-prelegalizer-combiner -o - %s | FileCheck %s
4 ...
5 ---
6 name:            can_fold_i8
7 tracksRegLiveness: true
8 body:             |
9   ; CHECK-LABEL: name: can_fold_i8
10   ; CHECK: bb.0.entry:
11   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
12   ; CHECK-NEXT:   liveins: $w0, $w1
13   ; CHECK-NEXT: {{  $}}
14   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
15   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8
16   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
17   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 8
18   ; CHECK-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]]
19   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 256
20   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]]
21   ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
22   ; CHECK-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]]
23   ; CHECK-NEXT:   G_BRCOND [[ICMP]](s1), %bb.2
24   ; CHECK-NEXT:   G_BR %bb.1
25   ; CHECK-NEXT: {{  $}}
26   ; CHECK-NEXT: bb.1:
27   ; CHECK-NEXT:   successors:{{ $}}
28   ; CHECK-NEXT: {{  $}}
29   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
30   ; CHECK-NEXT: {{  $}}
31   ; CHECK-NEXT: bb.2:
32   ; CHECK-NEXT:   $w0 = COPY [[ADD]](s32)
33   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
34   bb.1.entry:
35     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
36     liveins: $w0, $w1
38     %2:_(s32) = COPY $w0
39     %3:_(s32) = G_ASSERT_ZEXT %2, 8
40     %0:_(s8) = G_TRUNC %3(s32)
41     %4:_(s32) = COPY $w1
42     %5:_(s32) = G_ASSERT_ZEXT %4, 8
43     %1:_(s8) = G_TRUNC %5(s32)
44     %6:_(s8), %7:_(s1) = G_UADDO %0, %1
45     G_BRCOND %7(s1), %bb.2
46     G_BR %bb.3
48   bb.2:
49     successors:
51     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
53   bb.3:
54     %8:_(s32) = G_ZEXT %6(s8)
55     $w0 = COPY %8(s32)
56     RET_ReallyLR implicit $w0
58 ...
59 ---
60 name:            can_fold_i16_1_result_used_by_zext
61 tracksRegLiveness: true
62 body:             |
63   ; CHECK-LABEL: name: can_fold_i16_1_result_used_by_zext
64   ; CHECK: bb.0:
65   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
66   ; CHECK-NEXT:   liveins: $w0, $w1
67   ; CHECK-NEXT: {{  $}}
68   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
69   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
70   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
71   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
72   ; CHECK-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]]
73   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
74   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]]
75   ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
76   ; CHECK-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]]
77   ; CHECK-NEXT:   G_BRCOND [[ICMP]](s1), %bb.2
78   ; CHECK-NEXT:   G_BR %bb.1
79   ; CHECK-NEXT: {{  $}}
80   ; CHECK-NEXT: bb.1:
81   ; CHECK-NEXT:   successors:{{ $}}
82   ; CHECK-NEXT: {{  $}}
83   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
84   ; CHECK-NEXT: {{  $}}
85   ; CHECK-NEXT: bb.2:
86   ; CHECK-NEXT:   $w0 = COPY [[ADD]](s32)
87   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
88   bb.1:
89     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
90     liveins: $w0, $w1
92     %2:_(s32) = COPY $w0
93     %3:_(s32) = G_ASSERT_ZEXT %2, 16
94     %0:_(s16) = G_TRUNC %3(s32)
95     %4:_(s32) = COPY $w1
96     %5:_(s32) = G_ASSERT_ZEXT %4, 16
97     %1:_(s16) = G_TRUNC %5(s32)
98     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
99     G_BRCOND %7(s1), %bb.2
100     G_BR %bb.3
102   bb.2:
103     successors:
105     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
107   bb.3:
108     %8:_(s32) = G_ZEXT %6(s16)
109     $w0 = COPY %8(s32)
110     RET_ReallyLR implicit $w0
114 name:            can_fold_i16_2_result_used_by_multiple_calls
115 tracksRegLiveness: true
116 body:             |
117   ; CHECK-LABEL: name: can_fold_i16_2_result_used_by_multiple_calls
118   ; CHECK: bb.0:
119   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
120   ; CHECK-NEXT:   liveins: $w0, $w1, $x2
121   ; CHECK-NEXT: {{  $}}
122   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
123   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
124   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
125   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
126   ; CHECK-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]]
127   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
128   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]]
129   ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
130   ; CHECK-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]]
131   ; CHECK-NEXT:   G_BRCOND [[ICMP]](s1), %bb.2
132   ; CHECK-NEXT:   G_BR %bb.1
133   ; CHECK-NEXT: {{  $}}
134   ; CHECK-NEXT: bb.1:
135   ; CHECK-NEXT:   successors:{{ $}}
136   ; CHECK-NEXT: {{  $}}
137   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
138   ; CHECK-NEXT: {{  $}}
139   ; CHECK-NEXT: bb.2:
140   ; CHECK-NEXT:   liveins: $x2
141   ; CHECK-NEXT: {{  $}}
142   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
143   ; CHECK-NEXT:   $w0 = COPY [[ADD]](s32)
144   ; CHECK-NEXT:   BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
145   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
146   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
147   ; CHECK-NEXT:   $w0 = COPY [[ADD]](s32)
148   ; CHECK-NEXT:   BLR killed renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
149   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
150   ; CHECK-NEXT:   RET_ReallyLR
151   bb.1:
152     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
153     liveins: $w0, $w1, $x2
155     %2:_(s32) = COPY $w0
156     %3:_(s32) = G_ASSERT_ZEXT %2, 16
157     %0:_(s16) = G_TRUNC %3(s32)
158     %4:_(s32) = COPY $w1
159     %5:_(s32) = G_ASSERT_ZEXT %4, 16
160     %1:_(s16) = G_TRUNC %5(s32)
161     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
162     G_BRCOND %7(s1), %bb.2
163     G_BR %bb.3
165   bb.2:
166     successors:
168     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
170   bb.3:
171     liveins: $x2
173     ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
174     %8:_(s32) = G_ANYEXT %6(s16)
175     $w0 = COPY %8(s32)
176     BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
177     ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
178     ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
179     $w0 = COPY %8(s32)
180     BLR killed renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
181     ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
182     RET_ReallyLR
186 name:            can_fold_i16_3_result_used_by_anyext
187 tracksRegLiveness: true
188 body:             |
189   ; CHECK-LABEL: name: can_fold_i16_3_result_used_by_anyext
190   ; CHECK: bb.0:
191   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
192   ; CHECK-NEXT:   liveins: $w0, $w1
193   ; CHECK-NEXT: {{  $}}
194   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
195   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
196   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
197   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
198   ; CHECK-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]]
199   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
200   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]]
201   ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
202   ; CHECK-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]]
203   ; CHECK-NEXT:   G_BRCOND [[ICMP]](s1), %bb.2
204   ; CHECK-NEXT:   G_BR %bb.1
205   ; CHECK-NEXT: {{  $}}
206   ; CHECK-NEXT: bb.1:
207   ; CHECK-NEXT:   successors:{{ $}}
208   ; CHECK-NEXT: {{  $}}
209   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
210   ; CHECK-NEXT: {{  $}}
211   ; CHECK-NEXT: bb.2:
212   ; CHECK-NEXT:   $w0 = COPY [[ADD]](s32)
213   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
214   bb.1:
215     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
216     liveins: $w0, $w1
218     %2:_(s32) = COPY $w0
219     %3:_(s32) = G_ASSERT_ZEXT %2, 16
220     %0:_(s16) = G_TRUNC %3(s32)
221     %4:_(s32) = COPY $w1
222     %5:_(s32) = G_ASSERT_ZEXT %4, 16
223     %1:_(s16) = G_TRUNC %5(s32)
224     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
225     G_BRCOND %7(s1), %bb.2
226     G_BR %bb.3
228   bb.2:
229     successors:
231     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
233   bb.3:
234     %8:_(s32) = G_ANYEXT %6(s16)
235     $w0 = COPY %8(s32)
236     RET_ReallyLR implicit $w0
240 name:            can_fold_i16_4_cond_dbg_user
241 tracksRegLiveness: true
242 body:             |
243   ; CHECK-LABEL: name: can_fold_i16_4_cond_dbg_user
244   ; CHECK: bb.0:
245   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
246   ; CHECK-NEXT:   liveins: $w0, $w1
247   ; CHECK-NEXT: {{  $}}
248   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
249   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
250   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
251   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
252   ; CHECK-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]]
253   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
254   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]]
255   ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
256   ; CHECK-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]]
257   ; CHECK-NEXT:   DBG_VALUE [[ICMP]](s1)
258   ; CHECK-NEXT:   G_BRCOND [[ICMP]](s1), %bb.2
259   ; CHECK-NEXT:   G_BR %bb.1
260   ; CHECK-NEXT: {{  $}}
261   ; CHECK-NEXT: bb.1:
262   ; CHECK-NEXT:   successors:{{ $}}
263   ; CHECK-NEXT: {{  $}}
264   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
265   ; CHECK-NEXT: {{  $}}
266   ; CHECK-NEXT: bb.2:
267   ; CHECK-NEXT:   $w0 = COPY [[ADD]](s32)
268   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
269   bb.1:
270     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
271     liveins: $w0, $w1
273     %2:_(s32) = COPY $w0
274     %3:_(s32) = G_ASSERT_ZEXT %2, 16
275     %0:_(s16) = G_TRUNC %3(s32)
276     %4:_(s32) = COPY $w1
277     %5:_(s32) = G_ASSERT_ZEXT %4, 16
278     %1:_(s16) = G_TRUNC %5(s32)
279     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
280     DBG_VALUE %7(s1)
281     G_BRCOND %7(s1), %bb.2
282     G_BR %bb.3
284   bb.2:
285     successors:
287     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
289   bb.3:
290     %8:_(s32) = G_ZEXT %6(s16)
291     $w0 = COPY %8(s32)
292     RET_ReallyLR implicit $w0
296 name:            can_fold_i16_5_result_dbg_user
297 tracksRegLiveness: true
298 body:             |
299   ; CHECK-LABEL: name: can_fold_i16_5_result_dbg_user
300   ; CHECK: bb.0:
301   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
302   ; CHECK-NEXT:   liveins: $w0, $w1
303   ; CHECK-NEXT: {{  $}}
304   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
305   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
306   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
307   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
308   ; CHECK-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASSERT_ZEXT1]]
309   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
310   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ADD]], [[C]]
311   ; CHECK-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
312   ; CHECK-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND]](s32), [[C1]]
313   ; CHECK-NEXT:   DBG_VALUE %6:_(s16)
314   ; CHECK-NEXT:   G_BRCOND [[ICMP]](s1), %bb.2
315   ; CHECK-NEXT:   G_BR %bb.1
316   ; CHECK-NEXT: {{  $}}
317   ; CHECK-NEXT: bb.1:
318   ; CHECK-NEXT:   successors:{{ $}}
319   ; CHECK-NEXT: {{  $}}
320   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
321   ; CHECK-NEXT: {{  $}}
322   ; CHECK-NEXT: bb.2:
323   ; CHECK-NEXT:   $w0 = COPY [[ADD]](s32)
324   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
325   bb.1:
326     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
327     liveins: $w0, $w1
329     %2:_(s32) = COPY $w0
330     %3:_(s32) = G_ASSERT_ZEXT %2, 16
331     %0:_(s16) = G_TRUNC %3(s32)
332     %4:_(s32) = COPY $w1
333     %5:_(s32) = G_ASSERT_ZEXT %4, 16
334     %1:_(s16) = G_TRUNC %5(s32)
335     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
336     DBG_VALUE %6(s16)
337     G_BRCOND %7(s1), %bb.2
338     G_BR %bb.3
340   bb.2:
341     successors:
343     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
345   bb.3:
346     %8:_(s32) = G_ZEXT %6(s16)
347     $w0 = COPY %8(s32)
348     RET_ReallyLR implicit $w0
352 name:            cannot_fold_1_result_used_before_branch
353 tracksRegLiveness: true
354 body:             |
355   ; CHECK-LABEL: name: cannot_fold_1_result_used_before_branch
356   ; CHECK: bb.0:
357   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
358   ; CHECK-NEXT:   liveins: $w0, $w1, $x2
359   ; CHECK-NEXT: {{  $}}
360   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
361   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
362   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32)
363   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
364   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
365   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32)
366   ; CHECK-NEXT:   [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]]
367   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
368   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16)
369   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
370   ; CHECK-NEXT:   BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
371   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
372   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
373   ; CHECK-NEXT:   [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]]
374   ; CHECK-NEXT:   G_BRCOND [[XOR]](s1), %bb.2
375   ; CHECK-NEXT:   G_BR %bb.1
376   ; CHECK-NEXT: {{  $}}
377   ; CHECK-NEXT: bb.1:
378   ; CHECK-NEXT:   successors:{{ $}}
379   ; CHECK-NEXT: {{  $}}
380   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
381   ; CHECK-NEXT: {{  $}}
382   ; CHECK-NEXT: bb.2:
383   ; CHECK-NEXT:   liveins: $x2
384   ; CHECK-NEXT: {{  $}}
385   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
386   ; CHECK-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16)
387   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT1]](s32)
388   ; CHECK-NEXT:   BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
389   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
390   ; CHECK-NEXT:   RET_ReallyLR
391   bb.1:
392     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
393     liveins: $w0, $w1, $x2
395     %2:_(s32) = COPY $w0
396     %3:_(s32) = G_ASSERT_ZEXT %2, 16
397     %0:_(s16) = G_TRUNC %3(s32)
398     %4:_(s32) = COPY $w1
399     %5:_(s32) = G_ASSERT_ZEXT %4, 16
400     %1:_(s16) = G_TRUNC %5(s32)
401     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
402     ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
403     %8:_(s32) = G_ANYEXT %6(s16)
404     $w0 = COPY %8(s32)
405     BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
406     ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
407     G_BRCOND %7(s1), %bb.2
408     G_BR %bb.3
410   bb.2:
411     successors:
413     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
415   bb.3:
416     liveins: $x2
418     ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
419     %9:_(s32) = G_ANYEXT %6(s16)
420     $w0 = COPY %9(s32)
421     BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
422     ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
423     RET_ReallyLR
427 name:            cannot_fold_2_result_used_in_fail_block
428 tracksRegLiveness: true
429 body:             |
430   ; CHECK-LABEL: name: cannot_fold_2_result_used_in_fail_block
431   ; CHECK: bb.0:
432   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
433   ; CHECK-NEXT:   liveins: $w0, $w1
434   ; CHECK-NEXT: {{  $}}
435   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
436   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
437   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32)
438   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
439   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
440   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32)
441   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
442   ; CHECK-NEXT:   [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]]
443   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16)
444   ; CHECK-NEXT:   G_BRCOND [[UADDO1]](s1), %bb.2
445   ; CHECK-NEXT:   G_BR %bb.1
446   ; CHECK-NEXT: {{  $}}
447   ; CHECK-NEXT: bb.1:
448   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[C]](s32), %bb.2, [[ANYEXT]](s32), %bb.0
449   ; CHECK-NEXT:   $w0 = COPY [[PHI]](s32)
450   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
451   ; CHECK-NEXT: {{  $}}
452   ; CHECK-NEXT: bb.2:
453   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
454   ; CHECK-NEXT: {{  $}}
455   ; CHECK-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16)
456   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT1]](s32)
457   ; CHECK-NEXT:   G_BR %bb.1
458   bb.1:
459     liveins: $w0, $w1
461     %2:_(s32) = COPY $w0
462     %3:_(s32) = G_ASSERT_ZEXT %2, 16
463     %0:_(s16) = G_TRUNC %3(s32)
464     %4:_(s32) = COPY $w1
465     %5:_(s32) = G_ASSERT_ZEXT %4, 16
466     %1:_(s16) = G_TRUNC %5(s32)
467     %11:_(s16) = G_CONSTANT i16 10
468     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
469     G_BRCOND %7(s1), %bb.3
470     G_BR %bb.2
472   bb.2:
473     %9:_(s16) = G_PHI %11(s16), %bb.3, %6(s16), %bb.1
474     %10:_(s32) = G_ANYEXT %9(s16)
475     $w0 = COPY %10(s32)
476     RET_ReallyLR implicit $w0
478   bb.3:
479     %8:_(s32) = G_ANYEXT %6(s16)
480     $w0 = COPY %8(s32)
481     G_BR %bb.2
485 name:            cannot_fold_3_result_used_in_successor_before_fail_block
486 tracksRegLiveness: true
487 body:             |
488   ; CHECK-LABEL: name: cannot_fold_3_result_used_in_successor_before_fail_block
489   ; CHECK: bb.0:
490   ; CHECK-NEXT:   successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
491   ; CHECK-NEXT:   liveins: $w0, $w1, $x2
492   ; CHECK-NEXT: {{  $}}
493   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
494   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
495   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32)
496   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
497   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
498   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32)
499   ; CHECK-NEXT:   [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]]
500   ; CHECK-NEXT:   G_BR %bb.1
501   ; CHECK-NEXT: {{  $}}
502   ; CHECK-NEXT: bb.1:
503   ; CHECK-NEXT:   successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
504   ; CHECK-NEXT:   liveins: $x2
505   ; CHECK-NEXT: {{  $}}
506   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16)
507   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
508   ; CHECK-NEXT:   BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
509   ; CHECK-NEXT:   G_BRCOND [[UADDO1]](s1), %bb.2
510   ; CHECK-NEXT:   G_BR %bb.3
511   ; CHECK-NEXT: {{  $}}
512   ; CHECK-NEXT: bb.2:
513   ; CHECK-NEXT:   successors:{{ $}}
514   ; CHECK-NEXT: {{  $}}
515   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
516   ; CHECK-NEXT: {{  $}}
517   ; CHECK-NEXT: bb.3:
518   ; CHECK-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s16)
519   ; CHECK-NEXT:   $w0 = COPY [[ZEXT]](s32)
520   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
521   bb.1:
522     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
523     liveins: $w0, $w1, $x2
525     %2:_(s32) = COPY $w0
526     %3:_(s32) = G_ASSERT_ZEXT %2, 16
527     %0:_(s16) = G_TRUNC %3(s32)
528     %4:_(s32) = COPY $w1
529     %5:_(s32) = G_ASSERT_ZEXT %4, 16
530     %1:_(s16) = G_TRUNC %5(s32)
531     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
532     G_BR %bb.4
534   bb.4:
535     liveins: $x2
536     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
538     %8:_(s32) = G_ANYEXT %6(s16)
539     $w0 = COPY %8(s32)
540     BLR renamable $x2, implicit-def dead $lr, implicit $sp, implicit $w0
541     G_BRCOND %7(s1), %bb.2
542     G_BR %bb.3
544   bb.2:
545     successors:
547     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
549   bb.3:
550     %9:_(s32) = G_ZEXT %6(s16)
551     $w0 = COPY %9(s32)
552     RET_ReallyLR implicit $w0
556 name:            cannot_fold_i8_trunc_i
557 tracksRegLiveness: true
558 body:             |
559   ; CHECK-LABEL: name: cannot_fold_i8_trunc_i
560   ; CHECK: bb.0:
561   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
562   ; CHECK-NEXT:   liveins: $w0, $w1
563   ; CHECK-NEXT: {{  $}}
564   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
565   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
566   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32)
567   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
568   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 8
569   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_ZEXT1]](s32)
570   ; CHECK-NEXT:   [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16)
571   ; CHECK-NEXT:   [[UADDO:%[0-9]+]]:_(s8), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC2]], [[TRUNC1]]
572   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
573   ; CHECK-NEXT:   [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]]
574   ; CHECK-NEXT:   G_BRCOND [[XOR]](s1), %bb.2
575   ; CHECK-NEXT:   G_BR %bb.1
576   ; CHECK-NEXT: {{  $}}
577   ; CHECK-NEXT: bb.1:
578   ; CHECK-NEXT:   successors:{{ $}}
579   ; CHECK-NEXT: {{  $}}
580   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
581   ; CHECK-NEXT: {{  $}}
582   ; CHECK-NEXT: bb.2:
583   ; CHECK-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s8)
584   ; CHECK-NEXT:   $w0 = COPY [[ZEXT]](s32)
585   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
586   bb.1:
587     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
588     liveins: $w0, $w1
590     %2:_(s32) = COPY $w0
591     %3:_(s32) = G_ASSERT_ZEXT %2, 16
592     %0:_(s16) = G_TRUNC %3(s32)
593     %4:_(s32) = COPY $w1
594     %5:_(s32) = G_ASSERT_ZEXT %4, 8
595     %1:_(s8) = G_TRUNC %5(s32)
596     %6:_(s8) = G_TRUNC %0(s16)
597     %7:_(s8), %8:_(s1) = G_UADDO %6, %1
598     G_BRCOND %8(s1), %bb.2
599     G_BR %bb.3
601   bb.2:
602     successors:
604     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
606   bb.3:
607     %9:_(s32) = G_ZEXT %7(s8)
608     $w0 = COPY %9(s32)
609     RET_ReallyLR implicit $w0
613 name:            cannot_fold_i8_trunc_b
614 tracksRegLiveness: true
615 body:             |
616   ; CHECK-LABEL: name: cannot_fold_i8_trunc_b
617   ; CHECK: bb.0:
618   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
619   ; CHECK-NEXT:   liveins: $w0, $w1
620   ; CHECK-NEXT: {{  $}}
621   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
622   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8
623   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_ZEXT]](s32)
624   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
625   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
626   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32)
627   ; CHECK-NEXT:   [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC1]](s16)
628   ; CHECK-NEXT:   [[UADDO:%[0-9]+]]:_(s8), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC2]]
629   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
630   ; CHECK-NEXT:   [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]]
631   ; CHECK-NEXT:   G_BRCOND [[XOR]](s1), %bb.2
632   ; CHECK-NEXT:   G_BR %bb.1
633   ; CHECK-NEXT: {{  $}}
634   ; CHECK-NEXT: bb.1:
635   ; CHECK-NEXT:   successors:{{ $}}
636   ; CHECK-NEXT: {{  $}}
637   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
638   ; CHECK-NEXT: {{  $}}
639   ; CHECK-NEXT: bb.2:
640   ; CHECK-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s8)
641   ; CHECK-NEXT:   $w0 = COPY [[ZEXT]](s32)
642   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
643   bb.1:
644     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
645     liveins: $w0, $w1
647     %2:_(s32) = COPY $w0
648     %3:_(s32) = G_ASSERT_ZEXT %2, 8
649     %0:_(s8) = G_TRUNC %3(s32)
650     %4:_(s32) = COPY $w1
651     %5:_(s32) = G_ASSERT_ZEXT %4, 16
652     %1:_(s16) = G_TRUNC %5(s32)
653     %6:_(s8) = G_TRUNC %1(s16)
654     %7:_(s8), %8:_(s1) = G_UADDO %0, %6
655     G_BRCOND %8(s1), %bb.2
656     G_BR %bb.3
658   bb.2:
659     successors:
661     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
663   bb.3:
664     %9:_(s32) = G_ZEXT %7(s8)
665     $w0 = COPY %9(s32)
666     RET_ReallyLR implicit $w0
670 name:            cannot_fold_i8_trunc_both
671 tracksRegLiveness: true
672 body:             |
673   ; CHECK-LABEL: name: cannot_fold_i8_trunc_both
674   ; CHECK: bb.0:
675   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
676   ; CHECK-NEXT:   liveins: $w0, $w1
677   ; CHECK-NEXT: {{  $}}
678   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
679   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
680   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32)
681   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
682   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
683   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32)
684   ; CHECK-NEXT:   [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16)
685   ; CHECK-NEXT:   [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC1]](s16)
686   ; CHECK-NEXT:   [[UADDO:%[0-9]+]]:_(s8), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC2]], [[TRUNC3]]
687   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
688   ; CHECK-NEXT:   [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]]
689   ; CHECK-NEXT:   G_BRCOND [[XOR]](s1), %bb.2
690   ; CHECK-NEXT:   G_BR %bb.1
691   ; CHECK-NEXT: {{  $}}
692   ; CHECK-NEXT: bb.1:
693   ; CHECK-NEXT:   successors:{{ $}}
694   ; CHECK-NEXT: {{  $}}
695   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
696   ; CHECK-NEXT: {{  $}}
697   ; CHECK-NEXT: bb.2:
698   ; CHECK-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s8)
699   ; CHECK-NEXT:   $w0 = COPY [[ZEXT]](s32)
700   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
701   bb.1:
702     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
703     liveins: $w0, $w1
705     %2:_(s32) = COPY $w0
706     %3:_(s32) = G_ASSERT_ZEXT %2, 16
707     %0:_(s16) = G_TRUNC %3(s32)
708     %4:_(s32) = COPY $w1
709     %5:_(s32) = G_ASSERT_ZEXT %4, 16
710     %1:_(s16) = G_TRUNC %5(s32)
711     %6:_(s8) = G_TRUNC %0(s16)
712     %7:_(s8) = G_TRUNC %1(s16)
713     %8:_(s8), %9:_(s1) = G_UADDO %6, %7
714     G_BRCOND %9(s1), %bb.2
715     G_BR %bb.3
717   bb.2:
718     successors:
720     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
722   bb.3:
723     %10:_(s32) = G_ZEXT %8(s8)
724     $w0 = COPY %10(s32)
725     RET_ReallyLR implicit $w0
729 name:            cannot_fold_overflow_status_used_in_select
730 tracksRegLiveness: true
731 body:             |
732   bb.1:
733     liveins: $w0, $w1
735     ; CHECK-LABEL: name: cannot_fold_overflow_status_used_in_select
736     ; CHECK: liveins: $w0, $w1
737     ; CHECK-NEXT: {{  $}}
738     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
739     ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
740     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32)
741     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
742     ; CHECK-NEXT: [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
743     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32)
744     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 10
745     ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]]
746     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[UADDO1]](s1), [[C]], [[UADDO]]
747     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[SELECT]](s16)
748     ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32)
749     ; CHECK-NEXT: RET_ReallyLR implicit $w0
750     %2:_(s32) = COPY $w0
751     %3:_(s32) = G_ASSERT_ZEXT %2, 16
752     %0:_(s16) = G_TRUNC %3(s32)
753     %4:_(s32) = COPY $w1
754     %5:_(s32) = G_ASSERT_ZEXT %4, 16
755     %1:_(s16) = G_TRUNC %5(s32)
756     %9:_(s16) = G_CONSTANT i16 10
757     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
758     %8:_(s16) = G_SELECT %7(s1), %9, %6
759     %10:_(s32) = G_ZEXT %8(s16)
760     $w0 = COPY %10(s32)
761     RET_ReallyLR implicit $w0
765 name:            cannot_fold_i16_inputs_not_assert_zext
766 tracksRegLiveness: true
767 body:             |
768   ; CHECK-LABEL: name: cannot_fold_i16_inputs_not_assert_zext
769   ; CHECK: bb.0:
770   ; CHECK-NEXT:   successors: %bb.1(0x00000800), %bb.2(0x7ffff800)
771   ; CHECK-NEXT:   liveins: $w0, $w1
772   ; CHECK-NEXT: {{  $}}
773   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
774   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
775   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
776   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
777   ; CHECK-NEXT:   [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]]
778   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
779   ; CHECK-NEXT:   [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]]
780   ; CHECK-NEXT:   G_BRCOND [[XOR]](s1), %bb.2
781   ; CHECK-NEXT:   G_BR %bb.1
782   ; CHECK-NEXT: {{  $}}
783   ; CHECK-NEXT: bb.1:
784   ; CHECK-NEXT:   successors:{{ $}}
785   ; CHECK-NEXT: {{  $}}
786   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
787   ; CHECK-NEXT: {{  $}}
788   ; CHECK-NEXT: bb.2:
789   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UADDO]](s16)
790   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
791   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
792   bb.1:
793     successors: %bb.2(0x00000800), %bb.3(0x7ffff800)
794     liveins: $w0, $w1
796     %2:_(s32) = COPY $w0
797     %0:_(s16) = G_TRUNC %2(s32)
798     %3:_(s32) = COPY $w1
799     %1:_(s16) = G_TRUNC %3(s32)
800     %4:_(s16), %5:_(s1) = G_UADDO %0, %1
801     G_BRCOND %5(s1), %bb.2
802     G_BR %bb.3
804   bb.2:
805     successors:
807     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
809   bb.3:
810     %6:_(s32) = G_ANYEXT %4(s16)
811     $w0 = COPY %6(s32)
812     RET_ReallyLR implicit $w0
816 name:            cannot_fold_branch_to_use_on_overflow
817 tracksRegLiveness: true
818 body:             |
819   ; CHECK-LABEL: name: cannot_fold_branch_to_use_on_overflow
820   ; CHECK: bb.0:
821   ; CHECK-NEXT:   successors: %bb.1(0x7ffff800), %bb.2(0x00000800)
822   ; CHECK-NEXT:   liveins: $w0, $w1
823   ; CHECK-NEXT: {{  $}}
824   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
825   ; CHECK-NEXT:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
826   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32)
827   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
828   ; CHECK-NEXT:   [[ASSERT_ZEXT1:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY1]], 16
829   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT1]](s32)
830   ; CHECK-NEXT:   [[UADDO:%[0-9]+]]:_(s16), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[TRUNC]], [[TRUNC1]]
831   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
832   ; CHECK-NEXT:   [[XOR:%[0-9]+]]:_(s1) = G_XOR [[UADDO1]], [[C]]
833   ; CHECK-NEXT:   G_BRCOND [[XOR]](s1), %bb.2
834   ; CHECK-NEXT:   G_BR %bb.1
835   ; CHECK-NEXT: {{  $}}
836   ; CHECK-NEXT: bb.1:
837   ; CHECK-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UADDO]](s16)
838   ; CHECK-NEXT:   $w0 = COPY [[ZEXT]](s32)
839   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
840   ; CHECK-NEXT: {{  $}}
841   ; CHECK-NEXT: bb.2:
842   ; CHECK-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
843   bb.1:
844     successors: %bb.2(0x7ffff800), %bb.3(0x00000800)
845     liveins: $w0, $w1
847     %2:_(s32) = COPY $w0
848     %3:_(s32) = G_ASSERT_ZEXT %2, 16
849     %0:_(s16) = G_TRUNC %3(s32)
850     %4:_(s32) = COPY $w1
851     %5:_(s32) = G_ASSERT_ZEXT %4, 16
852     %1:_(s16) = G_TRUNC %5(s32)
853     %6:_(s16), %7:_(s1) = G_UADDO %0, %1
854     G_BRCOND %7(s1), %bb.2
855     G_BR %bb.3
857   bb.2:
858     %8:_(s32) = G_ZEXT %6(s16)
859     $w0 = COPY %8(s32)
860     RET_ReallyLR implicit $w0
862   bb.3:
863     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)