• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt < %s -analyze -branch-prob -enable-new-pm=0 | FileCheck %s
2; RUN: opt < %s -passes='print<branch-prob>' -disable-output 2>&1 | FileCheck %s
3
4; CHECK-LABEL: no_hoist
5; CHECK: edge entry -> if.end probability is 0x40000000 / 0x80000000 = 50.00%
6; CHECK: edge entry -> if.then probability is 0x40000000 / 0x80000000 = 50.00%
7; CHECK: edge if.end -> if.end4 probability is 0x40000000 / 0x80000000 = 50.00%
8; CHECK: edge if.end -> if.then3 probability is 0x40000000 / 0x80000000 = 50.00%
9define dso_local void @no_hoist(i64 %arg1, i64 %arg2) local_unnamed_addr #0 {
10entry:
11  %and = and i64 %arg1, 1152921504606846976
12  %tobool.not = icmp eq i64 %and, 0
13  br i1 %tobool.not, label %if.end, label %if.then
14
15if.then:                                          ; preds = %entry
16  tail call void @bar()
17  br label %if.end
18
19if.end:                                           ; preds = %if.then, %entry
20  %and1 = and i64 %arg2, 1152921504606846976
21  %tobool2.not = icmp eq i64 %and1, 0
22  br i1 %tobool2.not, label %if.end4, label %if.then3
23
24if.then3:                                         ; preds = %if.end
25  tail call void @baz()
26  br label %if.end4
27
28if.end4:                                          ; preds = %if.then3, %if.end
29  ret void
30}
31
32; CHECK-LABEL: hoist
33; CHECK: edge entry -> if.end probability is 0x40000000 / 0x80000000 = 50.00%
34; CHECK: edge entry -> if.then probability is 0x40000000 / 0x80000000 = 50.00%
35; CHECK: edge if.end -> if.end4 probability is 0x40000000 / 0x80000000 = 50.00%
36; CHECK: edge if.end -> if.then3 probability is 0x40000000 / 0x80000000 = 50.00%
37define dso_local void @hoist(i64 %arg1, i64 %arg2) local_unnamed_addr #0 {
38entry:
39  %const = bitcast i64 1152921504606846976 to i64
40  %and = and i64 %arg1, %const
41  %tobool.not = icmp eq i64 %and, 0
42  br i1 %tobool.not, label %if.end, label %if.then
43
44if.then:                                          ; preds = %entry
45  tail call void @bar()
46  br label %if.end
47
48if.end:                                           ; preds = %if.then, %entry
49  %and1 = and i64 %arg2, %const
50  %tobool2.not = icmp eq i64 %and1, 0
51  br i1 %tobool2.not, label %if.end4, label %if.then3
52
53if.then3:                                         ; preds = %if.end
54  tail call void @baz()
55  br label %if.end4
56
57if.end4:                                          ; preds = %if.then3, %if.end
58  ret void
59}
60
61declare dso_local void @bar() local_unnamed_addr #1
62
63declare dso_local void @baz() local_unnamed_addr #1
64