~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/CodeGen/Generic/builtin-expect.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: llc < %s
 
2
 
 
3
define i32 @test1(i32 %x) nounwind uwtable ssp {
 
4
entry:
 
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, 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
 
 
16
if.then:                                          ; preds = %entry
 
17
  %call = call i32 (...) @f()
 
18
  store i32 %call, i32* %retval
 
19
  br label %return
 
20
 
 
21
if.end:                                           ; preds = %entry
 
22
  store i32 1, i32* %retval
 
23
  br label %return
 
24
 
 
25
return:                                           ; preds = %if.end, %if.then
 
26
  %0 = load i32, i32* %retval
 
27
  ret i32 %0
 
28
}
 
29
 
 
30
declare i64 @llvm.expect.i64(i64, i64) nounwind readnone
 
31
 
 
32
declare i32 @f(...)
 
33
 
 
34
define i32 @test2(i32 %x) nounwind uwtable ssp {
 
35
entry:
 
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, 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
 
 
45
if.then:                                          ; preds = %entry
 
46
  %call = call i32 (...) @f()
 
47
  store i32 %call, i32* %retval
 
48
  br label %return
 
49
 
 
50
if.end:                                           ; preds = %entry
 
51
  store i32 1, i32* %retval
 
52
  br label %return
 
53
 
 
54
return:                                           ; preds = %if.end, %if.then
 
55
  %0 = load i32, i32* %retval
 
56
  ret i32 %0
 
57
}
 
58
 
 
59
define i32 @test3(i32 %x) nounwind uwtable ssp {
 
60
entry:
 
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, 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
 
 
73
if.then:                                          ; preds = %entry
 
74
  %call = call i32 (...) @f()
 
75
  store i32 %call, i32* %retval
 
76
  br label %return
 
77
 
 
78
if.end:                                           ; preds = %entry
 
79
  store i32 1, i32* %retval
 
80
  br label %return
 
81
 
 
82
return:                                           ; preds = %if.end, %if.then
 
83
  %0 = load i32, i32* %retval
 
84
  ret i32 %0
 
85
}
 
86
 
 
87
define i32 @test4(i32 %x) nounwind uwtable ssp {
 
88
entry:
 
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, 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
 
 
102
if.then:                                          ; preds = %entry
 
103
  %call = call i32 (...) @f()
 
104
  store i32 %call, i32* %retval
 
105
  br label %return
 
106
 
 
107
if.end:                                           ; preds = %entry
 
108
  store i32 1, i32* %retval
 
109
  br label %return
 
110
 
 
111
return:                                           ; preds = %if.end, %if.then
 
112
  %0 = load i32, i32* %retval
 
113
  ret i32 %0
 
114
}
 
115
 
 
116
define i32 @test5(i32 %x) nounwind uwtable ssp {
 
117
entry:
 
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, 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
 
 
129
if.then:                                          ; preds = %entry
 
130
  %call = call i32 (...) @f()
 
131
  store i32 %call, i32* %retval
 
132
  br label %return
 
133
 
 
134
if.end:                                           ; preds = %entry
 
135
  store i32 1, i32* %retval
 
136
  br label %return
 
137
 
 
138
return:                                           ; preds = %if.end, %if.then
 
139
  %0 = load i32, i32* %retval
 
140
  ret i32 %0
 
141
}
 
142
 
 
143
define i32 @test6(i32 %x) nounwind uwtable ssp {
 
144
entry:
 
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, 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
 
 
156
sw.bb:                                            ; preds = %entry, %entry
 
157
  store i32 0, i32* %retval
 
158
  br label %return
 
159
 
 
160
sw.epilog:                                        ; preds = %entry
 
161
  store i32 1, i32* %retval
 
162
  br label %return
 
163
 
 
164
return:                                           ; preds = %sw.epilog, %sw.bb
 
165
  %0 = load i32, i32* %retval
 
166
  ret i32 %0
 
167
}
 
168
 
 
169
define i32 @test7(i32 %x) nounwind uwtable ssp {
 
170
entry:
 
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, 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
 
 
182
sw.bb:                                            ; preds = %entry, %entry
 
183
  %tmp1 = load i32, i32* %x.addr, align 4
 
184
  store i32 %tmp1, i32* %retval
 
185
  br label %return
 
186
 
 
187
sw.epilog:                                        ; preds = %entry
 
188
  store i32 0, i32* %retval
 
189
  br label %return
 
190
 
 
191
return:                                           ; preds = %sw.epilog, %sw.bb
 
192
  %0 = load i32, i32* %retval
 
193
  ret i32 %0
 
194
}
 
195
 
 
196
define i32 @test8(i32 %x) nounwind uwtable ssp {
 
197
entry:
 
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, 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
 
 
208
if.then:                                          ; preds = %entry
 
209
  %call = call i32 (...) @f()
 
210
  store i32 %call, i32* %retval
 
211
  br label %return
 
212
 
 
213
if.end:                                           ; preds = %entry
 
214
  store i32 1, i32* %retval
 
215
  br label %return
 
216
 
 
217
return:                                           ; preds = %if.end, %if.then
 
218
  %0 = load i32, i32* %retval
 
219
  ret i32 %0
 
220
}
 
221
 
 
222
declare i32 @llvm.expect.i32(i32, i32) nounwind readnone
 
223