[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / prelegalizercombiner-br.mir
blobf26fcaa7cafab56907429e0d3104a490b19786f9
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -run-pass=aarch64-prelegalizer-combiner -global-isel -verify-machineinstrs %s -o - | FileCheck %s
3 --- |
4   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
5   target triple = "arm64-apple-ios5.0.0"
7   define i32 @foo(i32 %a, i32 %b) {
8   entry:
9     %cmp = icmp sgt i32 %a, 0
10     br i1 %cmp, label %if.then, label %if.end
12   if.then:
13     %add = add nsw i32 %b, %a
14     %add1 = add nsw i32 %a, %b
15     br label %return
17   if.end:
18     %mul = mul nsw i32 %b, %b
19     %add2 = add nuw nsw i32 %mul, 2
20     br label %return
22   return:
23     %retval.0 = phi i32 [ %add1, %if.then ], [ %add2, %if.end ]
24     ret i32 %retval.0
25   }
28 ...
29 ---
30 name:            foo
31 tracksRegLiveness: true
32 body:             |
33   ; CHECK-LABEL: name: foo
34   ; CHECK: bb.0.entry:
35   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
36   ; CHECK:   liveins: $w0, $w1
37   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
38   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
39   ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
40   ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
41   ; CHECK:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), [[C]]
42   ; CHECK:   G_BRCOND [[ICMP]](s1), %bb.2
43   ; CHECK: bb.1.if.then:
44   ; CHECK:   successors: %bb.3(0x80000000)
45   ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = nsw G_ADD [[COPY1]], [[COPY]]
46   ; CHECK:   [[ADD1:%[0-9]+]]:_(s32) = nsw G_ADD [[ADD]], [[COPY1]]
47   ; CHECK:   G_BR %bb.3
48   ; CHECK: bb.2.if.end:
49   ; CHECK:   successors: %bb.3(0x80000000)
50   ; CHECK:   [[MUL:%[0-9]+]]:_(s32) = nsw G_MUL [[COPY1]], [[COPY1]]
51   ; CHECK:   [[ADD2:%[0-9]+]]:_(s32) = nuw nsw G_ADD [[MUL]], [[C1]]
52   ; CHECK: bb.3.return:
53   ; CHECK:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[ADD1]](s32), %bb.1, [[ADD2]](s32), %bb.2
54   ; CHECK:   $w0 = COPY [[PHI]](s32)
55   ; CHECK:   RET_ReallyLR implicit $w0
56   bb.1.entry:
57     liveins: $w0, $w1
59     %0:_(s32) = COPY $w0
60     %1:_(s32) = COPY $w1
61     %2:_(s32) = G_CONSTANT i32 0
62     %5:_(s32) = G_CONSTANT i32 2
63     %3:_(s1) = G_ICMP intpred(sgt), %0(s32), %2
64     G_BRCOND %3(s1), %bb.2
65     G_BR %bb.3
67   bb.2.if.then:
68     %7:_(s32) = nsw G_ADD %1, %0
69     %8:_(s32) = nsw G_ADD %7, %1
70     G_BR %bb.4
72   bb.3.if.end:
73     %4:_(s32) = nsw G_MUL %1, %1
74     %6:_(s32) = nuw nsw G_ADD %4, %5
76   bb.4.return:
77     %10:_(s32) = G_PHI %8(s32), %bb.2, %6(s32), %bb.3
78     $w0 = COPY %10(s32)
79     RET_ReallyLR implicit $w0
81 ...