1; RUN: llvm-as < %s | opt -jump-threading -simplifycfg -mem2reg | llvm-dis | grep {ret i32 %v1} 2; There should be no uncond branches left. 3; RUN: llvm-as < %s | opt -jump-threading -simplifycfg -mem2reg | llvm-dis | not grep {br label} 4 5declare i32 @f1() 6declare i32 @f2() 7declare void @f3() 8 9define i32 @test(i1 %cond) { 10 br i1 %cond, label %T1, label %F1 11 12T1: 13 %v1 = call i32 @f1() 14 br label %Merge 15 16F1: 17 %v2 = call i32 @f2() 18 br label %Merge 19 20Merge: 21 %A = phi i1 [true, %T1], [false, %F1] 22 %B = phi i32 [%v1, %T1], [%v2, %F1] 23 br i1 %A, label %T2, label %F2 24 25T2: 26 call void @f3() 27 ret i32 %B 28 29F2: 30 ret i32 %B 31} 32 33 34;; cond is known false on Entry -> F1 edge! 35define i32 @test2(i1 %cond) { 36Entry: 37 br i1 %cond, label %T1, label %F1 38 39T1: 40 %v1 = call i32 @f1() 41 br label %Merge 42 43F1: 44 br i1 %cond, label %Merge, label %F2 45 46Merge: 47 %B = phi i32 [47, %T1], [192, %F1] 48 ret i32 %B 49 50F2: 51 call void @f3() 52 ret i32 12 53} 54