104 lines · plain
1; RUN: opt < %s -passes='print<branch-prob>' -disable-output 2>&1 | FileCheck %s2 3@A = global i32 0, align 44@B = global i32 0, align 45 6; CHECK-LABEL: eq_opaque_minus_one7define void @eq_opaque_minus_one(ptr %base) {8entry:9 %const = bitcast i32 -1 to i3210 %tmp1 = load i32, ptr @B, align 411 br label %for.body12 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.iv19 %storemerge176 = load i32, ptr %storemerge176.in, align 420 store i32 %storemerge176, ptr @A, align 421 %cmp20 = icmp eq i32 %storemerge176, %const22 br i1 %cmp20, label %if.then, label %for.inc23 24if.then:25 %lnot.ext = zext i1 %cmp20 to i3226 store i32 %lnot.ext, ptr @B, align 427 br label %for.inc28 29for.inc:30 %tmp7 = phi i32 [ %tmp4, %for.body ], [ %lnot.ext, %if.then ]31 %inc = add nuw nsw i32 %inc.iv, 132 %cmp9 = icmp ult i32 %inc, 40133 br i1 %cmp9, label %for.body, label %exit34 35exit:36 ret void37}38 39; CHECK-LABEL: ne_opaque_minus_one40define void @ne_opaque_minus_one(ptr %base) {41entry:42 %const = bitcast i32 -1 to i3243 %tmp1 = load i32, ptr @B, align 444 br label %for.body45 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.iv52 %storemerge176 = load i32, ptr %storemerge176.in, align 453 store i32 %storemerge176, ptr @A, align 454 %cmp20 = icmp ne i32 %storemerge176, %const55 br i1 %cmp20, label %if.then, label %for.inc56 57if.then:58 %lnot.ext = zext i1 %cmp20 to i3259 store i32 %lnot.ext, ptr @B, align 460 br label %for.inc61 62for.inc:63 %tmp7 = phi i32 [ %tmp4, %for.body ], [ %lnot.ext, %if.then ]64 %inc = add nuw nsw i32 %inc.iv, 165 %cmp9 = icmp ult i32 %inc, 40166 br i1 %cmp9, label %for.body, label %exit67 68exit:69 ret void70}71 72; CHECK-LABEL: sgt_opaque_minus_one73define void @sgt_opaque_minus_one(ptr %base) {74entry:75 %const = bitcast i32 -1 to i3276 %tmp1 = load i32, ptr @B, align 477 br label %for.body78 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.iv85 %storemerge176 = load i32, ptr %storemerge176.in, align 486 store i32 %storemerge176, ptr @A, align 487 %cmp20 = icmp sgt i32 %storemerge176, %const88 br i1 %cmp20, label %if.then, label %for.inc89 90if.then:91 %lnot.ext = zext i1 %cmp20 to i3292 store i32 %lnot.ext, ptr @B, align 493 br label %for.inc94 95for.inc:96 %tmp7 = phi i32 [ %tmp4, %for.body ], [ %lnot.ext, %if.then ]97 %inc = add nuw nsw i32 %inc.iv, 198 %cmp9 = icmp ult i32 %inc, 40199 br i1 %cmp9, label %for.body, label %exit100 101exit:102 ret void103}104