1+ ; REQUIRES: asserts, stats
2+ ; RUN: opt -stats -passes=count-instructions < %s
3+
4+ define dso_local noundef i32 @add (i32 noundef %n ) {
5+ entry:
6+ %n.addr = alloca i32 , align 4
7+ store i32 %n , ptr %n.addr , align 4
8+ %0 = load i32 , ptr %n.addr , align 4
9+ %add = add nsw i32 %0 , 1
10+ ret i32 %add
11+ }
12+
13+ define dso_local void @f (i32 noundef %i ) {
14+ entry:
15+ %i.addr = alloca i32 , align 4
16+ %x = alloca i32 , align 4
17+ store i32 %i , ptr %i.addr , align 4
18+ store i32 0 , ptr %x , align 4
19+ %0 = load i32 , ptr %i.addr , align 4
20+ switch i32 %0 , label %sw.epilog [
21+ i32 0 , label %sw.bb
22+ i32 10 , label %sw.bb9
23+ i32 1 , label %sw.bb9
24+ i32 2 , label %sw.bb10
25+ i32 3 , label %sw.bb11
26+ i32 4 , label %sw.bb12
27+ ]
28+
29+ sw.bb:
30+ %call = call noundef i32 @add (i32 noundef 9 )
31+ store i32 %call , ptr %x , align 4
32+ %1 = load i32 , ptr %x , align 4
33+ %cmp = icmp eq i32 %1 , 0
34+ br i1 %cmp , label %if.then , label %if.end
35+
36+ if.then:
37+ store i32 1 , ptr %x , align 4
38+ br label %if.end
39+
40+ if.end:
41+ %2 = load i32 , ptr %x , align 4
42+ %call1 = call noundef i32 @add (i32 noundef %2 )
43+ store i32 %call1 , ptr %x , align 4
44+ %3 = load i32 , ptr %x , align 4
45+ %cmp2 = icmp eq i32 %3 , 0
46+ br i1 %cmp2 , label %if.then3 , label %if.else
47+
48+ if.then3:
49+ store i32 1 , ptr %x , align 4
50+ br label %if.end8
51+
52+ if.else:
53+ %4 = load i32 , ptr %x , align 4
54+ %cmp4 = icmp eq i32 %4 , 1
55+ br i1 %cmp4 , label %if.then5 , label %if.else6
56+
57+ if.then5:
58+ store i32 0 , ptr %x , align 4
59+ br label %if.end7
60+
61+ if.else6:
62+ store i32 2 , ptr %x , align 4
63+ br label %if.end7
64+
65+ if.end7:
66+ br label %if.end8
67+
68+ if.end8:
69+ br label %sw.epilog
70+
71+ sw.bb9:
72+ call void @h ()
73+ br label %sw.epilog
74+
75+ sw.bb10:
76+ call void @h ()
77+ br label %sw.epilog
78+
79+ sw.bb11:
80+ call void @j ()
81+ br label %sw.bb12
82+
83+ sw.bb12:
84+ call void @k ()
85+ br label %if.end15
86+
87+ sw.epilog:
88+ %5 = load i32 , ptr %x , align 4
89+ %cmp13 = icmp eq i32 %5 , 0
90+ br i1 %cmp13 , label %if.then14 , label %if.end15
91+
92+ if.then14:
93+ store i32 1 , ptr %x , align 4
94+ br label %if.end15
95+
96+ if.end15:
97+ ret void
98+ }
99+
100+ declare void @h () #2
101+
102+ declare void @j () #2
103+
104+ declare void @k () #2
0 commit comments