1; RUN: opt < %s -passes='print<branch-prob>' -disable-output 2>&1 | FileCheck %s 2 3@A = global i32 0, align 4 4@B = global i32 0, align 4 5 6; CHECK-LABEL: eq_opaque_minus_one 7define void @eq_opaque_minus_one(ptr %base) { 8entry: 9 %const = bitcast i32 -1 to i32 10 %tmp1 = load i32, ptr @B, align 4 11 br label %for.body 12 13; CHECK: edge %for.body -> %if.then probability is 0x30000000 / 0x80000000 = 37.50% 14; CHECK: edge %for.body -> %for.inc probability is 0x50000000 / 0x80000000 = 62.50% 15for.body: 16 %tmp4 = phi i32 [ %tmp1, %entry ], [ %tmp7, %for.inc ] 17 %inc.iv = phi i32 [ 0, %entry ], [ %inc, %for.inc ] 18 %storemerge176.in = getelementptr inbounds i32, ptr %base, i32 %inc.iv 19 %storemerge176 = load i32, ptr %storemerge176.in, align 4 20 store i32 %storemerge176, ptr @A, align 4 21 %cmp20 = icmp eq i32 %storemerge176, %const 22 br i1 %cmp20, label %if.then, label %for.inc 23 24if.then: 25 %lnot.ext = zext i1 %cmp20 to i32 26 store i32 %lnot.ext, ptr @B, align 4 27 br label %for.inc 28 29for.inc: 30 %tmp7 = phi i32 [ %tmp4, %for.body ], [ %lnot.ext, %if.then ] 31 %inc = add nuw nsw i32 %inc.iv, 1 32 %cmp9 = icmp ult i32 %inc, 401 33 br i1 %cmp9, label %for.body, label %exit 34 35exit: 36 ret void 37} 38 39; CHECK-LABEL: ne_opaque_minus_one 40define void @ne_opaque_minus_one(ptr %base) { 41entry: 42 %const = bitcast i32 -1 to i32 43 %tmp1 = load i32, ptr @B, align 4 44 br label %for.body 45 46; CHECK: edge %for.body -> %if.then probability is 0x50000000 / 0x80000000 = 62.50% 47; CHECK: edge %for.body -> %for.inc probability is 0x30000000 / 0x80000000 = 37.50% 48for.body: 49 %tmp4 = phi i32 [ %tmp1, %entry ], [ %tmp7, %for.inc ] 50 %inc.iv = phi i32 [ 0, %entry ], [ %inc, %for.inc ] 51 %storemerge176.in = getelementptr inbounds i32, ptr %base, i32 %inc.iv 52 %storemerge176 = load i32, ptr %storemerge176.in, align 4 53 store i32 %storemerge176, ptr @A, align 4 54 %cmp20 = icmp ne i32 %storemerge176, %const 55 br i1 %cmp20, label %if.then, label %for.inc 56 57if.then: 58 %lnot.ext = zext i1 %cmp20 to i32 59 store i32 %lnot.ext, ptr @B, align 4 60 br label %for.inc 61 62for.inc: 63 %tmp7 = phi i32 [ %tmp4, %for.body ], [ %lnot.ext, %if.then ] 64 %inc = add nuw nsw i32 %inc.iv, 1 65 %cmp9 = icmp ult i32 %inc, 401 66 br i1 %cmp9, label %for.body, label %exit 67 68exit: 69 ret void 70} 71 72; CHECK-LABEL: sgt_opaque_minus_one 73define void @sgt_opaque_minus_one(ptr %base) { 74entry: 75 %const = bitcast i32 -1 to i32 76 %tmp1 = load i32, ptr @B, align 4 77 br label %for.body 78 79; CHECK: edge %for.body -> %if.then probability is 0x50000000 / 0x80000000 = 62.50% 80; CHECK: edge %for.body -> %for.inc probability is 0x30000000 / 0x80000000 = 37.50% 81for.body: 82 %tmp4 = phi i32 [ %tmp1, %entry ], [ %tmp7, %for.inc ] 83 %inc.iv = phi i32 [ 0, %entry ], [ %inc, %for.inc ] 84 %storemerge176.in = getelementptr inbounds i32, ptr %base, i32 %inc.iv 85 %storemerge176 = load i32, ptr %storemerge176.in, align 4 86 store i32 %storemerge176, ptr @A, align 4 87 %cmp20 = icmp sgt i32 %storemerge176, %const 88 br i1 %cmp20, label %if.then, label %for.inc 89 90if.then: 91 %lnot.ext = zext i1 %cmp20 to i32 92 store i32 %lnot.ext, ptr @B, align 4 93 br label %for.inc 94 95for.inc: 96 %tmp7 = phi i32 [ %tmp4, %for.body ], [ %lnot.ext, %if.then ] 97 %inc = add nuw nsw i32 %inc.iv, 1 98 %cmp9 = icmp ult i32 %inc, 401 99 br i1 %cmp9, label %for.body, label %exit 100 101exit: 102 ret void 103} 104