blob: 036a615e7ff0c753733b3f1109ed633d2f2c0177 [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:
Stephen Linc1c7a132013-07-14 01:42:54 +00005; CHECK-LABEL: @test_br(
Frits van Bommelad964552011-05-22 16:24:18 +00006; 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:
Stephen Linc1c7a132013-07-14 01:42:54 +000020; CHECK-LABEL: @test_switch(
Frits van Bommelad964552011-05-22 16:24:18 +000021; 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:
Stephen Linc1c7a132013-07-14 01:42:54 +000038; CHECK-LABEL: @test_indirectbr(
Frits van Bommelad964552011-05-22 16:24:18 +000039; 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}