blob: 1a602a63587e615d78c9164fe8c98b870a456e23 [file] [log] [blame]
Chris Lattnerd98eb442009-10-11 03:54:21 +00001; RUN: opt < %s -jump-threading -S | FileCheck %s
Chris Lattnerf29984f2008-04-22 06:35:14 +00002; There should be no uncond branches left.
Chris Lattnerd98eb442009-10-11 03:54:21 +00003; RUN: opt < %s -jump-threading -S | not grep {br label}
Chris Lattnerf29984f2008-04-22 06:35:14 +00004
5declare i32 @f1()
6declare i32 @f2()
7declare void @f3()
8
Chris Lattner41fb43b2009-10-11 03:55:30 +00009define i32 @test1(i1 %cond) {
10; CHECK: @test1
11
Chris Lattnerf29984f2008-04-22 06:35:14 +000012 br i1 %cond, label %T1, label %F1
13
14T1:
15 %v1 = call i32 @f1()
16 br label %Merge
17
18F1:
19 %v2 = call i32 @f2()
20 br label %Merge
21
22Merge:
23 %A = phi i1 [true, %T1], [false, %F1]
24 %B = phi i32 [%v1, %T1], [%v2, %F1]
25 br i1 %A, label %T2, label %F2
26
27T2:
Chris Lattnerd98eb442009-10-11 03:54:21 +000028; CHECK: T2:
29; CHECK: ret i32 %v1
Chris Lattnerf29984f2008-04-22 06:35:14 +000030 call void @f3()
31 ret i32 %B
32
33F2:
Chris Lattnerd98eb442009-10-11 03:54:21 +000034; CHECK: F2:
35; CHECK: ret i32 %v2
Chris Lattnerf29984f2008-04-22 06:35:14 +000036 ret i32 %B
37}
Chris Lattner421fa9e2008-12-03 07:48:08 +000038
39
40;; cond is known false on Entry -> F1 edge!
41define i32 @test2(i1 %cond) {
Chris Lattner41fb43b2009-10-11 03:55:30 +000042; CHECK: @test2
Chris Lattner421fa9e2008-12-03 07:48:08 +000043Entry:
44 br i1 %cond, label %T1, label %F1
45
46T1:
Chris Lattnerd98eb442009-10-11 03:54:21 +000047; CHECK: %v1 = call i32 @f1()
48; CHECK: ret i32 47
Chris Lattner421fa9e2008-12-03 07:48:08 +000049 %v1 = call i32 @f1()
50 br label %Merge
51
52F1:
53 br i1 %cond, label %Merge, label %F2
54
55Merge:
56 %B = phi i32 [47, %T1], [192, %F1]
57 ret i32 %B
58
59F2:
60 call void @f3()
61 ret i32 12
62}
Chris Lattner41fb43b2009-10-11 03:55:30 +000063
64
65; Undef handling.
66define i32 @test3(i1 %cond) {
67; CHECK: @test3
68; CHECK-NEXT: T1:
69; CHECK-NEXT: ret i32 42
70 br i1 undef, label %T1, label %F1
71
72T1:
73 ret i32 42
74
75F1:
76 ret i32 17
77}