1; RUN: opt -simplifycfg -S -o - < %s | FileCheck %s 2 3declare void @helper(i32) 4 5define void @test1(i1 %a, i1 %b) { 6; CHECK: @test1 7entry: 8 br i1 %a, label %Y, label %X, !prof !0 9; CHECK: br i1 %or.cond, label %Z, label %Y, !prof !0 10 11X: 12 %c = or i1 %b, false 13 br i1 %c, label %Z, label %Y, !prof !1 14 15Y: 16 call void @helper(i32 0) 17 ret void 18 19Z: 20 call void @helper(i32 1) 21 ret void 22} 23 24define void @test2(i1 %a, i1 %b) { 25; CHECK: @test2 26entry: 27 br i1 %a, label %X, label %Y, !prof !1 28; CHECK: br i1 %or.cond, label %Z, label %Y, !prof !1 29; CHECK-NOT: !prof 30 31X: 32 %c = or i1 %b, false 33 br i1 %c, label %Z, label %Y, !prof !2 34 35Y: 36 call void @helper(i32 0) 37 ret void 38 39Z: 40 call void @helper(i32 1) 41 ret void 42} 43 44define void @test3(i1 %a, i1 %b) { 45; CHECK: @test3 46; CHECK-NOT: !prof 47entry: 48 br i1 %a, label %X, label %Y, !prof !1 49 50X: 51 %c = or i1 %b, false 52 br i1 %c, label %Z, label %Y 53 54Y: 55 call void @helper(i32 0) 56 ret void 57 58Z: 59 call void @helper(i32 1) 60 ret void 61} 62 63define void @test4(i1 %a, i1 %b) { 64; CHECK: @test4 65; CHECK-NOT: !prof 66entry: 67 br i1 %a, label %X, label %Y 68 69X: 70 %c = or i1 %b, false 71 br i1 %c, label %Z, label %Y, !prof !1 72 73Y: 74 call void @helper(i32 0) 75 ret void 76 77Z: 78 call void @helper(i32 1) 79 ret void 80} 81 82!0 = metadata !{metadata !"branch_weights", i32 3, i32 5} 83!1 = metadata !{metadata !"branch_weights", i32 1, i32 1} 84!2 = metadata !{metadata !"branch_weights", i32 1, i32 2} 85 86; CHECK: !0 = metadata !{metadata !"branch_weights", i32 5, i32 11} 87; CHECK: !1 = metadata !{metadata !"branch_weights", i32 1, i32 5} 88; CHECK-NOT: !2 89