[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / Transforms / LowerExpectIntrinsic / expect_nonboolean.ll
blob736ddc32856c0a23810f2cea45ce1022aff264d3
1 ; RUN: opt -lower-expect  -S -o - < %s | FileCheck %s
2 ; RUN: opt -S -passes='function(lower-expect)' < %s | FileCheck %s
4 define i32 @foo(i32 %arg) #0 {
5 ; CHECK-LABEL: @foo(i32{{.*}})
6 bb:
7   %tmp = sext i32 %arg to i64
8   %tmp1 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)
9   %tmp2 = icmp ne i64 %tmp1, 0
10   br i1 %tmp2, label %bb3, label %bb5
11 ; CHECK: br i1 %tmp2{{.*}}!prof [[LIKELY:![0-9]+]]
13 bb3:                                              ; preds = %bb
14   %tmp4 = call i32 (...) @bar()
15   br label %bb5
17 bb5:                                              ; preds = %bb3, %bb
18   ret i32 1
21 define i32 @foo2(i32 %arg) #0 {
22 ; CHECK-LABEL: @foo2
23 bb:
24   %tmp = sext i32 %arg to i64
25   %tmp1 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)
26   %tmp2 = icmp eq i64 %tmp1, 2
27   br i1 %tmp2, label %bb3, label %bb5
28 ; CHECK: br i1 %tmp2{{.*}}!prof [[UNLIKELY:![0-9]+]]
30 bb3:                                              ; preds = %bb
31   %tmp4 = call i32 (...) @bar()
32   br label %bb5
34 bb5:                                              ; preds = %bb3, %bb
35   ret i32 1
38 define i32 @foo3(i32 %arg) #0 {
39 ; CHECK-LABEL: @foo3
40 bb:
41   %tmp = sext i32 %arg to i64
42   %tmp1 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)
43   %tmp2 = icmp eq i64 %tmp1, 4
44   br i1 %tmp2, label %bb3, label %bb5
45 ; CHECK: br i1 %tmp2{{.*}}!prof [[LIKELY]]
47 bb3:                                              ; preds = %bb
48   %tmp4 = call i32 (...) @bar()
49   br label %bb5
51 bb5:                                              ; preds = %bb3, %bb
52   ret i32 1
55 define i32 @foo4(i32 %arg) #0 {
56 ; CHECK-LABEL: @foo4
57 bb:
58   %tmp = sext i32 %arg to i64
59   %tmp1 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)
60   %tmp2 = icmp ne i64 %tmp1, 2
61   br i1 %tmp2, label %bb3, label %bb5
62 ; CHECK: br i1 %tmp2{{.*}}!prof [[LIKELY]]
64 bb3:                                              ; preds = %bb
65   %tmp4 = call i32 (...) @bar()
66   br label %bb5
68 bb5:                                              ; preds = %bb3, %bb
69   ret i32 1
72 define i32 @foo5(i32 %arg, i32 %arg1) #0 {
73 ; CHECK-LABEL: @foo5
74 bb:
75   %tmp = sext i32 %arg1 to i64
76   %tmp2 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)
77   %tmp3 = sext i32 %arg to i64
78   %tmp4 = icmp ne i64 %tmp2, %tmp3
79   br i1 %tmp4, label %bb5, label %bb7
80 ; CHECK-NOT: !prof
82 bb5:                                              ; preds = %bb
83   %tmp6 = call i32 (...) @bar()
84   br label %bb7
86 bb7:                                              ; preds = %bb5, %bb
87   ret i32 1
90 declare i64 @llvm.expect.i64(i64, i64) #1
92 declare i32 @bar(...) local_unnamed_addr #0
94 attributes #0 = { nounwind uwtable }
95 attributes #1 = { nounwind readnone }
97 !llvm.module.flags = !{!0}
98 !llvm.ident = !{!1}
100 !0 = !{i32 1, !"wchar_size", i32 4}
101 !1 = !{!"clang version 5.0.0 (trunk 304373)"}
102 ; CHECK: [[LIKELY]] = !{!"branch_weights", i32 2000, i32 1}
103 ; CHECK: [[UNLIKELY]] = !{!"branch_weights", i32 1, i32 2000}