xref: /llvm-project/llvm/test/Transforms/Inline/deleted-scc.ll (revision 151602c7a9935558ca671b35359989b261045db0)
1; RUN: opt -passes=inline < %s -S | FileCheck %s
2
3; CHECK-NOT: define
4; CHECK: define void @e()
5; CHECK-NOT: define
6
7@b = external local_unnamed_addr global i32, align 4
8
9define void @e() local_unnamed_addr {
10entry:
11  call fastcc void @d()
12  ret void
13}
14
15define internal fastcc void @f() unnamed_addr {
16entry:
17  call fastcc void @d()
18  ret void
19}
20
21define internal fastcc void @d() unnamed_addr {
22entry:
23  br label %L
24
25L:                                                ; preds = %cleanup9, %entry
26  %cleanup.dest.slot.0 = phi i32 [ undef, %entry ], [ %cleanup.dest.slot.3, %cleanup9 ]
27  store i32 0, ptr @b, align 4
28  %tobool.not = icmp eq i32 0, 0
29  br i1 %tobool.not, label %if.then, label %while.cond
30
31while.cond:                                       ; preds = %cleanup9, %L
32  %cleanup.dest.slot.2 = phi i32 [ %cleanup.dest.slot.0, %L ], [ 0, %cleanup9 ]
33  %0 = load i32, ptr @b, align 4
34  %tobool3.not = icmp eq i32 %0, 0
35  br i1 %tobool3.not, label %cleanup9, label %while.body4
36
37while.body4:                                      ; preds = %while.cond
38  call fastcc void @f()
39  br label %cleanup9
40
41cleanup9:                                         ; preds = %while.cond, %while.body4
42  %cleanup.dest.slot.3 = phi i32 [ %cleanup.dest.slot.2, %while.body4 ], [ 0, %while.cond ]
43  switch i32 %cleanup.dest.slot.3, label %common.ret [
44    i32 0, label %while.cond
45    i32 2, label %L
46  ]
47
48common.ret:                                       ; preds = %cleanup9, %if.then
49  ret void
50
51if.then:                                          ; preds = %L
52  call void @e()
53  br label %common.ret
54}
55