blob: e8cd07badf0cee72222af3f02c695086496efab0 [file] [log] [blame]
Jakub Staszak9da99342011-07-06 18:22:43 +00001; RUN: llc < %s
2
3define i32 @test1(i32 %x) nounwind uwtable ssp {
4entry:
5 %retval = alloca i32, align 4
6 %x.addr = alloca i32, align 4
7 store i32 %x, i32* %x.addr, align 4
8 %tmp = load i32* %x.addr, align 4
9 %cmp = icmp sgt i32 %tmp, 1
10 %conv = zext i1 %cmp to i32
11 %conv1 = sext i32 %conv to i64
12 %expval = call i64 @llvm.expect.i64(i64 %conv1, i64 1)
13 %tobool = icmp ne i64 %expval, 0
14 br i1 %tobool, label %if.then, label %if.end
15
16if.then: ; preds = %entry
17 %call = call i32 (...)* @f()
18 store i32 %call, i32* %retval
19 br label %return
20
21if.end: ; preds = %entry
22 store i32 1, i32* %retval
23 br label %return
24
25return: ; preds = %if.end, %if.then
26 %0 = load i32* %retval
27 ret i32 %0
28}
29
30declare i64 @llvm.expect.i64(i64, i64) nounwind readnone
31
32declare i32 @f(...)
33
34define i32 @test2(i32 %x) nounwind uwtable ssp {
35entry:
36 %retval = alloca i32, align 4
37 %x.addr = alloca i32, align 4
38 store i32 %x, i32* %x.addr, align 4
39 %tmp = load i32* %x.addr, align 4
40 %conv = sext i32 %tmp to i64
41 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)
42 %tobool = icmp ne i64 %expval, 0
43 br i1 %tobool, label %if.then, label %if.end
44
45if.then: ; preds = %entry
46 %call = call i32 (...)* @f()
47 store i32 %call, i32* %retval
48 br label %return
49
50if.end: ; preds = %entry
51 store i32 1, i32* %retval
52 br label %return
53
54return: ; preds = %if.end, %if.then
55 %0 = load i32* %retval
56 ret i32 %0
57}
58
59define i32 @test3(i32 %x) nounwind uwtable ssp {
60entry:
61 %retval = alloca i32, align 4
62 %x.addr = alloca i32, align 4
63 store i32 %x, i32* %x.addr, align 4
64 %tmp = load i32* %x.addr, align 4
65 %tobool = icmp ne i32 %tmp, 0
66 %lnot = xor i1 %tobool, true
67 %lnot.ext = zext i1 %lnot to i32
68 %conv = sext i32 %lnot.ext to i64
69 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)
70 %tobool1 = icmp ne i64 %expval, 0
71 br i1 %tobool1, label %if.then, label %if.end
72
73if.then: ; preds = %entry
74 %call = call i32 (...)* @f()
75 store i32 %call, i32* %retval
76 br label %return
77
78if.end: ; preds = %entry
79 store i32 1, i32* %retval
80 br label %return
81
82return: ; preds = %if.end, %if.then
83 %0 = load i32* %retval
84 ret i32 %0
85}
86
87define i32 @test4(i32 %x) nounwind uwtable ssp {
88entry:
89 %retval = alloca i32, align 4
90 %x.addr = alloca i32, align 4
91 store i32 %x, i32* %x.addr, align 4
92 %tmp = load i32* %x.addr, align 4
93 %tobool = icmp ne i32 %tmp, 0
94 %lnot = xor i1 %tobool, true
95 %lnot1 = xor i1 %lnot, true
96 %lnot.ext = zext i1 %lnot1 to i32
97 %conv = sext i32 %lnot.ext to i64
98 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)
99 %tobool2 = icmp ne i64 %expval, 0
100 br i1 %tobool2, label %if.then, label %if.end
101
102if.then: ; preds = %entry
103 %call = call i32 (...)* @f()
104 store i32 %call, i32* %retval
105 br label %return
106
107if.end: ; preds = %entry
108 store i32 1, i32* %retval
109 br label %return
110
111return: ; preds = %if.end, %if.then
112 %0 = load i32* %retval
113 ret i32 %0
114}
115
116define i32 @test5(i32 %x) nounwind uwtable ssp {
117entry:
118 %retval = alloca i32, align 4
119 %x.addr = alloca i32, align 4
120 store i32 %x, i32* %x.addr, align 4
121 %tmp = load i32* %x.addr, align 4
122 %cmp = icmp slt i32 %tmp, 0
123 %conv = zext i1 %cmp to i32
124 %conv1 = sext i32 %conv to i64
125 %expval = call i64 @llvm.expect.i64(i64 %conv1, i64 0)
126 %tobool = icmp ne i64 %expval, 0
127 br i1 %tobool, label %if.then, label %if.end
128
129if.then: ; preds = %entry
130 %call = call i32 (...)* @f()
131 store i32 %call, i32* %retval
132 br label %return
133
134if.end: ; preds = %entry
135 store i32 1, i32* %retval
136 br label %return
137
138return: ; preds = %if.end, %if.then
139 %0 = load i32* %retval
140 ret i32 %0
141}
142
143define i32 @test6(i32 %x) nounwind uwtable ssp {
144entry:
145 %retval = alloca i32, align 4
146 %x.addr = alloca i32, align 4
147 store i32 %x, i32* %x.addr, align 4
148 %tmp = load i32* %x.addr, align 4
149 %conv = sext i32 %tmp to i64
150 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)
151 switch i64 %expval, label %sw.epilog [
152 i64 1, label %sw.bb
153 i64 2, label %sw.bb
154 ]
155
156sw.bb: ; preds = %entry, %entry
157 store i32 0, i32* %retval
158 br label %return
159
160sw.epilog: ; preds = %entry
161 store i32 1, i32* %retval
162 br label %return
163
164return: ; preds = %sw.epilog, %sw.bb
165 %0 = load i32* %retval
166 ret i32 %0
167}
168
169define i32 @test7(i32 %x) nounwind uwtable ssp {
170entry:
171 %retval = alloca i32, align 4
172 %x.addr = alloca i32, align 4
173 store i32 %x, i32* %x.addr, align 4
174 %tmp = load i32* %x.addr, align 4
175 %conv = sext i32 %tmp to i64
176 %expval = call i64 @llvm.expect.i64(i64 %conv, i64 1)
177 switch i64 %expval, label %sw.epilog [
178 i64 2, label %sw.bb
179 i64 3, label %sw.bb
180 ]
181
182sw.bb: ; preds = %entry, %entry
183 %tmp1 = load i32* %x.addr, align 4
184 store i32 %tmp1, i32* %retval
185 br label %return
186
187sw.epilog: ; preds = %entry
188 store i32 0, i32* %retval
189 br label %return
190
191return: ; preds = %sw.epilog, %sw.bb
192 %0 = load i32* %retval
193 ret i32 %0
194}
195
196define i32 @test8(i32 %x) nounwind uwtable ssp {
197entry:
198 %retval = alloca i32, align 4
199 %x.addr = alloca i32, align 4
200 store i32 %x, i32* %x.addr, align 4
201 %tmp = load i32* %x.addr, align 4
202 %cmp = icmp sgt i32 %tmp, 1
203 %conv = zext i1 %cmp to i32
204 %expval = call i32 @llvm.expect.i32(i32 %conv, i32 1)
205 %tobool = icmp ne i32 %expval, 0
206 br i1 %tobool, label %if.then, label %if.end
207
208if.then: ; preds = %entry
209 %call = call i32 (...)* @f()
210 store i32 %call, i32* %retval
211 br label %return
212
213if.end: ; preds = %entry
214 store i32 1, i32* %retval
215 br label %return
216
217return: ; preds = %if.end, %if.then
218 %0 = load i32* %retval
219 ret i32 %0
220}
221
222declare i32 @llvm.expect.i32(i32, i32) nounwind readnone
223