Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: tests_lit/llvm2ice_tests/fp.pnacl.ll

Issue 341683002: Add ss/sd suffix to InstX8632Store and legalize FP constants. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: another label Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/IceTargetLoweringX8632.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; This tries to be a comprehensive test of f32 and f64 operations. 1 ; This tries to be a comprehensive test of f32 and f64 operations.
2 ; The CHECK lines are only checking for basic instruction patterns 2 ; The CHECK lines are only checking for basic instruction patterns
3 ; that should be present regardless of the optimization level, so 3 ; that should be present regardless of the optimization level, so
4 ; there are no special OPTM1 match lines. 4 ; there are no special OPTM1 match lines.
5 5
6 ; RUN: %llvm2ice -O2 --verbose none %s | FileCheck %s 6 ; RUN: %llvm2ice -O2 --verbose none %s | FileCheck %s
7 ; RUN: %llvm2ice -Om1 --verbose none %s | FileCheck %s 7 ; RUN: %llvm2ice -Om1 --verbose none %s | FileCheck %s
8 ; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s 8 ; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s
9 ; RUN: %llvm2iceinsts %s | %szdiff %s | FileCheck --check-prefix=DUMP %s 9 ; RUN: %llvm2iceinsts %s | %szdiff %s | FileCheck --check-prefix=DUMP %s
10 ; RUN: %llvm2iceinsts --pnacl %s | %szdiff %s \ 10 ; RUN: %llvm2iceinsts --pnacl %s | %szdiff %s \
11 ; RUN: | FileCheck --check-prefix=DUMP %s 11 ; RUN: | FileCheck --check-prefix=DUMP %s
12 12
13 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 13 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
14 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 14 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
15 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 15 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
16 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 16 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
17 17
18 define internal i32 @doubleArgs(double %a, i32 %b, double %c) { 18 define internal i32 @doubleArgs(double %a, i32 %b, double %c) {
19 entry: 19 entry:
20 ret i32 %b 20 ret i32 %b
21 } 21 }
22 ; CHECK: doubleArgs: 22 ; CHECK-LABEL: doubleArgs
23 ; CHECK: mov eax, dword ptr [esp+12] 23 ; CHECK: mov eax, dword ptr [esp+12]
24 ; CHECK-NEXT: ret 24 ; CHECK-NEXT: ret
25 25
26 define internal i32 @floatArgs(float %a, i32 %b, float %c) { 26 define internal i32 @floatArgs(float %a, i32 %b, float %c) {
27 entry: 27 entry:
28 ret i32 %b 28 ret i32 %b
29 } 29 }
30 ; CHECK: floatArgs: 30 ; CHECK-LABEL: floatArgs
31 ; CHECK: mov eax, dword ptr [esp+8] 31 ; CHECK: mov eax, dword ptr [esp+8]
32 ; CHECK-NEXT: ret 32 ; CHECK-NEXT: ret
33 33
34 define internal i32 @passFpArgs(float %a, double %b, float %c, double %d, float %e, double %f) { 34 define internal i32 @passFpArgs(float %a, double %b, float %c, double %d, float %e, double %f) {
35 entry: 35 entry:
36 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double %b) 36 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double %b)
37 %call1 = call i32 @ignoreFpArgsNoInline(float %c, i32 123, double %d) 37 %call1 = call i32 @ignoreFpArgsNoInline(float %c, i32 123, double %d)
38 %call2 = call i32 @ignoreFpArgsNoInline(float %e, i32 123, double %f) 38 %call2 = call i32 @ignoreFpArgsNoInline(float %e, i32 123, double %f)
39 %add = add i32 %call1, %call 39 %add = add i32 %call1, %call
40 %add3 = add i32 %add, %call2 40 %add3 = add i32 %add, %call2
41 ret i32 %add3 41 ret i32 %add3
42 } 42 }
43 ; CHECK: passFpArgs: 43 ; CHECK-LABEL: passFpArgs
44 ; CHECK: push 123 44 ; CHECK: push 123
45 ; CHECK: call ignoreFpArgsNoInline 45 ; CHECK: call ignoreFpArgsNoInline
46 ; CHECK: push 123 46 ; CHECK: push 123
47 ; CHECK: call ignoreFpArgsNoInline 47 ; CHECK: call ignoreFpArgsNoInline
48 ; CHECK: push 123 48 ; CHECK: push 123
49 ; CHECK: call ignoreFpArgsNoInline 49 ; CHECK: call ignoreFpArgsNoInline
50 50
51 declare i32 @ignoreFpArgsNoInline(float, i32, double) 51 declare i32 @ignoreFpArgsNoInline(float, i32, double)
52 52
53 define internal i32 @passFpConstArg(float %a, double %b) { 53 define internal i32 @passFpConstArg(float %a, double %b) {
54 entry: 54 entry:
55 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00) 55 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00)
56 ret i32 %call 56 ret i32 %call
57 } 57 }
58 ; CHECK: passFpConstArg: 58 ; CHECK-LABEL: passFpConstArg
59 ; CHECK: push 123 59 ; CHECK: push 123
60 ; CHECK: call ignoreFpArgsNoInline 60 ; CHECK: call ignoreFpArgsNoInline
61 61
62 define internal i32 @passFp32ConstArg(float %a) { 62 define internal i32 @passFp32ConstArg(float %a) {
63 entry: 63 entry:
64 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0) 64 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0)
65 ret i32 %call 65 ret i32 %call
66 } 66 }
67 ; CHECK: passFp32ConstArg: 67 ; CHECK-LABEL: passFp32ConstArg
68 ; CHECK: push dword 68 ; CHECK: push dword
69 ; CHECK: push 123 69 ; CHECK: push 123
70 ; CHECK: call ignoreFp32ArgsNoInline 70 ; CHECK: call ignoreFp32ArgsNoInline
71 71
72 declare i32 @ignoreFp32ArgsNoInline(float, i32, float) 72 declare i32 @ignoreFp32ArgsNoInline(float, i32, float)
73 73
74 define internal float @returnFloatArg(float %a) { 74 define internal float @returnFloatArg(float %a) {
75 entry: 75 entry:
76 ret float %a 76 ret float %a
77 } 77 }
78 ; CHECK: returnFloatArg: 78 ; CHECK-LABEL: returnFloatArg
79 ; CHECK: fld dword ptr [esp 79 ; CHECK: fld dword ptr [esp
80 80
81 define internal double @returnDoubleArg(double %a) { 81 define internal double @returnDoubleArg(double %a) {
82 entry: 82 entry:
83 ret double %a 83 ret double %a
84 } 84 }
85 ; CHECK: returnDoubleArg: 85 ; CHECK-LABEL: returnDoubleArg
86 ; CHECK: fld qword ptr [esp 86 ; CHECK: fld qword ptr [esp
87 87
88 define internal float @returnFloatConst() { 88 define internal float @returnFloatConst() {
89 entry: 89 entry:
90 ret float 0x3FF3AE1480000000 90 ret float 0x3FF3AE1480000000
91 } 91 }
92 ; CHECK: returnFloatConst: 92 ; CHECK-LABEL: returnFloatConst
93 ; CHECK: fld 93 ; CHECK: fld
94 94
95 define internal double @returnDoubleConst() { 95 define internal double @returnDoubleConst() {
96 entry: 96 entry:
97 ret double 1.230000e+00 97 ret double 1.230000e+00
98 } 98 }
99 ; CHECK: returnDoubleConst: 99 ; CHECK-LABEL: returnDoubleConst
100 ; CHECK: fld 100 ; CHECK: fld
101 101
102 define internal float @addFloat(float %a, float %b) { 102 define internal float @addFloat(float %a, float %b) {
103 entry: 103 entry:
104 %add = fadd float %a, %b 104 %add = fadd float %a, %b
105 ret float %add 105 ret float %add
106 } 106 }
107 ; CHECK: addFloat: 107 ; CHECK-LABEL: addFloat
108 ; CHECK: addss 108 ; CHECK: addss
109 ; CHECK: fld 109 ; CHECK: fld
110 110
111 define internal double @addDouble(double %a, double %b) { 111 define internal double @addDouble(double %a, double %b) {
112 entry: 112 entry:
113 %add = fadd double %a, %b 113 %add = fadd double %a, %b
114 ret double %add 114 ret double %add
115 } 115 }
116 ; CHECK: addDouble: 116 ; CHECK-LABEL: addDouble
117 ; CHECK: addsd 117 ; CHECK: addsd
118 ; CHECK: fld 118 ; CHECK: fld
119 119
120 define internal float @subFloat(float %a, float %b) { 120 define internal float @subFloat(float %a, float %b) {
121 entry: 121 entry:
122 %sub = fsub float %a, %b 122 %sub = fsub float %a, %b
123 ret float %sub 123 ret float %sub
124 } 124 }
125 ; CHECK: subFloat: 125 ; CHECK-LABEL: subFloat
126 ; CHECK: subss 126 ; CHECK: subss
127 ; CHECK: fld 127 ; CHECK: fld
128 128
129 define internal double @subDouble(double %a, double %b) { 129 define internal double @subDouble(double %a, double %b) {
130 entry: 130 entry:
131 %sub = fsub double %a, %b 131 %sub = fsub double %a, %b
132 ret double %sub 132 ret double %sub
133 } 133 }
134 ; CHECK: subDouble: 134 ; CHECK-LABEL: subDouble
135 ; CHECK: subsd 135 ; CHECK: subsd
136 ; CHECK: fld 136 ; CHECK: fld
137 137
138 define internal float @mulFloat(float %a, float %b) { 138 define internal float @mulFloat(float %a, float %b) {
139 entry: 139 entry:
140 %mul = fmul float %a, %b 140 %mul = fmul float %a, %b
141 ret float %mul 141 ret float %mul
142 } 142 }
143 ; CHECK: mulFloat: 143 ; CHECK-LABEL: mulFloat
144 ; CHECK: mulss 144 ; CHECK: mulss
145 ; CHECK: fld 145 ; CHECK: fld
146 146
147 define internal double @mulDouble(double %a, double %b) { 147 define internal double @mulDouble(double %a, double %b) {
148 entry: 148 entry:
149 %mul = fmul double %a, %b 149 %mul = fmul double %a, %b
150 ret double %mul 150 ret double %mul
151 } 151 }
152 ; CHECK: mulDouble: 152 ; CHECK-LABEL: mulDouble
153 ; CHECK: mulsd 153 ; CHECK: mulsd
154 ; CHECK: fld 154 ; CHECK: fld
155 155
156 define internal float @divFloat(float %a, float %b) { 156 define internal float @divFloat(float %a, float %b) {
157 entry: 157 entry:
158 %div = fdiv float %a, %b 158 %div = fdiv float %a, %b
159 ret float %div 159 ret float %div
160 } 160 }
161 ; CHECK: divFloat: 161 ; CHECK-LABEL: divFloat
162 ; CHECK: divss 162 ; CHECK: divss
163 ; CHECK: fld 163 ; CHECK: fld
164 164
165 define internal double @divDouble(double %a, double %b) { 165 define internal double @divDouble(double %a, double %b) {
166 entry: 166 entry:
167 %div = fdiv double %a, %b 167 %div = fdiv double %a, %b
168 ret double %div 168 ret double %div
169 } 169 }
170 ; CHECK: divDouble: 170 ; CHECK-LABEL: divDouble
171 ; CHECK: divsd 171 ; CHECK: divsd
172 ; CHECK: fld 172 ; CHECK: fld
173 173
174 define internal float @remFloat(float %a, float %b) { 174 define internal float @remFloat(float %a, float %b) {
175 entry: 175 entry:
176 %div = frem float %a, %b 176 %div = frem float %a, %b
177 ret float %div 177 ret float %div
178 } 178 }
179 ; CHECK: remFloat: 179 ; CHECK-LABEL: remFloat
180 ; CHECK: call fmodf 180 ; CHECK: call fmodf
181 181
182 define internal double @remDouble(double %a, double %b) { 182 define internal double @remDouble(double %a, double %b) {
183 entry: 183 entry:
184 %div = frem double %a, %b 184 %div = frem double %a, %b
185 ret double %div 185 ret double %div
186 } 186 }
187 ; CHECK: remDouble: 187 ; CHECK-LABEL: remDouble
188 ; CHECK: call fmod 188 ; CHECK: call fmod
189 189
190 define internal float @fptrunc(double %a) { 190 define internal float @fptrunc(double %a) {
191 entry: 191 entry:
192 %conv = fptrunc double %a to float 192 %conv = fptrunc double %a to float
193 ret float %conv 193 ret float %conv
194 } 194 }
195 ; CHECK: fptrunc: 195 ; CHECK-LABEL: fptrunc
196 ; CHECK: cvtsd2ss 196 ; CHECK: cvtsd2ss
197 ; CHECK: fld 197 ; CHECK: fld
198 198
199 define internal double @fpext(float %a) { 199 define internal double @fpext(float %a) {
200 entry: 200 entry:
201 %conv = fpext float %a to double 201 %conv = fpext float %a to double
202 ret double %conv 202 ret double %conv
203 } 203 }
204 ; CHECK: fpext: 204 ; CHECK-LABEL: fpext
205 ; CHECK: cvtss2sd 205 ; CHECK: cvtss2sd
206 ; CHECK: fld 206 ; CHECK: fld
207 207
208 define internal i64 @doubleToSigned64(double %a) { 208 define internal i64 @doubleToSigned64(double %a) {
209 entry: 209 entry:
210 %conv = fptosi double %a to i64 210 %conv = fptosi double %a to i64
211 ret i64 %conv 211 ret i64 %conv
212 } 212 }
213 ; CHECK: doubleToSigned64: 213 ; CHECK-LABEL: doubleToSigned64
214 ; CHECK: call cvtdtosi64 214 ; CHECK: call cvtdtosi64
215 215
216 define internal i64 @floatToSigned64(float %a) { 216 define internal i64 @floatToSigned64(float %a) {
217 entry: 217 entry:
218 %conv = fptosi float %a to i64 218 %conv = fptosi float %a to i64
219 ret i64 %conv 219 ret i64 %conv
220 } 220 }
221 ; CHECK: floatToSigned64: 221 ; CHECK-LABEL: floatToSigned64
222 ; CHECK: call cvtftosi64 222 ; CHECK: call cvtftosi64
223 223
224 define internal i64 @doubleToUnsigned64(double %a) { 224 define internal i64 @doubleToUnsigned64(double %a) {
225 entry: 225 entry:
226 %conv = fptoui double %a to i64 226 %conv = fptoui double %a to i64
227 ret i64 %conv 227 ret i64 %conv
228 } 228 }
229 ; CHECK: doubleToUnsigned64: 229 ; CHECK-LABEL: doubleToUnsigned64
230 ; CHECK: call cvtdtoui64 230 ; CHECK: call cvtdtoui64
231 231
232 define internal i64 @floatToUnsigned64(float %a) { 232 define internal i64 @floatToUnsigned64(float %a) {
233 entry: 233 entry:
234 %conv = fptoui float %a to i64 234 %conv = fptoui float %a to i64
235 ret i64 %conv 235 ret i64 %conv
236 } 236 }
237 ; CHECK: floatToUnsigned64: 237 ; CHECK-LABEL: floatToUnsigned64
238 ; CHECK: call cvtftoui64 238 ; CHECK: call cvtftoui64
239 239
240 define internal i32 @doubleToSigned32(double %a) { 240 define internal i32 @doubleToSigned32(double %a) {
241 entry: 241 entry:
242 %conv = fptosi double %a to i32 242 %conv = fptosi double %a to i32
243 ret i32 %conv 243 ret i32 %conv
244 } 244 }
245 ; CHECK: doubleToSigned32: 245 ; CHECK-LABEL: doubleToSigned32
246 ; CHECK: cvtsd2si 246 ; CHECK: cvtsd2si
247 247
248 define internal i32 @floatToSigned32(float %a) { 248 define internal i32 @floatToSigned32(float %a) {
249 entry: 249 entry:
250 %conv = fptosi float %a to i32 250 %conv = fptosi float %a to i32
251 ret i32 %conv 251 ret i32 %conv
252 } 252 }
253 ; CHECK: floatToSigned32: 253 ; CHECK-LABEL: floatToSigned32
254 ; CHECK: cvtss2si 254 ; CHECK: cvtss2si
255 255
256 define internal i32 @doubleToUnsigned32(double %a) { 256 define internal i32 @doubleToUnsigned32(double %a) {
257 entry: 257 entry:
258 %conv = fptoui double %a to i32 258 %conv = fptoui double %a to i32
259 ret i32 %conv 259 ret i32 %conv
260 } 260 }
261 ; CHECK: doubleToUnsigned32: 261 ; CHECK-LABEL: doubleToUnsigned32
262 ; CHECK: call cvtdtoui32 262 ; CHECK: call cvtdtoui32
263 263
264 define internal i32 @floatToUnsigned32(float %a) { 264 define internal i32 @floatToUnsigned32(float %a) {
265 entry: 265 entry:
266 %conv = fptoui float %a to i32 266 %conv = fptoui float %a to i32
267 ret i32 %conv 267 ret i32 %conv
268 } 268 }
269 ; CHECK: floatToUnsigned32: 269 ; CHECK-LABEL: floatToUnsigned32
270 ; CHECK: call cvtftoui32 270 ; CHECK: call cvtftoui32
271 271
272 define internal i32 @doubleToSigned16(double %a) { 272 define internal i32 @doubleToSigned16(double %a) {
273 entry: 273 entry:
274 %conv = fptosi double %a to i16 274 %conv = fptosi double %a to i16
275 %conv.ret_ext = sext i16 %conv to i32 275 %conv.ret_ext = sext i16 %conv to i32
276 ret i32 %conv.ret_ext 276 ret i32 %conv.ret_ext
277 } 277 }
278 ; CHECK: doubleToSigned16: 278 ; CHECK-LABEL: doubleToSigned16
279 ; CHECK: cvtsd2si 279 ; CHECK: cvtsd2si
280 ; CHECK: movsx 280 ; CHECK: movsx
281 281
282 define internal i32 @floatToSigned16(float %a) { 282 define internal i32 @floatToSigned16(float %a) {
283 entry: 283 entry:
284 %conv = fptosi float %a to i16 284 %conv = fptosi float %a to i16
285 %conv.ret_ext = sext i16 %conv to i32 285 %conv.ret_ext = sext i16 %conv to i32
286 ret i32 %conv.ret_ext 286 ret i32 %conv.ret_ext
287 } 287 }
288 ; CHECK: floatToSigned16: 288 ; CHECK-LABEL: floatToSigned16
289 ; CHECK: cvtss2si 289 ; CHECK: cvtss2si
290 ; CHECK: movsx 290 ; CHECK: movsx
291 291
292 define internal i32 @doubleToUnsigned16(double %a) { 292 define internal i32 @doubleToUnsigned16(double %a) {
293 entry: 293 entry:
294 %conv = fptoui double %a to i16 294 %conv = fptoui double %a to i16
295 %conv.ret_ext = zext i16 %conv to i32 295 %conv.ret_ext = zext i16 %conv to i32
296 ret i32 %conv.ret_ext 296 ret i32 %conv.ret_ext
297 } 297 }
298 ; CHECK: doubleToUnsigned16: 298 ; CHECK-LABEL: doubleToUnsigned16
299 ; CHECK: cvtsd2si 299 ; CHECK: cvtsd2si
300 ; CHECK: movzx 300 ; CHECK: movzx
301 301
302 define internal i32 @floatToUnsigned16(float %a) { 302 define internal i32 @floatToUnsigned16(float %a) {
303 entry: 303 entry:
304 %conv = fptoui float %a to i16 304 %conv = fptoui float %a to i16
305 %conv.ret_ext = zext i16 %conv to i32 305 %conv.ret_ext = zext i16 %conv to i32
306 ret i32 %conv.ret_ext 306 ret i32 %conv.ret_ext
307 } 307 }
308 ; CHECK: floatToUnsigned16: 308 ; CHECK-LABEL: floatToUnsigned16
309 ; CHECK: cvtss2si 309 ; CHECK: cvtss2si
310 ; CHECK: movzx 310 ; CHECK: movzx
311 311
312 define internal i32 @doubleToSigned8(double %a) { 312 define internal i32 @doubleToSigned8(double %a) {
313 entry: 313 entry:
314 %conv = fptosi double %a to i8 314 %conv = fptosi double %a to i8
315 %conv.ret_ext = sext i8 %conv to i32 315 %conv.ret_ext = sext i8 %conv to i32
316 ret i32 %conv.ret_ext 316 ret i32 %conv.ret_ext
317 } 317 }
318 ; CHECK: doubleToSigned8: 318 ; CHECK-LABEL: doubleToSigned8
319 ; CHECK: cvtsd2si 319 ; CHECK: cvtsd2si
320 ; CHECK: movsx 320 ; CHECK: movsx
321 321
322 define internal i32 @floatToSigned8(float %a) { 322 define internal i32 @floatToSigned8(float %a) {
323 entry: 323 entry:
324 %conv = fptosi float %a to i8 324 %conv = fptosi float %a to i8
325 %conv.ret_ext = sext i8 %conv to i32 325 %conv.ret_ext = sext i8 %conv to i32
326 ret i32 %conv.ret_ext 326 ret i32 %conv.ret_ext
327 } 327 }
328 ; CHECK: floatToSigned8: 328 ; CHECK-LABEL: floatToSigned8
329 ; CHECK: cvtss2si 329 ; CHECK: cvtss2si
330 ; CHECK: movsx 330 ; CHECK: movsx
331 331
332 define internal i32 @doubleToUnsigned8(double %a) { 332 define internal i32 @doubleToUnsigned8(double %a) {
333 entry: 333 entry:
334 %conv = fptoui double %a to i8 334 %conv = fptoui double %a to i8
335 %conv.ret_ext = zext i8 %conv to i32 335 %conv.ret_ext = zext i8 %conv to i32
336 ret i32 %conv.ret_ext 336 ret i32 %conv.ret_ext
337 } 337 }
338 ; CHECK: doubleToUnsigned8: 338 ; CHECK-LABEL: doubleToUnsigned8
339 ; CHECK: cvtsd2si 339 ; CHECK: cvtsd2si
340 ; CHECK: movzx 340 ; CHECK: movzx
341 341
342 define internal i32 @floatToUnsigned8(float %a) { 342 define internal i32 @floatToUnsigned8(float %a) {
343 entry: 343 entry:
344 %conv = fptoui float %a to i8 344 %conv = fptoui float %a to i8
345 %conv.ret_ext = zext i8 %conv to i32 345 %conv.ret_ext = zext i8 %conv to i32
346 ret i32 %conv.ret_ext 346 ret i32 %conv.ret_ext
347 } 347 }
348 ; CHECK: floatToUnsigned8: 348 ; CHECK-LABEL: floatToUnsigned8
349 ; CHECK: cvtss2si 349 ; CHECK: cvtss2si
350 ; CHECK: movzx 350 ; CHECK: movzx
351 351
352 define internal i32 @doubleToUnsigned1(double %a) { 352 define internal i32 @doubleToUnsigned1(double %a) {
353 entry: 353 entry:
354 %tobool = fptoui double %a to i1 354 %tobool = fptoui double %a to i1
355 %tobool.ret_ext = zext i1 %tobool to i32 355 %tobool.ret_ext = zext i1 %tobool to i32
356 ret i32 %tobool.ret_ext 356 ret i32 %tobool.ret_ext
357 } 357 }
358 ; CHECK: doubleToUnsigned1: 358 ; CHECK-LABEL: doubleToUnsigned1
359 ; CHECK: cvtsd2si 359 ; CHECK: cvtsd2si
360 ; CHECK: and eax, 1 360 ; CHECK: and eax, 1
361 361
362 define internal i32 @floatToUnsigned1(float %a) { 362 define internal i32 @floatToUnsigned1(float %a) {
363 entry: 363 entry:
364 %tobool = fptoui float %a to i1 364 %tobool = fptoui float %a to i1
365 %tobool.ret_ext = zext i1 %tobool to i32 365 %tobool.ret_ext = zext i1 %tobool to i32
366 ret i32 %tobool.ret_ext 366 ret i32 %tobool.ret_ext
367 } 367 }
368 ; CHECK: floatToUnsigned1: 368 ; CHECK-LABEL: floatToUnsigned1
369 ; CHECK: cvtss2si 369 ; CHECK: cvtss2si
370 ; CHECK: and eax, 1 370 ; CHECK: and eax, 1
371 371
372 define internal double @signed64ToDouble(i64 %a) { 372 define internal double @signed64ToDouble(i64 %a) {
373 entry: 373 entry:
374 %conv = sitofp i64 %a to double 374 %conv = sitofp i64 %a to double
375 ret double %conv 375 ret double %conv
376 } 376 }
377 ; CHECK: signed64ToDouble: 377 ; CHECK-LABEL: signed64ToDouble
378 ; CHECK: call cvtsi64tod 378 ; CHECK: call cvtsi64tod
379 ; CHECK: fstp 379 ; CHECK: fstp
380 380
381 define internal float @signed64ToFloat(i64 %a) { 381 define internal float @signed64ToFloat(i64 %a) {
382 entry: 382 entry:
383 %conv = sitofp i64 %a to float 383 %conv = sitofp i64 %a to float
384 ret float %conv 384 ret float %conv
385 } 385 }
386 ; CHECK: signed64ToFloat: 386 ; CHECK-LABEL: signed64ToFloat
387 ; CHECK: call cvtsi64tof 387 ; CHECK: call cvtsi64tof
388 ; CHECK: fstp 388 ; CHECK: fstp
389 389
390 define internal double @unsigned64ToDouble(i64 %a) { 390 define internal double @unsigned64ToDouble(i64 %a) {
391 entry: 391 entry:
392 %conv = uitofp i64 %a to double 392 %conv = uitofp i64 %a to double
393 ret double %conv 393 ret double %conv
394 } 394 }
395 ; CHECK: unsigned64ToDouble: 395 ; CHECK-LABEL: unsigned64ToDouble
396 ; CHECK: call cvtui64tod 396 ; CHECK: call cvtui64tod
397 ; CHECK: fstp 397 ; CHECK: fstp
398 398
399 define internal float @unsigned64ToFloat(i64 %a) { 399 define internal float @unsigned64ToFloat(i64 %a) {
400 entry: 400 entry:
401 %conv = uitofp i64 %a to float 401 %conv = uitofp i64 %a to float
402 ret float %conv 402 ret float %conv
403 } 403 }
404 ; CHECK: unsigned64ToFloat: 404 ; CHECK-LABEL: unsigned64ToFloat
405 ; CHECK: call cvtui64tof 405 ; CHECK: call cvtui64tof
406 ; CHECK: fstp 406 ; CHECK: fstp
407 407
408 define internal double @signed32ToDouble(i32 %a) { 408 define internal double @signed32ToDouble(i32 %a) {
409 entry: 409 entry:
410 %conv = sitofp i32 %a to double 410 %conv = sitofp i32 %a to double
411 ret double %conv 411 ret double %conv
412 } 412 }
413 ; CHECK: signed32ToDouble: 413 ; CHECK-LABEL: signed32ToDouble
414 ; CHECK: cvtsi2sd 414 ; CHECK: cvtsi2sd
415 ; CHECK: fld 415 ; CHECK: fld
416 416
417 define internal float @signed32ToFloat(i32 %a) { 417 define internal float @signed32ToFloat(i32 %a) {
418 entry: 418 entry:
419 %conv = sitofp i32 %a to float 419 %conv = sitofp i32 %a to float
420 ret float %conv 420 ret float %conv
421 } 421 }
422 ; CHECK: signed32ToFloat: 422 ; CHECK-LABEL: signed32ToFloat
423 ; CHECK: cvtsi2ss 423 ; CHECK: cvtsi2ss
424 ; CHECK: fld 424 ; CHECK: fld
425 425
426 define internal double @unsigned32ToDouble(i32 %a) { 426 define internal double @unsigned32ToDouble(i32 %a) {
427 entry: 427 entry:
428 %conv = uitofp i32 %a to double 428 %conv = uitofp i32 %a to double
429 ret double %conv 429 ret double %conv
430 } 430 }
431 ; CHECK: unsigned32ToDouble: 431 ; CHECK-LABEL: unsigned32ToDouble
432 ; CHECK: call cvtui32tod 432 ; CHECK: call cvtui32tod
433 ; CHECK: fstp 433 ; CHECK: fstp
434 434
435 define internal float @unsigned32ToFloat(i32 %a) { 435 define internal float @unsigned32ToFloat(i32 %a) {
436 entry: 436 entry:
437 %conv = uitofp i32 %a to float 437 %conv = uitofp i32 %a to float
438 ret float %conv 438 ret float %conv
439 } 439 }
440 ; CHECK: unsigned32ToFloat: 440 ; CHECK-LABEL: unsigned32ToFloat
441 ; CHECK: call cvtui32tof 441 ; CHECK: call cvtui32tof
442 ; CHECK: fstp 442 ; CHECK: fstp
443 443
444 define internal double @signed16ToDouble(i32 %a) { 444 define internal double @signed16ToDouble(i32 %a) {
445 entry: 445 entry:
446 %a.arg_trunc = trunc i32 %a to i16 446 %a.arg_trunc = trunc i32 %a to i16
447 %conv = sitofp i16 %a.arg_trunc to double 447 %conv = sitofp i16 %a.arg_trunc to double
448 ret double %conv 448 ret double %conv
449 } 449 }
450 ; CHECK: signed16ToDouble: 450 ; CHECK-LABEL: signed16ToDouble
451 ; CHECK: cvtsi2sd 451 ; CHECK: cvtsi2sd
452 ; CHECK: fld 452 ; CHECK: fld
453 453
454 define internal float @signed16ToFloat(i32 %a) { 454 define internal float @signed16ToFloat(i32 %a) {
455 entry: 455 entry:
456 %a.arg_trunc = trunc i32 %a to i16 456 %a.arg_trunc = trunc i32 %a to i16
457 %conv = sitofp i16 %a.arg_trunc to float 457 %conv = sitofp i16 %a.arg_trunc to float
458 ret float %conv 458 ret float %conv
459 } 459 }
460 ; CHECK: signed16ToFloat: 460 ; CHECK-LABEL: signed16ToFloat
461 ; CHECK: cvtsi2ss 461 ; CHECK: cvtsi2ss
462 ; CHECK: fld 462 ; CHECK: fld
463 463
464 define internal double @unsigned16ToDouble(i32 %a) { 464 define internal double @unsigned16ToDouble(i32 %a) {
465 entry: 465 entry:
466 %a.arg_trunc = trunc i32 %a to i16 466 %a.arg_trunc = trunc i32 %a to i16
467 %conv = uitofp i16 %a.arg_trunc to double 467 %conv = uitofp i16 %a.arg_trunc to double
468 ret double %conv 468 ret double %conv
469 } 469 }
470 ; CHECK: unsigned16ToDouble: 470 ; CHECK-LABEL: unsigned16ToDouble
471 ; CHECK: cvtsi2sd 471 ; CHECK: cvtsi2sd
472 ; CHECK: fld 472 ; CHECK: fld
473 473
474 define internal float @unsigned16ToFloat(i32 %a) { 474 define internal float @unsigned16ToFloat(i32 %a) {
475 entry: 475 entry:
476 %a.arg_trunc = trunc i32 %a to i16 476 %a.arg_trunc = trunc i32 %a to i16
477 %conv = uitofp i16 %a.arg_trunc to float 477 %conv = uitofp i16 %a.arg_trunc to float
478 ret float %conv 478 ret float %conv
479 } 479 }
480 ; CHECK: unsigned16ToFloat: 480 ; CHECK-LABEL: unsigned16ToFloat
481 ; CHECK: cvtsi2ss 481 ; CHECK: cvtsi2ss
482 ; CHECK: fld 482 ; CHECK: fld
483 483
484 define internal double @signed8ToDouble(i32 %a) { 484 define internal double @signed8ToDouble(i32 %a) {
485 entry: 485 entry:
486 %a.arg_trunc = trunc i32 %a to i8 486 %a.arg_trunc = trunc i32 %a to i8
487 %conv = sitofp i8 %a.arg_trunc to double 487 %conv = sitofp i8 %a.arg_trunc to double
488 ret double %conv 488 ret double %conv
489 } 489 }
490 ; CHECK: signed8ToDouble: 490 ; CHECK-LABEL: signed8ToDouble
491 ; CHECK: cvtsi2sd 491 ; CHECK: cvtsi2sd
492 ; CHECK: fld 492 ; CHECK: fld
493 493
494 define internal float @signed8ToFloat(i32 %a) { 494 define internal float @signed8ToFloat(i32 %a) {
495 entry: 495 entry:
496 %a.arg_trunc = trunc i32 %a to i8 496 %a.arg_trunc = trunc i32 %a to i8
497 %conv = sitofp i8 %a.arg_trunc to float 497 %conv = sitofp i8 %a.arg_trunc to float
498 ret float %conv 498 ret float %conv
499 } 499 }
500 ; CHECK: signed8ToFloat: 500 ; CHECK-LABEL: signed8ToFloat
501 ; CHECK: cvtsi2ss 501 ; CHECK: cvtsi2ss
502 ; CHECK: fld 502 ; CHECK: fld
503 503
504 define internal double @unsigned8ToDouble(i32 %a) { 504 define internal double @unsigned8ToDouble(i32 %a) {
505 entry: 505 entry:
506 %a.arg_trunc = trunc i32 %a to i8 506 %a.arg_trunc = trunc i32 %a to i8
507 %conv = uitofp i8 %a.arg_trunc to double 507 %conv = uitofp i8 %a.arg_trunc to double
508 ret double %conv 508 ret double %conv
509 } 509 }
510 ; CHECK: unsigned8ToDouble: 510 ; CHECK-LABEL: unsigned8ToDouble
511 ; CHECK: cvtsi2sd 511 ; CHECK: cvtsi2sd
512 ; CHECK: fld 512 ; CHECK: fld
513 513
514 define internal float @unsigned8ToFloat(i32 %a) { 514 define internal float @unsigned8ToFloat(i32 %a) {
515 entry: 515 entry:
516 %a.arg_trunc = trunc i32 %a to i8 516 %a.arg_trunc = trunc i32 %a to i8
517 %conv = uitofp i8 %a.arg_trunc to float 517 %conv = uitofp i8 %a.arg_trunc to float
518 ret float %conv 518 ret float %conv
519 } 519 }
520 ; CHECK: unsigned8ToFloat: 520 ; CHECK-LABEL: unsigned8ToFloat
521 ; CHECK: cvtsi2ss 521 ; CHECK: cvtsi2ss
522 ; CHECK: fld 522 ; CHECK: fld
523 523
524 define internal double @unsigned1ToDouble(i32 %a) { 524 define internal double @unsigned1ToDouble(i32 %a) {
525 entry: 525 entry:
526 %a.arg_trunc = trunc i32 %a to i1 526 %a.arg_trunc = trunc i32 %a to i1
527 %conv = uitofp i1 %a.arg_trunc to double 527 %conv = uitofp i1 %a.arg_trunc to double
528 ret double %conv 528 ret double %conv
529 } 529 }
530 ; CHECK: unsigned1ToDouble: 530 ; CHECK-LABEL: unsigned1ToDouble
531 ; CHECK: cvtsi2sd 531 ; CHECK: cvtsi2sd
532 ; CHECK: fld 532 ; CHECK: fld
533 533
534 define internal float @unsigned1ToFloat(i32 %a) { 534 define internal float @unsigned1ToFloat(i32 %a) {
535 entry: 535 entry:
536 %a.arg_trunc = trunc i32 %a to i1 536 %a.arg_trunc = trunc i32 %a to i1
537 %conv = uitofp i1 %a.arg_trunc to float 537 %conv = uitofp i1 %a.arg_trunc to float
538 ret float %conv 538 ret float %conv
539 } 539 }
540 ; CHECK: unsigned1ToFloat: 540 ; CHECK-LABEL: unsigned1ToFloat
541 ; CHECK: cvtsi2ss 541 ; CHECK: cvtsi2ss
542 ; CHECK: fld 542 ; CHECK: fld
543 543
544 define internal void @fcmpEq(float %a, float %b, double %c, double %d) { 544 define internal void @fcmpEq(float %a, float %b, double %c, double %d) {
545 entry: 545 entry:
546 %cmp = fcmp oeq float %a, %b 546 %cmp = fcmp oeq float %a, %b
547 br i1 %cmp, label %if.then, label %if.end 547 br i1 %cmp, label %if.then, label %if.end
548 548
549 if.then: ; preds = %entry 549 if.then: ; preds = %entry
550 call void @func() 550 call void @func()
551 br label %if.end 551 br label %if.end
552 552
553 if.end: ; preds = %if.then, %entry 553 if.end: ; preds = %if.then, %entry
554 %cmp1 = fcmp oeq double %c, %d 554 %cmp1 = fcmp oeq double %c, %d
555 br i1 %cmp1, label %if.then2, label %if.end3 555 br i1 %cmp1, label %if.then2, label %if.end3
556 556
557 if.then2: ; preds = %if.end 557 if.then2: ; preds = %if.end
558 call void @func() 558 call void @func()
559 br label %if.end3 559 br label %if.end3
560 560
561 if.end3: ; preds = %if.then2, %if.end 561 if.end3: ; preds = %if.then2, %if.end
562 ret void 562 ret void
563 } 563 }
564 ; CHECK: fcmpEq: 564 ; CHECK-LABEL: fcmpEq
565 ; CHECK: ucomiss 565 ; CHECK: ucomiss
566 ; CHECK: jne . 566 ; CHECK: jne .
567 ; CHECK-NEXT: jp . 567 ; CHECK-NEXT: jp .
568 ; CHECK: call func 568 ; CHECK: call func
569 ; CHECK: ucomisd 569 ; CHECK: ucomisd
570 ; CHECK: jne . 570 ; CHECK: jne .
571 ; CHECK-NEXT: jp . 571 ; CHECK-NEXT: jp .
572 ; CHECK: call func 572 ; CHECK: call func
573 573
574 declare void @func() 574 declare void @func()
(...skipping 11 matching lines...) Expand all
586 %cmp1 = fcmp une double %c, %d 586 %cmp1 = fcmp une double %c, %d
587 br i1 %cmp1, label %if.then2, label %if.end3 587 br i1 %cmp1, label %if.then2, label %if.end3
588 588
589 if.then2: ; preds = %if.end 589 if.then2: ; preds = %if.end
590 call void @func() 590 call void @func()
591 br label %if.end3 591 br label %if.end3
592 592
593 if.end3: ; preds = %if.then2, %if.end 593 if.end3: ; preds = %if.then2, %if.end
594 ret void 594 ret void
595 } 595 }
596 ; CHECK: fcmpNe: 596 ; CHECK-LABEL: fcmpNe
597 ; CHECK: ucomiss 597 ; CHECK: ucomiss
598 ; CHECK: jne . 598 ; CHECK: jne .
599 ; CHECK-NEXT: jp . 599 ; CHECK-NEXT: jp .
600 ; CHECK: call func 600 ; CHECK: call func
601 ; CHECK: ucomisd 601 ; CHECK: ucomisd
602 ; CHECK: jne . 602 ; CHECK: jne .
603 ; CHECK-NEXT: jp . 603 ; CHECK-NEXT: jp .
604 ; CHECK: call func 604 ; CHECK: call func
605 605
606 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 606 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
607 entry: 607 entry:
608 %cmp = fcmp ogt float %a, %b 608 %cmp = fcmp ogt float %a, %b
609 br i1 %cmp, label %if.then, label %if.end 609 br i1 %cmp, label %if.then, label %if.end
610 610
611 if.then: ; preds = %entry 611 if.then: ; preds = %entry
612 call void @func() 612 call void @func()
613 br label %if.end 613 br label %if.end
614 614
615 if.end: ; preds = %if.then, %entry 615 if.end: ; preds = %if.then, %entry
616 %cmp1 = fcmp ogt double %c, %d 616 %cmp1 = fcmp ogt double %c, %d
617 br i1 %cmp1, label %if.then2, label %if.end3 617 br i1 %cmp1, label %if.then2, label %if.end3
618 618
619 if.then2: ; preds = %if.end 619 if.then2: ; preds = %if.end
620 call void @func() 620 call void @func()
621 br label %if.end3 621 br label %if.end3
622 622
623 if.end3: ; preds = %if.then2, %if.end 623 if.end3: ; preds = %if.then2, %if.end
624 ret void 624 ret void
625 } 625 }
626 ; CHECK: fcmpGt: 626 ; CHECK-LABEL: fcmpGt
627 ; CHECK: ucomiss 627 ; CHECK: ucomiss
628 ; CHECK: ja . 628 ; CHECK: ja .
629 ; CHECK: call func 629 ; CHECK: call func
630 ; CHECK: ucomisd 630 ; CHECK: ucomisd
631 ; CHECK: ja . 631 ; CHECK: ja .
632 ; CHECK: call func 632 ; CHECK: call func
633 633
634 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 634 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
635 entry: 635 entry:
636 %cmp = fcmp ult float %a, %b 636 %cmp = fcmp ult float %a, %b
637 br i1 %cmp, label %if.end, label %if.then 637 br i1 %cmp, label %if.end, label %if.then
638 638
639 if.then: ; preds = %entry 639 if.then: ; preds = %entry
640 call void @func() 640 call void @func()
641 br label %if.end 641 br label %if.end
642 642
643 if.end: ; preds = %entry, %if.then 643 if.end: ; preds = %entry, %if.then
644 %cmp1 = fcmp ult double %c, %d 644 %cmp1 = fcmp ult double %c, %d
645 br i1 %cmp1, label %if.end3, label %if.then2 645 br i1 %cmp1, label %if.end3, label %if.then2
646 646
647 if.then2: ; preds = %if.end 647 if.then2: ; preds = %if.end
648 call void @func() 648 call void @func()
649 br label %if.end3 649 br label %if.end3
650 650
651 if.end3: ; preds = %if.end, %if.then2 651 if.end3: ; preds = %if.end, %if.then2
652 ret void 652 ret void
653 } 653 }
654 ; CHECK: fcmpGe: 654 ; CHECK-LABEL: fcmpGe
655 ; CHECK: ucomiss 655 ; CHECK: ucomiss
656 ; CHECK: jb . 656 ; CHECK: jb .
657 ; CHECK: call func 657 ; CHECK: call func
658 ; CHECK: ucomisd 658 ; CHECK: ucomisd
659 ; CHECK: jb . 659 ; CHECK: jb .
660 ; CHECK: call func 660 ; CHECK: call func
661 661
662 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 662 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
663 entry: 663 entry:
664 %cmp = fcmp olt float %a, %b 664 %cmp = fcmp olt float %a, %b
665 br i1 %cmp, label %if.then, label %if.end 665 br i1 %cmp, label %if.then, label %if.end
666 666
667 if.then: ; preds = %entry 667 if.then: ; preds = %entry
668 call void @func() 668 call void @func()
669 br label %if.end 669 br label %if.end
670 670
671 if.end: ; preds = %if.then, %entry 671 if.end: ; preds = %if.then, %entry
672 %cmp1 = fcmp olt double %c, %d 672 %cmp1 = fcmp olt double %c, %d
673 br i1 %cmp1, label %if.then2, label %if.end3 673 br i1 %cmp1, label %if.then2, label %if.end3
674 674
675 if.then2: ; preds = %if.end 675 if.then2: ; preds = %if.end
676 call void @func() 676 call void @func()
677 br label %if.end3 677 br label %if.end3
678 678
679 if.end3: ; preds = %if.then2, %if.end 679 if.end3: ; preds = %if.then2, %if.end
680 ret void 680 ret void
681 } 681 }
682 ; CHECK: fcmpLt: 682 ; CHECK-LABEL: fcmpLt
683 ; CHECK: ucomiss 683 ; CHECK: ucomiss
684 ; CHECK: ja . 684 ; CHECK: ja .
685 ; CHECK: call func 685 ; CHECK: call func
686 ; CHECK: ucomisd 686 ; CHECK: ucomisd
687 ; CHECK: ja . 687 ; CHECK: ja .
688 ; CHECK: call func 688 ; CHECK: call func
689 689
690 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 690 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
691 entry: 691 entry:
692 %cmp = fcmp ugt float %a, %b 692 %cmp = fcmp ugt float %a, %b
693 br i1 %cmp, label %if.end, label %if.then 693 br i1 %cmp, label %if.end, label %if.then
694 694
695 if.then: ; preds = %entry 695 if.then: ; preds = %entry
696 call void @func() 696 call void @func()
697 br label %if.end 697 br label %if.end
698 698
699 if.end: ; preds = %entry, %if.then 699 if.end: ; preds = %entry, %if.then
700 %cmp1 = fcmp ugt double %c, %d 700 %cmp1 = fcmp ugt double %c, %d
701 br i1 %cmp1, label %if.end3, label %if.then2 701 br i1 %cmp1, label %if.end3, label %if.then2
702 702
703 if.then2: ; preds = %if.end 703 if.then2: ; preds = %if.end
704 call void @func() 704 call void @func()
705 br label %if.end3 705 br label %if.end3
706 706
707 if.end3: ; preds = %if.end, %if.then2 707 if.end3: ; preds = %if.end, %if.then2
708 ret void 708 ret void
709 } 709 }
710 ; CHECK: fcmpLe: 710 ; CHECK-LABEL: fcmpLe
711 ; CHECK: ucomiss 711 ; CHECK: ucomiss
712 ; CHECK: jb . 712 ; CHECK: jb .
713 ; CHECK: call func 713 ; CHECK: call func
714 ; CHECK: ucomisd 714 ; CHECK: ucomisd
715 ; CHECK: jb . 715 ; CHECK: jb .
716 ; CHECK: call func 716 ; CHECK: call func
717 717
718 define internal i32 @fcmpFalseFloat(float %a, float %b) { 718 define internal i32 @fcmpFalseFloat(float %a, float %b) {
719 entry: 719 entry:
720 %cmp = fcmp false float %a, %b 720 %cmp = fcmp false float %a, %b
721 %cmp.ret_ext = zext i1 %cmp to i32 721 %cmp.ret_ext = zext i1 %cmp to i32
722 ret i32 %cmp.ret_ext 722 ret i32 %cmp.ret_ext
723 } 723 }
724 ; CHECK: fcmpFalseFloat: 724 ; CHECK-LABEL: fcmpFalseFloat
725 ; CHECK: mov {{.*}}, 0 725 ; CHECK: mov {{.*}}, 0
726 726
727 define internal i32 @fcmpFalseDouble(double %a, double %b) { 727 define internal i32 @fcmpFalseDouble(double %a, double %b) {
728 entry: 728 entry:
729 %cmp = fcmp false double %a, %b 729 %cmp = fcmp false double %a, %b
730 %cmp.ret_ext = zext i1 %cmp to i32 730 %cmp.ret_ext = zext i1 %cmp to i32
731 ret i32 %cmp.ret_ext 731 ret i32 %cmp.ret_ext
732 } 732 }
733 ; CHECK: fcmpFalseDouble: 733 ; CHECK-LABEL: fcmpFalseDouble
734 ; CHECK: mov {{.*}}, 0 734 ; CHECK: mov {{.*}}, 0
735 735
736 define internal i32 @fcmpOeqFloat(float %a, float %b) { 736 define internal i32 @fcmpOeqFloat(float %a, float %b) {
737 entry: 737 entry:
738 %cmp = fcmp oeq float %a, %b 738 %cmp = fcmp oeq float %a, %b
739 %cmp.ret_ext = zext i1 %cmp to i32 739 %cmp.ret_ext = zext i1 %cmp to i32
740 ret i32 %cmp.ret_ext 740 ret i32 %cmp.ret_ext
741 } 741 }
742 ; CHECK: fcmpOeqFloat: 742 ; CHECK-LABEL: fcmpOeqFloat
743 ; CHECK: ucomiss 743 ; CHECK: ucomiss
744 ; CHECK: jne . 744 ; CHECK: jne .
745 ; CHECK: jp . 745 ; CHECK: jp .
746 746
747 define internal i32 @fcmpOeqDouble(double %a, double %b) { 747 define internal i32 @fcmpOeqDouble(double %a, double %b) {
748 entry: 748 entry:
749 %cmp = fcmp oeq double %a, %b 749 %cmp = fcmp oeq double %a, %b
750 %cmp.ret_ext = zext i1 %cmp to i32 750 %cmp.ret_ext = zext i1 %cmp to i32
751 ret i32 %cmp.ret_ext 751 ret i32 %cmp.ret_ext
752 } 752 }
753 ; CHECK: fcmpOeqDouble: 753 ; CHECK-LABEL: fcmpOeqDouble
754 ; CHECK: ucomisd 754 ; CHECK: ucomisd
755 ; CHECK: jne . 755 ; CHECK: jne .
756 ; CHECK: jp . 756 ; CHECK: jp .
757 757
758 define internal i32 @fcmpOgtFloat(float %a, float %b) { 758 define internal i32 @fcmpOgtFloat(float %a, float %b) {
759 entry: 759 entry:
760 %cmp = fcmp ogt float %a, %b 760 %cmp = fcmp ogt float %a, %b
761 %cmp.ret_ext = zext i1 %cmp to i32 761 %cmp.ret_ext = zext i1 %cmp to i32
762 ret i32 %cmp.ret_ext 762 ret i32 %cmp.ret_ext
763 } 763 }
764 ; CHECK: fcmpOgtFloat: 764 ; CHECK-LABEL: fcmpOgtFloat
765 ; CHECK: ucomiss 765 ; CHECK: ucomiss
766 ; CHECK: ja . 766 ; CHECK: ja .
767 767
768 define internal i32 @fcmpOgtDouble(double %a, double %b) { 768 define internal i32 @fcmpOgtDouble(double %a, double %b) {
769 entry: 769 entry:
770 %cmp = fcmp ogt double %a, %b 770 %cmp = fcmp ogt double %a, %b
771 %cmp.ret_ext = zext i1 %cmp to i32 771 %cmp.ret_ext = zext i1 %cmp to i32
772 ret i32 %cmp.ret_ext 772 ret i32 %cmp.ret_ext
773 } 773 }
774 ; CHECK: fcmpOgtDouble: 774 ; CHECK-LABEL: fcmpOgtDouble
775 ; CHECK: ucomisd 775 ; CHECK: ucomisd
776 ; CHECK: ja . 776 ; CHECK: ja .
777 777
778 define internal i32 @fcmpOgeFloat(float %a, float %b) { 778 define internal i32 @fcmpOgeFloat(float %a, float %b) {
779 entry: 779 entry:
780 %cmp = fcmp oge float %a, %b 780 %cmp = fcmp oge float %a, %b
781 %cmp.ret_ext = zext i1 %cmp to i32 781 %cmp.ret_ext = zext i1 %cmp to i32
782 ret i32 %cmp.ret_ext 782 ret i32 %cmp.ret_ext
783 } 783 }
784 ; CHECK: fcmpOgeFloat: 784 ; CHECK-LABEL: fcmpOgeFloat
785 ; CHECK: ucomiss 785 ; CHECK: ucomiss
786 ; CHECK: jae . 786 ; CHECK: jae .
787 787
788 define internal i32 @fcmpOgeDouble(double %a, double %b) { 788 define internal i32 @fcmpOgeDouble(double %a, double %b) {
789 entry: 789 entry:
790 %cmp = fcmp oge double %a, %b 790 %cmp = fcmp oge double %a, %b
791 %cmp.ret_ext = zext i1 %cmp to i32 791 %cmp.ret_ext = zext i1 %cmp to i32
792 ret i32 %cmp.ret_ext 792 ret i32 %cmp.ret_ext
793 } 793 }
794 ; CHECK: fcmpOgeDouble: 794 ; CHECK-LABEL: fcmpOgeDouble
795 ; CHECK: ucomisd 795 ; CHECK: ucomisd
796 ; CHECK: jae . 796 ; CHECK: jae .
797 797
798 define internal i32 @fcmpOltFloat(float %a, float %b) { 798 define internal i32 @fcmpOltFloat(float %a, float %b) {
799 entry: 799 entry:
800 %cmp = fcmp olt float %a, %b 800 %cmp = fcmp olt float %a, %b
801 %cmp.ret_ext = zext i1 %cmp to i32 801 %cmp.ret_ext = zext i1 %cmp to i32
802 ret i32 %cmp.ret_ext 802 ret i32 %cmp.ret_ext
803 } 803 }
804 ; CHECK: fcmpOltFloat: 804 ; CHECK-LABEL: fcmpOltFloat
805 ; CHECK: ucomiss 805 ; CHECK: ucomiss
806 ; CHECK: ja . 806 ; CHECK: ja .
807 807
808 define internal i32 @fcmpOltDouble(double %a, double %b) { 808 define internal i32 @fcmpOltDouble(double %a, double %b) {
809 entry: 809 entry:
810 %cmp = fcmp olt double %a, %b 810 %cmp = fcmp olt double %a, %b
811 %cmp.ret_ext = zext i1 %cmp to i32 811 %cmp.ret_ext = zext i1 %cmp to i32
812 ret i32 %cmp.ret_ext 812 ret i32 %cmp.ret_ext
813 } 813 }
814 ; CHECK: fcmpOltDouble: 814 ; CHECK-LABEL: fcmpOltDouble
815 ; CHECK: ucomisd 815 ; CHECK: ucomisd
816 ; CHECK: ja . 816 ; CHECK: ja .
817 817
818 define internal i32 @fcmpOleFloat(float %a, float %b) { 818 define internal i32 @fcmpOleFloat(float %a, float %b) {
819 entry: 819 entry:
820 %cmp = fcmp ole float %a, %b 820 %cmp = fcmp ole float %a, %b
821 %cmp.ret_ext = zext i1 %cmp to i32 821 %cmp.ret_ext = zext i1 %cmp to i32
822 ret i32 %cmp.ret_ext 822 ret i32 %cmp.ret_ext
823 } 823 }
824 ; CHECK: fcmpOleFloat: 824 ; CHECK-LABEL: fcmpOleFloat
825 ; CHECK: ucomiss 825 ; CHECK: ucomiss
826 ; CHECK: jae . 826 ; CHECK: jae .
827 827
828 define internal i32 @fcmpOleDouble(double %a, double %b) { 828 define internal i32 @fcmpOleDouble(double %a, double %b) {
829 entry: 829 entry:
830 %cmp = fcmp ole double %a, %b 830 %cmp = fcmp ole double %a, %b
831 %cmp.ret_ext = zext i1 %cmp to i32 831 %cmp.ret_ext = zext i1 %cmp to i32
832 ret i32 %cmp.ret_ext 832 ret i32 %cmp.ret_ext
833 } 833 }
834 ; CHECK: fcmpOleDouble: 834 ; CHECK-LABEL: fcmpOleDouble
835 ; CHECK: ucomisd 835 ; CHECK: ucomisd
836 ; CHECK: jae . 836 ; CHECK: jae .
837 837
838 define internal i32 @fcmpOneFloat(float %a, float %b) { 838 define internal i32 @fcmpOneFloat(float %a, float %b) {
839 entry: 839 entry:
840 %cmp = fcmp one float %a, %b 840 %cmp = fcmp one float %a, %b
841 %cmp.ret_ext = zext i1 %cmp to i32 841 %cmp.ret_ext = zext i1 %cmp to i32
842 ret i32 %cmp.ret_ext 842 ret i32 %cmp.ret_ext
843 } 843 }
844 ; CHECK: fcmpOneFloat: 844 ; CHECK-LABEL: fcmpOneFloat
845 ; CHECK: ucomiss 845 ; CHECK: ucomiss
846 ; CHECK: jne . 846 ; CHECK: jne .
847 847
848 define internal i32 @fcmpOneDouble(double %a, double %b) { 848 define internal i32 @fcmpOneDouble(double %a, double %b) {
849 entry: 849 entry:
850 %cmp = fcmp one double %a, %b 850 %cmp = fcmp one double %a, %b
851 %cmp.ret_ext = zext i1 %cmp to i32 851 %cmp.ret_ext = zext i1 %cmp to i32
852 ret i32 %cmp.ret_ext 852 ret i32 %cmp.ret_ext
853 } 853 }
854 ; CHECK: fcmpOneDouble: 854 ; CHECK-LABEL: fcmpOneDouble
855 ; CHECK: ucomisd 855 ; CHECK: ucomisd
856 ; CHECK: jne . 856 ; CHECK: jne .
857 857
858 define internal i32 @fcmpOrdFloat(float %a, float %b) { 858 define internal i32 @fcmpOrdFloat(float %a, float %b) {
859 entry: 859 entry:
860 %cmp = fcmp ord float %a, %b 860 %cmp = fcmp ord float %a, %b
861 %cmp.ret_ext = zext i1 %cmp to i32 861 %cmp.ret_ext = zext i1 %cmp to i32
862 ret i32 %cmp.ret_ext 862 ret i32 %cmp.ret_ext
863 } 863 }
864 ; CHECK: fcmpOrdFloat: 864 ; CHECK-LABEL: fcmpOrdFloat
865 ; CHECK: ucomiss 865 ; CHECK: ucomiss
866 ; CHECK: jnp . 866 ; CHECK: jnp .
867 867
868 define internal i32 @fcmpOrdDouble(double %a, double %b) { 868 define internal i32 @fcmpOrdDouble(double %a, double %b) {
869 entry: 869 entry:
870 %cmp = fcmp ord double %a, %b 870 %cmp = fcmp ord double %a, %b
871 %cmp.ret_ext = zext i1 %cmp to i32 871 %cmp.ret_ext = zext i1 %cmp to i32
872 ret i32 %cmp.ret_ext 872 ret i32 %cmp.ret_ext
873 } 873 }
874 ; CHECK: fcmpOrdDouble: 874 ; CHECK-LABEL: fcmpOrdDouble
875 ; CHECK: ucomisd 875 ; CHECK: ucomisd
876 ; CHECK: jnp . 876 ; CHECK: jnp .
877 877
878 define internal i32 @fcmpUeqFloat(float %a, float %b) { 878 define internal i32 @fcmpUeqFloat(float %a, float %b) {
879 entry: 879 entry:
880 %cmp = fcmp ueq float %a, %b 880 %cmp = fcmp ueq float %a, %b
881 %cmp.ret_ext = zext i1 %cmp to i32 881 %cmp.ret_ext = zext i1 %cmp to i32
882 ret i32 %cmp.ret_ext 882 ret i32 %cmp.ret_ext
883 } 883 }
884 ; CHECK: fcmpUeqFloat: 884 ; CHECK-LABEL: fcmpUeqFloat
885 ; CHECK: ucomiss 885 ; CHECK: ucomiss
886 ; CHECK: je . 886 ; CHECK: je .
887 887
888 define internal i32 @fcmpUeqDouble(double %a, double %b) { 888 define internal i32 @fcmpUeqDouble(double %a, double %b) {
889 entry: 889 entry:
890 %cmp = fcmp ueq double %a, %b 890 %cmp = fcmp ueq double %a, %b
891 %cmp.ret_ext = zext i1 %cmp to i32 891 %cmp.ret_ext = zext i1 %cmp to i32
892 ret i32 %cmp.ret_ext 892 ret i32 %cmp.ret_ext
893 } 893 }
894 ; CHECK: fcmpUeqDouble: 894 ; CHECK-LABEL: fcmpUeqDouble
895 ; CHECK: ucomisd 895 ; CHECK: ucomisd
896 ; CHECK: je . 896 ; CHECK: je .
897 897
898 define internal i32 @fcmpUgtFloat(float %a, float %b) { 898 define internal i32 @fcmpUgtFloat(float %a, float %b) {
899 entry: 899 entry:
900 %cmp = fcmp ugt float %a, %b 900 %cmp = fcmp ugt float %a, %b
901 %cmp.ret_ext = zext i1 %cmp to i32 901 %cmp.ret_ext = zext i1 %cmp to i32
902 ret i32 %cmp.ret_ext 902 ret i32 %cmp.ret_ext
903 } 903 }
904 ; CHECK: fcmpUgtFloat: 904 ; CHECK-LABEL: fcmpUgtFloat
905 ; CHECK: ucomiss 905 ; CHECK: ucomiss
906 ; CHECK: jb . 906 ; CHECK: jb .
907 907
908 define internal i32 @fcmpUgtDouble(double %a, double %b) { 908 define internal i32 @fcmpUgtDouble(double %a, double %b) {
909 entry: 909 entry:
910 %cmp = fcmp ugt double %a, %b 910 %cmp = fcmp ugt double %a, %b
911 %cmp.ret_ext = zext i1 %cmp to i32 911 %cmp.ret_ext = zext i1 %cmp to i32
912 ret i32 %cmp.ret_ext 912 ret i32 %cmp.ret_ext
913 } 913 }
914 ; CHECK: fcmpUgtDouble: 914 ; CHECK-LABEL: fcmpUgtDouble
915 ; CHECK: ucomisd 915 ; CHECK: ucomisd
916 ; CHECK: jb . 916 ; CHECK: jb .
917 917
918 define internal i32 @fcmpUgeFloat(float %a, float %b) { 918 define internal i32 @fcmpUgeFloat(float %a, float %b) {
919 entry: 919 entry:
920 %cmp = fcmp uge float %a, %b 920 %cmp = fcmp uge float %a, %b
921 %cmp.ret_ext = zext i1 %cmp to i32 921 %cmp.ret_ext = zext i1 %cmp to i32
922 ret i32 %cmp.ret_ext 922 ret i32 %cmp.ret_ext
923 } 923 }
924 ; CHECK: fcmpUgeFloat: 924 ; CHECK-LABEL: fcmpUgeFloat
925 ; CHECK: ucomiss 925 ; CHECK: ucomiss
926 ; CHECK: jbe . 926 ; CHECK: jbe .
927 927
928 define internal i32 @fcmpUgeDouble(double %a, double %b) { 928 define internal i32 @fcmpUgeDouble(double %a, double %b) {
929 entry: 929 entry:
930 %cmp = fcmp uge double %a, %b 930 %cmp = fcmp uge double %a, %b
931 %cmp.ret_ext = zext i1 %cmp to i32 931 %cmp.ret_ext = zext i1 %cmp to i32
932 ret i32 %cmp.ret_ext 932 ret i32 %cmp.ret_ext
933 } 933 }
934 ; CHECK: fcmpUgeDouble: 934 ; CHECK-LABEL: fcmpUgeDouble
935 ; CHECK: ucomisd 935 ; CHECK: ucomisd
936 ; CHECK: jbe . 936 ; CHECK: jbe .
937 937
938 define internal i32 @fcmpUltFloat(float %a, float %b) { 938 define internal i32 @fcmpUltFloat(float %a, float %b) {
939 entry: 939 entry:
940 %cmp = fcmp ult float %a, %b 940 %cmp = fcmp ult float %a, %b
941 %cmp.ret_ext = zext i1 %cmp to i32 941 %cmp.ret_ext = zext i1 %cmp to i32
942 ret i32 %cmp.ret_ext 942 ret i32 %cmp.ret_ext
943 } 943 }
944 ; CHECK: fcmpUltFloat: 944 ; CHECK-LABEL: fcmpUltFloat
945 ; CHECK: ucomiss 945 ; CHECK: ucomiss
946 ; CHECK: jb . 946 ; CHECK: jb .
947 947
948 define internal i32 @fcmpUltDouble(double %a, double %b) { 948 define internal i32 @fcmpUltDouble(double %a, double %b) {
949 entry: 949 entry:
950 %cmp = fcmp ult double %a, %b 950 %cmp = fcmp ult double %a, %b
951 %cmp.ret_ext = zext i1 %cmp to i32 951 %cmp.ret_ext = zext i1 %cmp to i32
952 ret i32 %cmp.ret_ext 952 ret i32 %cmp.ret_ext
953 } 953 }
954 ; CHECK: fcmpUltDouble: 954 ; CHECK-LABEL: fcmpUltDouble
955 ; CHECK: ucomisd 955 ; CHECK: ucomisd
956 ; CHECK: jb . 956 ; CHECK: jb .
957 957
958 define internal i32 @fcmpUleFloat(float %a, float %b) { 958 define internal i32 @fcmpUleFloat(float %a, float %b) {
959 entry: 959 entry:
960 %cmp = fcmp ule float %a, %b 960 %cmp = fcmp ule float %a, %b
961 %cmp.ret_ext = zext i1 %cmp to i32 961 %cmp.ret_ext = zext i1 %cmp to i32
962 ret i32 %cmp.ret_ext 962 ret i32 %cmp.ret_ext
963 } 963 }
964 ; CHECK: fcmpUleFloat: 964 ; CHECK-LABEL: fcmpUleFloat
965 ; CHECK: ucomiss 965 ; CHECK: ucomiss
966 ; CHECK: jbe . 966 ; CHECK: jbe .
967 967
968 define internal i32 @fcmpUleDouble(double %a, double %b) { 968 define internal i32 @fcmpUleDouble(double %a, double %b) {
969 entry: 969 entry:
970 %cmp = fcmp ule double %a, %b 970 %cmp = fcmp ule double %a, %b
971 %cmp.ret_ext = zext i1 %cmp to i32 971 %cmp.ret_ext = zext i1 %cmp to i32
972 ret i32 %cmp.ret_ext 972 ret i32 %cmp.ret_ext
973 } 973 }
974 ; CHECK: fcmpUleDouble: 974 ; CHECK-LABEL: fcmpUleDouble
975 ; CHECK: ucomisd 975 ; CHECK: ucomisd
976 ; CHECK: jbe . 976 ; CHECK: jbe .
977 977
978 define internal i32 @fcmpUneFloat(float %a, float %b) { 978 define internal i32 @fcmpUneFloat(float %a, float %b) {
979 entry: 979 entry:
980 %cmp = fcmp une float %a, %b 980 %cmp = fcmp une float %a, %b
981 %cmp.ret_ext = zext i1 %cmp to i32 981 %cmp.ret_ext = zext i1 %cmp to i32
982 ret i32 %cmp.ret_ext 982 ret i32 %cmp.ret_ext
983 } 983 }
984 ; CHECK: fcmpUneFloat: 984 ; CHECK-LABEL: fcmpUneFloat
985 ; CHECK: ucomiss 985 ; CHECK: ucomiss
986 ; CHECK: jne . 986 ; CHECK: jne .
987 ; CHECK: jp . 987 ; CHECK: jp .
988 988
989 define internal i32 @fcmpUneDouble(double %a, double %b) { 989 define internal i32 @fcmpUneDouble(double %a, double %b) {
990 entry: 990 entry:
991 %cmp = fcmp une double %a, %b 991 %cmp = fcmp une double %a, %b
992 %cmp.ret_ext = zext i1 %cmp to i32 992 %cmp.ret_ext = zext i1 %cmp to i32
993 ret i32 %cmp.ret_ext 993 ret i32 %cmp.ret_ext
994 } 994 }
995 ; CHECK: fcmpUneDouble: 995 ; CHECK-LABEL: fcmpUneDouble
996 ; CHECK: ucomisd 996 ; CHECK: ucomisd
997 ; CHECK: jne . 997 ; CHECK: jne .
998 ; CHECK: jp . 998 ; CHECK: jp .
999 999
1000 define internal i32 @fcmpUnoFloat(float %a, float %b) { 1000 define internal i32 @fcmpUnoFloat(float %a, float %b) {
1001 entry: 1001 entry:
1002 %cmp = fcmp uno float %a, %b 1002 %cmp = fcmp uno float %a, %b
1003 %cmp.ret_ext = zext i1 %cmp to i32 1003 %cmp.ret_ext = zext i1 %cmp to i32
1004 ret i32 %cmp.ret_ext 1004 ret i32 %cmp.ret_ext
1005 } 1005 }
1006 ; CHECK: fcmpUnoFloat: 1006 ; CHECK-LABEL: fcmpUnoFloat
1007 ; CHECK: ucomiss 1007 ; CHECK: ucomiss
1008 ; CHECK: jp . 1008 ; CHECK: jp .
1009 1009
1010 define internal i32 @fcmpUnoDouble(double %a, double %b) { 1010 define internal i32 @fcmpUnoDouble(double %a, double %b) {
1011 entry: 1011 entry:
1012 %cmp = fcmp uno double %a, %b 1012 %cmp = fcmp uno double %a, %b
1013 %cmp.ret_ext = zext i1 %cmp to i32 1013 %cmp.ret_ext = zext i1 %cmp to i32
1014 ret i32 %cmp.ret_ext 1014 ret i32 %cmp.ret_ext
1015 } 1015 }
1016 ; CHECK: fcmpUnoDouble: 1016 ; CHECK-LABEL: fcmpUnoDouble
1017 ; CHECK: ucomisd 1017 ; CHECK: ucomisd
1018 ; CHECK: jp . 1018 ; CHECK: jp .
1019 1019
1020 define internal i32 @fcmpTrueFloat(float %a, float %b) { 1020 define internal i32 @fcmpTrueFloat(float %a, float %b) {
1021 entry: 1021 entry:
1022 %cmp = fcmp true float %a, %b 1022 %cmp = fcmp true float %a, %b
1023 %cmp.ret_ext = zext i1 %cmp to i32 1023 %cmp.ret_ext = zext i1 %cmp to i32
1024 ret i32 %cmp.ret_ext 1024 ret i32 %cmp.ret_ext
1025 } 1025 }
1026 ; CHECK: fcmpTrueFloat: 1026 ; CHECK-LABEL: fcmpTrueFloat
1027 ; CHECK: mov {{.*}}, 1 1027 ; CHECK: mov {{.*}}, 1
1028 1028
1029 define internal i32 @fcmpTrueDouble(double %a, double %b) { 1029 define internal i32 @fcmpTrueDouble(double %a, double %b) {
1030 entry: 1030 entry:
1031 %cmp = fcmp true double %a, %b 1031 %cmp = fcmp true double %a, %b
1032 %cmp.ret_ext = zext i1 %cmp to i32 1032 %cmp.ret_ext = zext i1 %cmp to i32
1033 ret i32 %cmp.ret_ext 1033 ret i32 %cmp.ret_ext
1034 } 1034 }
1035 ; CHECK: fcmpTrueDouble: 1035 ; CHECK-LABEL: fcmpTrueDouble
1036 ; CHECK: mov {{.*}}, 1 1036 ; CHECK: mov {{.*}}, 1
1037 1037
1038 define internal float @loadFloat(i32 %a) { 1038 define internal float @loadFloat(i32 %a) {
1039 entry: 1039 entry:
1040 %__1 = inttoptr i32 %a to float* 1040 %__1 = inttoptr i32 %a to float*
1041 %v0 = load float* %__1, align 4 1041 %v0 = load float* %__1, align 4
1042 ret float %v0 1042 ret float %v0
1043 } 1043 }
1044 ; CHECK: loadFloat: 1044 ; CHECK-LABEL: loadFloat
1045 ; CHECK: movss 1045 ; CHECK: movss
1046 ; CHECK: fld 1046 ; CHECK: fld
1047 1047
1048 define internal double @loadDouble(i32 %a) { 1048 define internal double @loadDouble(i32 %a) {
1049 entry: 1049 entry:
1050 %__1 = inttoptr i32 %a to double* 1050 %__1 = inttoptr i32 %a to double*
1051 %v0 = load double* %__1, align 8 1051 %v0 = load double* %__1, align 8
1052 ret double %v0 1052 ret double %v0
1053 } 1053 }
1054 ; CHECK: loadDouble: 1054 ; CHECK-LABEL: loadDouble
1055 ; CHECK: movsd 1055 ; CHECK: movsd
1056 ; CHECK: fld 1056 ; CHECK: fld
1057 1057
1058 define internal void @storeFloat(i32 %a, float %value) { 1058 define internal void @storeFloat(i32 %a, float %value) {
1059 entry: 1059 entry:
1060 %__2 = inttoptr i32 %a to float* 1060 %__2 = inttoptr i32 %a to float*
1061 store float %value, float* %__2, align 4 1061 store float %value, float* %__2, align 4
1062 ret void 1062 ret void
1063 } 1063 }
1064 ; CHECK: storeFloat: 1064 ; CHECK-LABEL: storeFloat:
1065 ; CHECK: movss
1065 ; CHECK: movss 1066 ; CHECK: movss
1066 1067
1067 define internal void @storeDouble(i32 %a, double %value) { 1068 define internal void @storeDouble(i32 %a, double %value) {
1068 entry: 1069 entry:
1069 %__2 = inttoptr i32 %a to double* 1070 %__2 = inttoptr i32 %a to double*
1070 store double %value, double* %__2, align 8 1071 store double %value, double* %__2, align 8
1071 ret void 1072 ret void
1072 } 1073 }
1073 ; CHECK: storeDouble: 1074 ; CHECK-LABEL: storeDouble:
1075 ; CHECK: movsd
1074 ; CHECK: movsd 1076 ; CHECK: movsd
1075 1077
1076 define internal void @storeFloatConst(i32 %a) { 1078 define internal void @storeFloatConst(i32 %a) {
1077 entry: 1079 entry:
1078 %a.asptr = inttoptr i32 %a to float* 1080 %a.asptr = inttoptr i32 %a to float*
1079 store float 0x3FF3AE1480000000, float* %a.asptr, align 4 1081 store float 0x3FF3AE1480000000, float* %a.asptr, align 4
1080 ret void 1082 ret void
1081 } 1083 }
1082 ; CHECK: storeFloatConst: 1084 ; CHECK-LABEL: storeFloatConst
1083 ; CHECK: mov 1085 ; CHECK: movss
1084 ; CHECK: mov 1086 ; CHECK: movss
1085 1087
1086 define internal void @storeDoubleConst(i32 %a) { 1088 define internal void @storeDoubleConst(i32 %a) {
1087 entry: 1089 entry:
1088 %a.asptr = inttoptr i32 %a to double* 1090 %a.asptr = inttoptr i32 %a to double*
1089 store double 1.230000e+00, double* %a.asptr, align 8 1091 store double 1.230000e+00, double* %a.asptr, align 8
1090 ret void 1092 ret void
1091 } 1093 }
1092 ; CHECK: storeDoubleConst: 1094 ; CHECK-LABEL: storeDoubleConst
1093 ; CHECK: mov 1095 ; CHECK: movsd
1094 ; CHECK: mov 1096 ; CHECK: movsd
1095 1097
1096 define internal float @selectFloatVarVar(float %a, float %b) { 1098 define internal float @selectFloatVarVar(float %a, float %b) {
1097 entry: 1099 entry:
1098 %cmp = fcmp olt float %a, %b 1100 %cmp = fcmp olt float %a, %b
1099 %cond = select i1 %cmp, float %a, float %b 1101 %cond = select i1 %cmp, float %a, float %b
1100 ret float %cond 1102 ret float %cond
1101 } 1103 }
1102 ; CHECK: selectFloatVarVar: 1104 ; CHECK-LABEL: selectFloatVarVar
1103 ; CHECK: ucomiss 1105 ; CHECK: ucomiss
1104 ; CHECK: ja . 1106 ; CHECK: ja .
1105 ; CHECK: fld 1107 ; CHECK: fld
1106 1108
1107 define internal double @selectDoubleVarVar(double %a, double %b) { 1109 define internal double @selectDoubleVarVar(double %a, double %b) {
1108 entry: 1110 entry:
1109 %cmp = fcmp olt double %a, %b 1111 %cmp = fcmp olt double %a, %b
1110 %cond = select i1 %cmp, double %a, double %b 1112 %cond = select i1 %cmp, double %a, double %b
1111 ret double %cond 1113 ret double %cond
1112 } 1114 }
1113 ; CHECK: selectDoubleVarVar: 1115 ; CHECK-LABEL: selectDoubleVarVar
1114 ; CHECK: ucomisd 1116 ; CHECK: ucomisd
1115 ; CHECK: ja . 1117 ; CHECK: ja .
1116 ; CHECK: fld 1118 ; CHECK: fld
1117 1119
1118 ; ERRORS-NOT: ICE translation error 1120 ; ERRORS-NOT: ICE translation error
1119 ; DUMP-NOT: SZ 1121 ; DUMP-NOT: SZ
OLDNEW
« no previous file with comments | « src/IceTargetLoweringX8632.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698