blob: 3996efd82b5fbbd0a5424dce93cdd6e623e79317 [file] [log] [blame]
Frits van Bommelad964552011-05-22 16:24:18 +00001; RUN: opt -S <%s -simplifycfg | FileCheck %s
2
3define void @test_br(i32 %x) {
4entry:
5; CHECK: @test_br
6; CHECK-NEXT: entry:
7; CHECK-NEXT: ret void
8 %cmp = icmp eq i32 %x, 10
9 br i1 %cmp, label %if.then, label %if.then
10
11if.then: ; preds = %entry
12 br label %if.end
13
14if.end: ; preds = %if.else, %if.then
15 ret void
16}
17
18define void @test_switch(i32 %x) nounwind {
19entry:
20; CHECK: @test_switch
21; CHECK-NEXT: entry:
22; CHECK-NEXT: ret void
23 %rem = srem i32 %x, 3
24 switch i32 %rem, label %sw.bb [
25 i32 1, label %sw.bb
26 i32 10, label %sw.bb
27 ]
28
29sw.bb: ; preds = %sw.default, %entry, %entry
30 br label %sw.epilog
31
32sw.epilog: ; preds = %sw.bb
33 ret void
34}
35
36define void @test_indirectbr(i32 %x) {
37entry:
38; CHECK: @test_indirectbr
39; CHECK-NEXT: entry:
40; Ideally this should now check:
41; CHK-NEXT: ret void
42; But that doesn't happen yet. Instead:
43; CHECK-NEXT: br label %L1
44
45 %label = bitcast i8* blockaddress(@test_indirectbr, %L1) to i8*
46 indirectbr i8* %label, [label %L1, label %L2]
47
48L1: ; preds = %entry
49 ret void
50L2: ; preds = %entry
51 ret void
52}