blob: 4a692f3622ec8e991d7574b90aa565437eb8b4ed [file] [log] [blame]
Eli Friedmanb1a6eab2011-03-15 02:23:35 +00001; RUN: opt < %s -simplifycfg -S | FileCheck %s
Chris Lattnerd7e30972004-10-18 04:06:41 +00002
Tanya Lattnerf04d8d12008-03-18 03:45:45 +00003define void @test1(i1 %C, i1* %BP) {
Eli Friedmanb1a6eab2011-03-15 02:23:35 +00004; CHECK: @test1
5; CHECK: entry:
6; CHECK-NEXT: ret void
7entry:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +00008 br i1 %C, label %T, label %F
Eli Friedmanb1a6eab2011-03-15 02:23:35 +00009T:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000010 store i1 %C, i1* %BP
11 unreachable
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000012F:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000013 ret void
Chris Lattnerd7e30972004-10-18 04:06:41 +000014}
15
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000016define void @test2() {
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000017; CHECK: @test2
18; CHECK: entry:
19; CHECK-NEXT: call void @test2()
20; CHECK-NEXT: ret void
21entry:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000022 invoke void @test2( )
23 to label %N unwind label %U
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000024U:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000025 unreachable
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000026N:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000027 ret void
Chris Lattnerd7e30972004-10-18 04:06:41 +000028}
29
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000030define i32 @test3(i32 %v) {
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000031; CHECK: @test3
32; CHECK: entry:
33; CHECK-NEXT: [[CMP:%[A-Za-z0-9]+]] = icmp eq i32 %v, 2
34; CHECK-NEXT: select i1 [[CMP]], i32 2, i32 1
35; CHECK-NEXT: ret
36entry:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000037 switch i32 %v, label %default [
38 i32 1, label %U
39 i32 2, label %T
40 ]
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000041default:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000042 ret i32 1
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000043U:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000044 unreachable
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000045T:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000046 ret i32 2
Chris Lattnerd7e30972004-10-18 04:06:41 +000047}
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000048
Eli Friedmanb1a6eab2011-03-15 02:23:35 +000049; PR9450
50define i32 @test4(i32 %v) {
51; CHECK: entry:
52; CHECK-NEXT: switch i32 %v, label %T [
53; CHECK-NEXT: i32 3, label %V
54; CHECK-NEXT: i32 2, label %U
55; CHECK-NEXT: ]
56
57entry:
58 br label %SWITCH
59V:
60 ret i32 7
61SWITCH:
62 switch i32 %v, label %default [
63 i32 1, label %T
64 i32 2, label %U
65 i32 3, label %V
66 ]
67default:
68 unreachable
69U:
70 ret i32 1
71T:
72 ret i32 2
73}