blob: ef66b02d69aa14295e4a8434f83c502ba3e05f17 [file] [log] [blame]
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -07001; This tries to be a comprehensive test of f32 and f64 operations.
2; The CHECK lines are only checking for basic instruction patterns
3; that should be present regardless of the optimization level, so
4; there are no special OPTM1 match lines.
5
Jim Stichnoth729dbd02015-02-25 14:48:43 -08006; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s
7; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s
Jim Stichnothf7c9a142014-04-29 10:52:43 -07008
9@__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
10@__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
11@__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
12@__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
13
14define internal i32 @doubleArgs(double %a, i32 %b, double %c) {
15entry:
16 ret i32 %b
17}
Jan Voung5a13f452014-06-18 10:42:02 -070018; CHECK-LABEL: doubleArgs
Jan Vounga2703ae2015-02-19 11:27:44 -080019; CHECK: mov eax,DWORD PTR [esp+0xc]
Jim Stichnothf7c9a142014-04-29 10:52:43 -070020; CHECK-NEXT: ret
21
22define internal i32 @floatArgs(float %a, i32 %b, float %c) {
23entry:
24 ret i32 %b
25}
Jan Voung5a13f452014-06-18 10:42:02 -070026; CHECK-LABEL: floatArgs
Jan Vounga2703ae2015-02-19 11:27:44 -080027; CHECK: mov eax,DWORD PTR [esp+0x8]
Jim Stichnothf7c9a142014-04-29 10:52:43 -070028; CHECK-NEXT: ret
29
30define internal i32 @passFpArgs(float %a, double %b, float %c, double %d, float %e, double %f) {
31entry:
32 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double %b)
33 %call1 = call i32 @ignoreFpArgsNoInline(float %c, i32 123, double %d)
34 %call2 = call i32 @ignoreFpArgsNoInline(float %e, i32 123, double %f)
35 %add = add i32 %call1, %call
36 %add3 = add i32 %add, %call2
37 ret i32 %add3
38}
Jan Voung5a13f452014-06-18 10:42:02 -070039; CHECK-LABEL: passFpArgs
Jan Vounga2703ae2015-02-19 11:27:44 -080040; CHECK: mov DWORD PTR [esp+0x4],0x7b
41; CHECK: call {{.*}} R_{{.*}} ignoreFpArgsNoInline
42; CHECK: mov DWORD PTR [esp+0x4],0x7b
43; CHECK: call {{.*}} R_{{.*}} ignoreFpArgsNoInline
44; CHECK: mov DWORD PTR [esp+0x4],0x7b
45; CHECK: call {{.*}} R_{{.*}} ignoreFpArgsNoInline
Jim Stichnothf7c9a142014-04-29 10:52:43 -070046
Jan Voung0faec4c2014-11-05 17:29:56 -080047declare i32 @ignoreFpArgsNoInline(float %x, i32 %y, double %z)
Jim Stichnothf7c9a142014-04-29 10:52:43 -070048
49define internal i32 @passFpConstArg(float %a, double %b) {
50entry:
51 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00)
52 ret i32 %call
53}
Jan Voung5a13f452014-06-18 10:42:02 -070054; CHECK-LABEL: passFpConstArg
Jan Vounga2703ae2015-02-19 11:27:44 -080055; CHECK: mov DWORD PTR [esp+0x4],0x7b
56; CHECK: call {{.*}} R_{{.*}} ignoreFpArgsNoInline
Jim Stichnothf7c9a142014-04-29 10:52:43 -070057
Jan Voungbdbe4022014-06-17 17:12:26 -070058define internal i32 @passFp32ConstArg(float %a) {
59entry:
60 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0)
61 ret i32 %call
62}
Jan Voung5a13f452014-06-18 10:42:02 -070063; CHECK-LABEL: passFp32ConstArg
Jan Vounga2703ae2015-02-19 11:27:44 -080064; CHECK: mov DWORD PTR [esp+0x4],0x7b
65; CHECK: movss DWORD PTR [esp+0x8]
66; CHECK: call {{.*}} R_{{.*}} ignoreFp32ArgsNoInline
Jan Voungbdbe4022014-06-17 17:12:26 -070067
Jan Vounga2703ae2015-02-19 11:27:44 -080068declare i32 @ignoreFp32ArgsNoInline(float %x, i32 %y, float %z)
Jan Voungbdbe4022014-06-17 17:12:26 -070069
Jim Stichnothf7c9a142014-04-29 10:52:43 -070070define internal float @returnFloatArg(float %a) {
71entry:
72 ret float %a
73}
Jan Voung5a13f452014-06-18 10:42:02 -070074; CHECK-LABEL: returnFloatArg
Jan Vounga2703ae2015-02-19 11:27:44 -080075; CHECK: fld DWORD PTR [esp
Jim Stichnothf7c9a142014-04-29 10:52:43 -070076
77define internal double @returnDoubleArg(double %a) {
78entry:
79 ret double %a
80}
Jan Voung5a13f452014-06-18 10:42:02 -070081; CHECK-LABEL: returnDoubleArg
Jan Vounga2703ae2015-02-19 11:27:44 -080082; CHECK: fld QWORD PTR [esp
Jim Stichnothf7c9a142014-04-29 10:52:43 -070083
84define internal float @returnFloatConst() {
85entry:
86 ret float 0x3FF3AE1480000000
87}
Jan Voung5a13f452014-06-18 10:42:02 -070088; CHECK-LABEL: returnFloatConst
Jim Stichnothf7c9a142014-04-29 10:52:43 -070089; CHECK: fld
90
91define internal double @returnDoubleConst() {
92entry:
93 ret double 1.230000e+00
94}
Jan Voung5a13f452014-06-18 10:42:02 -070095; CHECK-LABEL: returnDoubleConst
Jim Stichnothf7c9a142014-04-29 10:52:43 -070096; CHECK: fld
97
98define internal float @addFloat(float %a, float %b) {
99entry:
100 %add = fadd float %a, %b
101 ret float %add
102}
Jan Voung5a13f452014-06-18 10:42:02 -0700103; CHECK-LABEL: addFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700104; CHECK: addss
105; CHECK: fld
106
107define internal double @addDouble(double %a, double %b) {
108entry:
109 %add = fadd double %a, %b
110 ret double %add
111}
Jan Voung5a13f452014-06-18 10:42:02 -0700112; CHECK-LABEL: addDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700113; CHECK: addsd
114; CHECK: fld
115
116define internal float @subFloat(float %a, float %b) {
117entry:
118 %sub = fsub float %a, %b
119 ret float %sub
120}
Jan Voung5a13f452014-06-18 10:42:02 -0700121; CHECK-LABEL: subFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700122; CHECK: subss
123; CHECK: fld
124
125define internal double @subDouble(double %a, double %b) {
126entry:
127 %sub = fsub double %a, %b
128 ret double %sub
129}
Jan Voung5a13f452014-06-18 10:42:02 -0700130; CHECK-LABEL: subDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700131; CHECK: subsd
132; CHECK: fld
133
134define internal float @mulFloat(float %a, float %b) {
135entry:
136 %mul = fmul float %a, %b
137 ret float %mul
138}
Jan Voung5a13f452014-06-18 10:42:02 -0700139; CHECK-LABEL: mulFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700140; CHECK: mulss
141; CHECK: fld
142
143define internal double @mulDouble(double %a, double %b) {
144entry:
145 %mul = fmul double %a, %b
146 ret double %mul
147}
Jan Voung5a13f452014-06-18 10:42:02 -0700148; CHECK-LABEL: mulDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700149; CHECK: mulsd
150; CHECK: fld
151
152define internal float @divFloat(float %a, float %b) {
153entry:
154 %div = fdiv float %a, %b
155 ret float %div
156}
Jan Voung5a13f452014-06-18 10:42:02 -0700157; CHECK-LABEL: divFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700158; CHECK: divss
159; CHECK: fld
160
161define internal double @divDouble(double %a, double %b) {
162entry:
163 %div = fdiv double %a, %b
164 ret double %div
165}
Jan Voung5a13f452014-06-18 10:42:02 -0700166; CHECK-LABEL: divDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700167; CHECK: divsd
168; CHECK: fld
169
170define internal float @remFloat(float %a, float %b) {
171entry:
172 %div = frem float %a, %b
173 ret float %div
174}
Jan Voung5a13f452014-06-18 10:42:02 -0700175; CHECK-LABEL: remFloat
Jan Vounga2703ae2015-02-19 11:27:44 -0800176; CHECK: call {{.*}} R_{{.*}} fmodf
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700177
178define internal double @remDouble(double %a, double %b) {
179entry:
180 %div = frem double %a, %b
181 ret double %div
182}
Jan Voung5a13f452014-06-18 10:42:02 -0700183; CHECK-LABEL: remDouble
Jan Vounga2703ae2015-02-19 11:27:44 -0800184; CHECK: call {{.*}} R_{{.*}} fmod
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700185
186define internal float @fptrunc(double %a) {
187entry:
188 %conv = fptrunc double %a to float
189 ret float %conv
190}
Jan Voung5a13f452014-06-18 10:42:02 -0700191; CHECK-LABEL: fptrunc
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700192; CHECK: cvtsd2ss
193; CHECK: fld
194
195define internal double @fpext(float %a) {
196entry:
197 %conv = fpext float %a to double
198 ret double %conv
199}
Jan Voung5a13f452014-06-18 10:42:02 -0700200; CHECK-LABEL: fpext
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700201; CHECK: cvtss2sd
202; CHECK: fld
203
204define internal i64 @doubleToSigned64(double %a) {
205entry:
206 %conv = fptosi double %a to i64
207 ret i64 %conv
208}
Jan Voung5a13f452014-06-18 10:42:02 -0700209; CHECK-LABEL: doubleToSigned64
Jim Stichnothc4508792015-03-01 23:12:55 -0800210; CHECK: call {{.*}} R_{{.*}} __Sz_fptosi_f64_i64
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700211
212define internal i64 @floatToSigned64(float %a) {
213entry:
214 %conv = fptosi float %a to i64
215 ret i64 %conv
216}
Jan Voung5a13f452014-06-18 10:42:02 -0700217; CHECK-LABEL: floatToSigned64
Jim Stichnothc4508792015-03-01 23:12:55 -0800218; CHECK: call {{.*}} R_{{.*}} __Sz_fptosi_f32_i64
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700219
220define internal i64 @doubleToUnsigned64(double %a) {
221entry:
222 %conv = fptoui double %a to i64
223 ret i64 %conv
224}
Jan Voung5a13f452014-06-18 10:42:02 -0700225; CHECK-LABEL: doubleToUnsigned64
Jim Stichnothc4508792015-03-01 23:12:55 -0800226; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f64_i64
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700227
228define internal i64 @floatToUnsigned64(float %a) {
229entry:
230 %conv = fptoui float %a to i64
231 ret i64 %conv
232}
Jan Voung5a13f452014-06-18 10:42:02 -0700233; CHECK-LABEL: floatToUnsigned64
Jim Stichnothc4508792015-03-01 23:12:55 -0800234; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f32_i64
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700235
236define internal i32 @doubleToSigned32(double %a) {
237entry:
238 %conv = fptosi double %a to i32
239 ret i32 %conv
240}
Jan Voung5a13f452014-06-18 10:42:02 -0700241; CHECK-LABEL: doubleToSigned32
Jim Stichnothb63cd882014-09-08 10:47:23 -0700242; CHECK: cvttsd2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700243
Jan Voung109fa152014-10-07 17:22:51 -0700244define internal i32 @doubleToSigned32Const() {
245entry:
246 %conv = fptosi double 867.5309 to i32
247 ret i32 %conv
248}
249; CHECK-LABEL: doubleToSigned32Const
250; CHECK: cvttsd2si
251
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700252define internal i32 @floatToSigned32(float %a) {
253entry:
254 %conv = fptosi float %a to i32
255 ret i32 %conv
256}
Jan Voung5a13f452014-06-18 10:42:02 -0700257; CHECK-LABEL: floatToSigned32
Jim Stichnothb63cd882014-09-08 10:47:23 -0700258; CHECK: cvttss2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700259
260define internal i32 @doubleToUnsigned32(double %a) {
261entry:
262 %conv = fptoui double %a to i32
263 ret i32 %conv
264}
Jan Voung5a13f452014-06-18 10:42:02 -0700265; CHECK-LABEL: doubleToUnsigned32
Jim Stichnothc4508792015-03-01 23:12:55 -0800266; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f64_i32
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700267
268define internal i32 @floatToUnsigned32(float %a) {
269entry:
270 %conv = fptoui float %a to i32
271 ret i32 %conv
272}
Jan Voung5a13f452014-06-18 10:42:02 -0700273; CHECK-LABEL: floatToUnsigned32
Jim Stichnothc4508792015-03-01 23:12:55 -0800274; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f32_i32
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700275
276define internal i32 @doubleToSigned16(double %a) {
277entry:
278 %conv = fptosi double %a to i16
279 %conv.ret_ext = sext i16 %conv to i32
280 ret i32 %conv.ret_ext
281}
Jan Voung5a13f452014-06-18 10:42:02 -0700282; CHECK-LABEL: doubleToSigned16
Jim Stichnothb63cd882014-09-08 10:47:23 -0700283; CHECK: cvttsd2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700284; CHECK: movsx
285
286define internal i32 @floatToSigned16(float %a) {
287entry:
288 %conv = fptosi float %a to i16
289 %conv.ret_ext = sext i16 %conv to i32
290 ret i32 %conv.ret_ext
291}
Jan Voung5a13f452014-06-18 10:42:02 -0700292; CHECK-LABEL: floatToSigned16
Jim Stichnothb63cd882014-09-08 10:47:23 -0700293; CHECK: cvttss2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700294; CHECK: movsx
295
296define internal i32 @doubleToUnsigned16(double %a) {
297entry:
298 %conv = fptoui double %a to i16
299 %conv.ret_ext = zext i16 %conv to i32
300 ret i32 %conv.ret_ext
301}
Jan Voung5a13f452014-06-18 10:42:02 -0700302; CHECK-LABEL: doubleToUnsigned16
Jim Stichnothb63cd882014-09-08 10:47:23 -0700303; CHECK: cvttsd2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700304; CHECK: movzx
305
306define internal i32 @floatToUnsigned16(float %a) {
307entry:
308 %conv = fptoui float %a to i16
309 %conv.ret_ext = zext i16 %conv to i32
310 ret i32 %conv.ret_ext
311}
Jan Voung5a13f452014-06-18 10:42:02 -0700312; CHECK-LABEL: floatToUnsigned16
Jim Stichnothb63cd882014-09-08 10:47:23 -0700313; CHECK: cvttss2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700314; CHECK: movzx
315
316define internal i32 @doubleToSigned8(double %a) {
317entry:
318 %conv = fptosi double %a to i8
319 %conv.ret_ext = sext i8 %conv to i32
320 ret i32 %conv.ret_ext
321}
Jan Voung5a13f452014-06-18 10:42:02 -0700322; CHECK-LABEL: doubleToSigned8
Jim Stichnothb63cd882014-09-08 10:47:23 -0700323; CHECK: cvttsd2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700324; CHECK: movsx
325
326define internal i32 @floatToSigned8(float %a) {
327entry:
328 %conv = fptosi float %a to i8
329 %conv.ret_ext = sext i8 %conv to i32
330 ret i32 %conv.ret_ext
331}
Jan Voung5a13f452014-06-18 10:42:02 -0700332; CHECK-LABEL: floatToSigned8
Jim Stichnothb63cd882014-09-08 10:47:23 -0700333; CHECK: cvttss2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700334; CHECK: movsx
335
336define internal i32 @doubleToUnsigned8(double %a) {
337entry:
338 %conv = fptoui double %a to i8
339 %conv.ret_ext = zext i8 %conv to i32
340 ret i32 %conv.ret_ext
341}
Jan Voung5a13f452014-06-18 10:42:02 -0700342; CHECK-LABEL: doubleToUnsigned8
Jim Stichnothb63cd882014-09-08 10:47:23 -0700343; CHECK: cvttsd2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700344; CHECK: movzx
345
346define internal i32 @floatToUnsigned8(float %a) {
347entry:
348 %conv = fptoui float %a to i8
349 %conv.ret_ext = zext i8 %conv to i32
350 ret i32 %conv.ret_ext
351}
Jan Voung5a13f452014-06-18 10:42:02 -0700352; CHECK-LABEL: floatToUnsigned8
Jim Stichnothb63cd882014-09-08 10:47:23 -0700353; CHECK: cvttss2si
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700354; CHECK: movzx
355
356define internal i32 @doubleToUnsigned1(double %a) {
357entry:
358 %tobool = fptoui double %a to i1
359 %tobool.ret_ext = zext i1 %tobool to i32
360 ret i32 %tobool.ret_ext
361}
Jan Voung5a13f452014-06-18 10:42:02 -0700362; CHECK-LABEL: doubleToUnsigned1
Jim Stichnothb63cd882014-09-08 10:47:23 -0700363; CHECK: cvttsd2si
Jan Vounga2703ae2015-02-19 11:27:44 -0800364; CHECK: and eax,0x1
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700365
366define internal i32 @floatToUnsigned1(float %a) {
367entry:
368 %tobool = fptoui float %a to i1
369 %tobool.ret_ext = zext i1 %tobool to i32
370 ret i32 %tobool.ret_ext
371}
Jan Voung5a13f452014-06-18 10:42:02 -0700372; CHECK-LABEL: floatToUnsigned1
Jim Stichnothb63cd882014-09-08 10:47:23 -0700373; CHECK: cvttss2si
Jan Vounga2703ae2015-02-19 11:27:44 -0800374; CHECK: and eax,0x1
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700375
376define internal double @signed64ToDouble(i64 %a) {
377entry:
378 %conv = sitofp i64 %a to double
379 ret double %conv
380}
Jan Voung5a13f452014-06-18 10:42:02 -0700381; CHECK-LABEL: signed64ToDouble
Jim Stichnothc4508792015-03-01 23:12:55 -0800382; CHECK: call {{.*}} R_{{.*}} __Sz_sitofp_i64_f64
Jan Vounga2703ae2015-02-19 11:27:44 -0800383; CHECK: fstp QWORD
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700384
385define internal float @signed64ToFloat(i64 %a) {
386entry:
387 %conv = sitofp i64 %a to float
388 ret float %conv
389}
Jan Voung5a13f452014-06-18 10:42:02 -0700390; CHECK-LABEL: signed64ToFloat
Jim Stichnothc4508792015-03-01 23:12:55 -0800391; CHECK: call {{.*}} R_{{.*}} __Sz_sitofp_i64_f32
Jan Vounga2703ae2015-02-19 11:27:44 -0800392; CHECK: fstp DWORD
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700393
394define internal double @unsigned64ToDouble(i64 %a) {
395entry:
396 %conv = uitofp i64 %a to double
397 ret double %conv
398}
Jan Voung5a13f452014-06-18 10:42:02 -0700399; CHECK-LABEL: unsigned64ToDouble
Jim Stichnothc4508792015-03-01 23:12:55 -0800400; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f64
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700401; CHECK: fstp
402
403define internal float @unsigned64ToFloat(i64 %a) {
404entry:
405 %conv = uitofp i64 %a to float
406 ret float %conv
407}
Jan Voung5a13f452014-06-18 10:42:02 -0700408; CHECK-LABEL: unsigned64ToFloat
Jim Stichnothc4508792015-03-01 23:12:55 -0800409; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f32
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700410; CHECK: fstp
411
Jan Voung1ee34162014-06-24 13:43:30 -0700412define internal double @unsigned64ToDoubleConst() {
413entry:
414 %conv = uitofp i64 12345678901234 to double
415 ret double %conv
416}
417; CHECK-LABEL: unsigned64ToDouble
Jan Vounga2703ae2015-02-19 11:27:44 -0800418; CHECK: mov DWORD PTR [esp+0x4],0xb3a
419; CHECK: mov DWORD PTR [esp],0x73ce2ff2
Jim Stichnothc4508792015-03-01 23:12:55 -0800420; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f64
Jan Voung1ee34162014-06-24 13:43:30 -0700421; CHECK: fstp
422
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700423define internal double @signed32ToDouble(i32 %a) {
424entry:
425 %conv = sitofp i32 %a to double
426 ret double %conv
427}
Jan Voung5a13f452014-06-18 10:42:02 -0700428; CHECK-LABEL: signed32ToDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700429; CHECK: cvtsi2sd
430; CHECK: fld
431
Jan Voung109fa152014-10-07 17:22:51 -0700432define internal double @signed32ToDoubleConst() {
433entry:
434 %conv = sitofp i32 123 to double
435 ret double %conv
436}
437; CHECK-LABEL: signed32ToDoubleConst
438; CHECK: cvtsi2sd {{.*[^1]}}
439; CHECK: fld
440
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700441define internal float @signed32ToFloat(i32 %a) {
442entry:
443 %conv = sitofp i32 %a to float
444 ret float %conv
445}
Jan Voung5a13f452014-06-18 10:42:02 -0700446; CHECK-LABEL: signed32ToFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700447; CHECK: cvtsi2ss
448; CHECK: fld
449
450define internal double @unsigned32ToDouble(i32 %a) {
451entry:
452 %conv = uitofp i32 %a to double
453 ret double %conv
454}
Jan Voung5a13f452014-06-18 10:42:02 -0700455; CHECK-LABEL: unsigned32ToDouble
Jim Stichnothc4508792015-03-01 23:12:55 -0800456; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i32_f64
Jan Vounga2703ae2015-02-19 11:27:44 -0800457; CHECK: fstp QWORD
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700458
459define internal float @unsigned32ToFloat(i32 %a) {
460entry:
461 %conv = uitofp i32 %a to float
462 ret float %conv
463}
Jan Voung5a13f452014-06-18 10:42:02 -0700464; CHECK-LABEL: unsigned32ToFloat
Jim Stichnothc4508792015-03-01 23:12:55 -0800465; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i32_f32
Jan Vounga2703ae2015-02-19 11:27:44 -0800466; CHECK: fstp DWORD
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700467
468define internal double @signed16ToDouble(i32 %a) {
469entry:
470 %a.arg_trunc = trunc i32 %a to i16
471 %conv = sitofp i16 %a.arg_trunc to double
472 ret double %conv
473}
Jan Voung5a13f452014-06-18 10:42:02 -0700474; CHECK-LABEL: signed16ToDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700475; CHECK: cvtsi2sd
Jan Vounga2703ae2015-02-19 11:27:44 -0800476; CHECK: fld QWORD
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700477
478define internal float @signed16ToFloat(i32 %a) {
479entry:
480 %a.arg_trunc = trunc i32 %a to i16
481 %conv = sitofp i16 %a.arg_trunc to float
482 ret float %conv
483}
Jan Voung5a13f452014-06-18 10:42:02 -0700484; CHECK-LABEL: signed16ToFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700485; CHECK: cvtsi2ss
Jan Vounga2703ae2015-02-19 11:27:44 -0800486; CHECK: fld DWORD
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700487
488define internal double @unsigned16ToDouble(i32 %a) {
489entry:
490 %a.arg_trunc = trunc i32 %a to i16
491 %conv = uitofp i16 %a.arg_trunc to double
492 ret double %conv
493}
Jan Voung5a13f452014-06-18 10:42:02 -0700494; CHECK-LABEL: unsigned16ToDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700495; CHECK: cvtsi2sd
496; CHECK: fld
497
Jan Voung109fa152014-10-07 17:22:51 -0700498define internal double @unsigned16ToDoubleConst() {
499entry:
500 %conv = uitofp i16 12345 to double
501 ret double %conv
502}
503; CHECK-LABEL: unsigned16ToDoubleConst
504; CHECK: cvtsi2sd
505; CHECK: fld
506
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700507define internal float @unsigned16ToFloat(i32 %a) {
508entry:
509 %a.arg_trunc = trunc i32 %a to i16
510 %conv = uitofp i16 %a.arg_trunc to float
511 ret float %conv
512}
Jan Voung5a13f452014-06-18 10:42:02 -0700513; CHECK-LABEL: unsigned16ToFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700514; CHECK: cvtsi2ss
515; CHECK: fld
516
517define internal double @signed8ToDouble(i32 %a) {
518entry:
519 %a.arg_trunc = trunc i32 %a to i8
520 %conv = sitofp i8 %a.arg_trunc to double
521 ret double %conv
522}
Jan Voung5a13f452014-06-18 10:42:02 -0700523; CHECK-LABEL: signed8ToDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700524; CHECK: cvtsi2sd
525; CHECK: fld
526
527define internal float @signed8ToFloat(i32 %a) {
528entry:
529 %a.arg_trunc = trunc i32 %a to i8
530 %conv = sitofp i8 %a.arg_trunc to float
531 ret float %conv
532}
Jan Voung5a13f452014-06-18 10:42:02 -0700533; CHECK-LABEL: signed8ToFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700534; CHECK: cvtsi2ss
535; CHECK: fld
536
537define internal double @unsigned8ToDouble(i32 %a) {
538entry:
539 %a.arg_trunc = trunc i32 %a to i8
540 %conv = uitofp i8 %a.arg_trunc to double
541 ret double %conv
542}
Jan Voung5a13f452014-06-18 10:42:02 -0700543; CHECK-LABEL: unsigned8ToDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700544; CHECK: cvtsi2sd
545; CHECK: fld
546
547define internal float @unsigned8ToFloat(i32 %a) {
548entry:
549 %a.arg_trunc = trunc i32 %a to i8
550 %conv = uitofp i8 %a.arg_trunc to float
551 ret float %conv
552}
Jan Voung5a13f452014-06-18 10:42:02 -0700553; CHECK-LABEL: unsigned8ToFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700554; CHECK: cvtsi2ss
555; CHECK: fld
556
557define internal double @unsigned1ToDouble(i32 %a) {
558entry:
559 %a.arg_trunc = trunc i32 %a to i1
560 %conv = uitofp i1 %a.arg_trunc to double
561 ret double %conv
562}
Jan Voung5a13f452014-06-18 10:42:02 -0700563; CHECK-LABEL: unsigned1ToDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700564; CHECK: cvtsi2sd
565; CHECK: fld
566
567define internal float @unsigned1ToFloat(i32 %a) {
568entry:
569 %a.arg_trunc = trunc i32 %a to i1
570 %conv = uitofp i1 %a.arg_trunc to float
571 ret float %conv
572}
Jan Voung5a13f452014-06-18 10:42:02 -0700573; CHECK-LABEL: unsigned1ToFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700574; CHECK: cvtsi2ss
575; CHECK: fld
576
Jan Voung109fa152014-10-07 17:22:51 -0700577define internal float @int32BitcastToFloat(i32 %a) {
578entry:
579 %conv = bitcast i32 %a to float
580 ret float %conv
581}
582; CHECK-LABEL: int32BitcastToFloat
583; CHECK: mov
584
585define internal float @int32BitcastToFloatConst() {
586entry:
587 %conv = bitcast i32 8675309 to float
588 ret float %conv
589}
590; CHECK-LABEL: int32BitcastToFloatConst
591; CHECK: mov
592
593define internal double @int64BitcastToDouble(i64 %a) {
594entry:
595 %conv = bitcast i64 %a to double
596 ret double %conv
597}
598; CHECK-LABEL: int64BitcastToDouble
599; CHECK: mov
600
601define internal double @int64BitcastToDoubleConst() {
602entry:
603 %conv = bitcast i64 9035768 to double
604 ret double %conv
605}
606; CHECK-LABEL: int64BitcastToDoubleConst
607; CHECK: mov
608
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700609define internal void @fcmpEq(float %a, float %b, double %c, double %d) {
610entry:
611 %cmp = fcmp oeq float %a, %b
612 br i1 %cmp, label %if.then, label %if.end
613
614if.then: ; preds = %entry
615 call void @func()
616 br label %if.end
617
618if.end: ; preds = %if.then, %entry
619 %cmp1 = fcmp oeq double %c, %d
620 br i1 %cmp1, label %if.then2, label %if.end3
621
622if.then2: ; preds = %if.end
623 call void @func()
624 br label %if.end3
625
626if.end3: ; preds = %if.then2, %if.end
627 ret void
628}
Jan Voung5a13f452014-06-18 10:42:02 -0700629; CHECK-LABEL: fcmpEq
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700630; CHECK: ucomiss
Jan Vounga2703ae2015-02-19 11:27:44 -0800631; CHECK: jne
632; CHECK-NEXT: jp
633; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700634; CHECK: ucomisd
Jan Vounga2703ae2015-02-19 11:27:44 -0800635; CHECK: jne
636; CHECK-NEXT: jp
637; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700638
Jan Vounga2703ae2015-02-19 11:27:44 -0800639declare void @func()
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700640
641define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
642entry:
643 %cmp = fcmp une float %a, %b
644 br i1 %cmp, label %if.then, label %if.end
645
646if.then: ; preds = %entry
647 call void @func()
648 br label %if.end
649
650if.end: ; preds = %if.then, %entry
651 %cmp1 = fcmp une double %c, %d
652 br i1 %cmp1, label %if.then2, label %if.end3
653
654if.then2: ; preds = %if.end
655 call void @func()
656 br label %if.end3
657
658if.end3: ; preds = %if.then2, %if.end
659 ret void
660}
Jan Voung5a13f452014-06-18 10:42:02 -0700661; CHECK-LABEL: fcmpNe
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700662; CHECK: ucomiss
Jan Vounga2703ae2015-02-19 11:27:44 -0800663; CHECK: jne
664; CHECK-NEXT: jp
665; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700666; CHECK: ucomisd
Jan Vounga2703ae2015-02-19 11:27:44 -0800667; CHECK: jne
668; CHECK-NEXT: jp
669; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700670
671define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
672entry:
673 %cmp = fcmp ogt float %a, %b
674 br i1 %cmp, label %if.then, label %if.end
675
676if.then: ; preds = %entry
677 call void @func()
678 br label %if.end
679
680if.end: ; preds = %if.then, %entry
681 %cmp1 = fcmp ogt double %c, %d
682 br i1 %cmp1, label %if.then2, label %if.end3
683
684if.then2: ; preds = %if.end
685 call void @func()
686 br label %if.end3
687
688if.end3: ; preds = %if.then2, %if.end
689 ret void
690}
Jan Voung5a13f452014-06-18 10:42:02 -0700691; CHECK-LABEL: fcmpGt
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700692; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700693; CHECK: seta
Jan Vounga2703ae2015-02-19 11:27:44 -0800694; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700695; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700696; CHECK: seta
Jan Vounga2703ae2015-02-19 11:27:44 -0800697; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700698
699define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
700entry:
701 %cmp = fcmp ult float %a, %b
702 br i1 %cmp, label %if.end, label %if.then
703
704if.then: ; preds = %entry
705 call void @func()
706 br label %if.end
707
708if.end: ; preds = %entry, %if.then
709 %cmp1 = fcmp ult double %c, %d
710 br i1 %cmp1, label %if.end3, label %if.then2
711
712if.then2: ; preds = %if.end
713 call void @func()
714 br label %if.end3
715
716if.end3: ; preds = %if.end, %if.then2
717 ret void
718}
Jan Voung5a13f452014-06-18 10:42:02 -0700719; CHECK-LABEL: fcmpGe
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700720; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700721; CHECK: setb
Jan Vounga2703ae2015-02-19 11:27:44 -0800722; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700723; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700724; CHECK: setb
Jan Vounga2703ae2015-02-19 11:27:44 -0800725; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700726
727define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
728entry:
729 %cmp = fcmp olt float %a, %b
730 br i1 %cmp, label %if.then, label %if.end
731
732if.then: ; preds = %entry
733 call void @func()
734 br label %if.end
735
736if.end: ; preds = %if.then, %entry
737 %cmp1 = fcmp olt double %c, %d
738 br i1 %cmp1, label %if.then2, label %if.end3
739
740if.then2: ; preds = %if.end
741 call void @func()
742 br label %if.end3
743
744if.end3: ; preds = %if.then2, %if.end
745 ret void
746}
Jan Voung5a13f452014-06-18 10:42:02 -0700747; CHECK-LABEL: fcmpLt
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700748; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700749; CHECK: seta
Jan Vounga2703ae2015-02-19 11:27:44 -0800750; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700751; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700752; CHECK: seta
Jan Vounga2703ae2015-02-19 11:27:44 -0800753; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700754
755define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
756entry:
757 %cmp = fcmp ugt float %a, %b
758 br i1 %cmp, label %if.end, label %if.then
759
760if.then: ; preds = %entry
761 call void @func()
762 br label %if.end
763
764if.end: ; preds = %entry, %if.then
765 %cmp1 = fcmp ugt double %c, %d
766 br i1 %cmp1, label %if.end3, label %if.then2
767
768if.then2: ; preds = %if.end
769 call void @func()
770 br label %if.end3
771
772if.end3: ; preds = %if.end, %if.then2
773 ret void
774}
Jan Voung5a13f452014-06-18 10:42:02 -0700775; CHECK-LABEL: fcmpLe
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700776; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700777; CHECK: setb
Jan Vounga2703ae2015-02-19 11:27:44 -0800778; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700779; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700780; CHECK: setb
Jan Vounga2703ae2015-02-19 11:27:44 -0800781; CHECK: call {{.*}} R_{{.*}} func
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700782
783define internal i32 @fcmpFalseFloat(float %a, float %b) {
784entry:
785 %cmp = fcmp false float %a, %b
786 %cmp.ret_ext = zext i1 %cmp to i32
787 ret i32 %cmp.ret_ext
788}
Jan Voung5a13f452014-06-18 10:42:02 -0700789; CHECK-LABEL: fcmpFalseFloat
Jan Vounga2703ae2015-02-19 11:27:44 -0800790; CHECK: mov {{.*}},0x0
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700791
792define internal i32 @fcmpFalseDouble(double %a, double %b) {
793entry:
794 %cmp = fcmp false double %a, %b
795 %cmp.ret_ext = zext i1 %cmp to i32
796 ret i32 %cmp.ret_ext
797}
Jan Voung5a13f452014-06-18 10:42:02 -0700798; CHECK-LABEL: fcmpFalseDouble
Jan Vounga2703ae2015-02-19 11:27:44 -0800799; CHECK: mov {{.*}},0x0
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700800
801define internal i32 @fcmpOeqFloat(float %a, float %b) {
802entry:
803 %cmp = fcmp oeq float %a, %b
804 %cmp.ret_ext = zext i1 %cmp to i32
805 ret i32 %cmp.ret_ext
806}
Jan Voung5a13f452014-06-18 10:42:02 -0700807; CHECK-LABEL: fcmpOeqFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700808; CHECK: ucomiss
Jan Vounga2703ae2015-02-19 11:27:44 -0800809; CHECK: jne
810; CHECK: jp
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700811
812define internal i32 @fcmpOeqDouble(double %a, double %b) {
813entry:
814 %cmp = fcmp oeq double %a, %b
815 %cmp.ret_ext = zext i1 %cmp to i32
816 ret i32 %cmp.ret_ext
817}
Jan Voung5a13f452014-06-18 10:42:02 -0700818; CHECK-LABEL: fcmpOeqDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700819; CHECK: ucomisd
Jan Vounga2703ae2015-02-19 11:27:44 -0800820; CHECK: jne
821; CHECK: jp
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700822
823define internal i32 @fcmpOgtFloat(float %a, float %b) {
824entry:
825 %cmp = fcmp ogt float %a, %b
826 %cmp.ret_ext = zext i1 %cmp to i32
827 ret i32 %cmp.ret_ext
828}
Jan Voung5a13f452014-06-18 10:42:02 -0700829; CHECK-LABEL: fcmpOgtFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700830; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700831; CHECK: seta
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700832
833define internal i32 @fcmpOgtDouble(double %a, double %b) {
834entry:
835 %cmp = fcmp ogt double %a, %b
836 %cmp.ret_ext = zext i1 %cmp to i32
837 ret i32 %cmp.ret_ext
838}
Jan Voung5a13f452014-06-18 10:42:02 -0700839; CHECK-LABEL: fcmpOgtDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700840; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700841; CHECK: seta
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700842
843define internal i32 @fcmpOgeFloat(float %a, float %b) {
844entry:
845 %cmp = fcmp oge float %a, %b
846 %cmp.ret_ext = zext i1 %cmp to i32
847 ret i32 %cmp.ret_ext
848}
Jan Voung5a13f452014-06-18 10:42:02 -0700849; CHECK-LABEL: fcmpOgeFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700850; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700851; CHECK: setae
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700852
853define internal i32 @fcmpOgeDouble(double %a, double %b) {
854entry:
855 %cmp = fcmp oge double %a, %b
856 %cmp.ret_ext = zext i1 %cmp to i32
857 ret i32 %cmp.ret_ext
858}
Jan Voung5a13f452014-06-18 10:42:02 -0700859; CHECK-LABEL: fcmpOgeDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700860; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700861; CHECK: setae
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700862
863define internal i32 @fcmpOltFloat(float %a, float %b) {
864entry:
865 %cmp = fcmp olt float %a, %b
866 %cmp.ret_ext = zext i1 %cmp to i32
867 ret i32 %cmp.ret_ext
868}
Jan Voung5a13f452014-06-18 10:42:02 -0700869; CHECK-LABEL: fcmpOltFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700870; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700871; CHECK: seta
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700872
873define internal i32 @fcmpOltDouble(double %a, double %b) {
874entry:
875 %cmp = fcmp olt double %a, %b
876 %cmp.ret_ext = zext i1 %cmp to i32
877 ret i32 %cmp.ret_ext
878}
Jan Voung5a13f452014-06-18 10:42:02 -0700879; CHECK-LABEL: fcmpOltDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700880; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700881; CHECK: seta
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700882
883define internal i32 @fcmpOleFloat(float %a, float %b) {
884entry:
885 %cmp = fcmp ole float %a, %b
886 %cmp.ret_ext = zext i1 %cmp to i32
887 ret i32 %cmp.ret_ext
888}
Jan Voung5a13f452014-06-18 10:42:02 -0700889; CHECK-LABEL: fcmpOleFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700890; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700891; CHECK: setae
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700892
893define internal i32 @fcmpOleDouble(double %a, double %b) {
894entry:
895 %cmp = fcmp ole double %a, %b
896 %cmp.ret_ext = zext i1 %cmp to i32
897 ret i32 %cmp.ret_ext
898}
Jan Voung5a13f452014-06-18 10:42:02 -0700899; CHECK-LABEL: fcmpOleDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700900; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700901; CHECK: setae
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700902
903define internal i32 @fcmpOneFloat(float %a, float %b) {
904entry:
905 %cmp = fcmp one float %a, %b
906 %cmp.ret_ext = zext i1 %cmp to i32
907 ret i32 %cmp.ret_ext
908}
Jan Voung5a13f452014-06-18 10:42:02 -0700909; CHECK-LABEL: fcmpOneFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700910; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700911; CHECK: setne
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700912
913define internal i32 @fcmpOneDouble(double %a, double %b) {
914entry:
915 %cmp = fcmp one double %a, %b
916 %cmp.ret_ext = zext i1 %cmp to i32
917 ret i32 %cmp.ret_ext
918}
Jan Voung5a13f452014-06-18 10:42:02 -0700919; CHECK-LABEL: fcmpOneDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700920; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700921; CHECK: setne
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700922
923define internal i32 @fcmpOrdFloat(float %a, float %b) {
924entry:
925 %cmp = fcmp ord float %a, %b
926 %cmp.ret_ext = zext i1 %cmp to i32
927 ret i32 %cmp.ret_ext
928}
Jan Voung5a13f452014-06-18 10:42:02 -0700929; CHECK-LABEL: fcmpOrdFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700930; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700931; CHECK: setnp
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700932
933define internal i32 @fcmpOrdDouble(double %a, double %b) {
934entry:
935 %cmp = fcmp ord double %a, %b
936 %cmp.ret_ext = zext i1 %cmp to i32
937 ret i32 %cmp.ret_ext
938}
Jan Voung5a13f452014-06-18 10:42:02 -0700939; CHECK-LABEL: fcmpOrdDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700940; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700941; CHECK: setnp
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700942
943define internal i32 @fcmpUeqFloat(float %a, float %b) {
944entry:
945 %cmp = fcmp ueq float %a, %b
946 %cmp.ret_ext = zext i1 %cmp to i32
947 ret i32 %cmp.ret_ext
948}
Jan Voung5a13f452014-06-18 10:42:02 -0700949; CHECK-LABEL: fcmpUeqFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700950; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700951; CHECK: sete
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700952
953define internal i32 @fcmpUeqDouble(double %a, double %b) {
954entry:
955 %cmp = fcmp ueq double %a, %b
956 %cmp.ret_ext = zext i1 %cmp to i32
957 ret i32 %cmp.ret_ext
958}
Jan Voung5a13f452014-06-18 10:42:02 -0700959; CHECK-LABEL: fcmpUeqDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700960; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700961; CHECK: sete
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700962
963define internal i32 @fcmpUgtFloat(float %a, float %b) {
964entry:
965 %cmp = fcmp ugt float %a, %b
966 %cmp.ret_ext = zext i1 %cmp to i32
967 ret i32 %cmp.ret_ext
968}
Jan Voung5a13f452014-06-18 10:42:02 -0700969; CHECK-LABEL: fcmpUgtFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700970; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700971; CHECK: setb
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700972
973define internal i32 @fcmpUgtDouble(double %a, double %b) {
974entry:
975 %cmp = fcmp ugt double %a, %b
976 %cmp.ret_ext = zext i1 %cmp to i32
977 ret i32 %cmp.ret_ext
978}
Jan Voung5a13f452014-06-18 10:42:02 -0700979; CHECK-LABEL: fcmpUgtDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700980; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -0700981; CHECK: setb
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700982
983define internal i32 @fcmpUgeFloat(float %a, float %b) {
984entry:
985 %cmp = fcmp uge float %a, %b
986 %cmp.ret_ext = zext i1 %cmp to i32
987 ret i32 %cmp.ret_ext
988}
Jan Voung5a13f452014-06-18 10:42:02 -0700989; CHECK-LABEL: fcmpUgeFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700990; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -0700991; CHECK: setbe
Jim Stichnothf7c9a142014-04-29 10:52:43 -0700992
993define internal i32 @fcmpUgeDouble(double %a, double %b) {
994entry:
995 %cmp = fcmp uge double %a, %b
996 %cmp.ret_ext = zext i1 %cmp to i32
997 ret i32 %cmp.ret_ext
998}
Jan Voung5a13f452014-06-18 10:42:02 -0700999; CHECK-LABEL: fcmpUgeDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001000; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -07001001; CHECK: setbe
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001002
1003define internal i32 @fcmpUltFloat(float %a, float %b) {
1004entry:
1005 %cmp = fcmp ult float %a, %b
1006 %cmp.ret_ext = zext i1 %cmp to i32
1007 ret i32 %cmp.ret_ext
1008}
Jan Voung5a13f452014-06-18 10:42:02 -07001009; CHECK-LABEL: fcmpUltFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001010; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -07001011; CHECK: setb
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001012
1013define internal i32 @fcmpUltDouble(double %a, double %b) {
1014entry:
1015 %cmp = fcmp ult double %a, %b
1016 %cmp.ret_ext = zext i1 %cmp to i32
1017 ret i32 %cmp.ret_ext
1018}
Jan Voung5a13f452014-06-18 10:42:02 -07001019; CHECK-LABEL: fcmpUltDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001020; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -07001021; CHECK: setb
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001022
1023define internal i32 @fcmpUleFloat(float %a, float %b) {
1024entry:
1025 %cmp = fcmp ule float %a, %b
1026 %cmp.ret_ext = zext i1 %cmp to i32
1027 ret i32 %cmp.ret_ext
1028}
Jan Voung5a13f452014-06-18 10:42:02 -07001029; CHECK-LABEL: fcmpUleFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001030; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -07001031; CHECK: setbe
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001032
1033define internal i32 @fcmpUleDouble(double %a, double %b) {
1034entry:
1035 %cmp = fcmp ule double %a, %b
1036 %cmp.ret_ext = zext i1 %cmp to i32
1037 ret i32 %cmp.ret_ext
1038}
Jan Voung5a13f452014-06-18 10:42:02 -07001039; CHECK-LABEL: fcmpUleDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001040; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -07001041; CHECK: setbe
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001042
1043define internal i32 @fcmpUneFloat(float %a, float %b) {
1044entry:
1045 %cmp = fcmp une float %a, %b
1046 %cmp.ret_ext = zext i1 %cmp to i32
1047 ret i32 %cmp.ret_ext
1048}
Jan Voung5a13f452014-06-18 10:42:02 -07001049; CHECK-LABEL: fcmpUneFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001050; CHECK: ucomiss
Jan Vounga2703ae2015-02-19 11:27:44 -08001051; CHECK: jne
1052; CHECK: jp
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001053
1054define internal i32 @fcmpUneDouble(double %a, double %b) {
1055entry:
1056 %cmp = fcmp une double %a, %b
1057 %cmp.ret_ext = zext i1 %cmp to i32
1058 ret i32 %cmp.ret_ext
1059}
Jan Voung5a13f452014-06-18 10:42:02 -07001060; CHECK-LABEL: fcmpUneDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001061; CHECK: ucomisd
Jan Vounga2703ae2015-02-19 11:27:44 -08001062; CHECK: jne
1063; CHECK: jp
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001064
1065define internal i32 @fcmpUnoFloat(float %a, float %b) {
1066entry:
1067 %cmp = fcmp uno float %a, %b
1068 %cmp.ret_ext = zext i1 %cmp to i32
1069 ret i32 %cmp.ret_ext
1070}
Jan Voung5a13f452014-06-18 10:42:02 -07001071; CHECK-LABEL: fcmpUnoFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001072; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -07001073; CHECK: setp
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001074
1075define internal i32 @fcmpUnoDouble(double %a, double %b) {
1076entry:
1077 %cmp = fcmp uno double %a, %b
1078 %cmp.ret_ext = zext i1 %cmp to i32
1079 ret i32 %cmp.ret_ext
1080}
Jan Voung5a13f452014-06-18 10:42:02 -07001081; CHECK-LABEL: fcmpUnoDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001082; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -07001083; CHECK: setp
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001084
1085define internal i32 @fcmpTrueFloat(float %a, float %b) {
1086entry:
1087 %cmp = fcmp true float %a, %b
1088 %cmp.ret_ext = zext i1 %cmp to i32
1089 ret i32 %cmp.ret_ext
1090}
Jan Voung5a13f452014-06-18 10:42:02 -07001091; CHECK-LABEL: fcmpTrueFloat
Jan Vounga2703ae2015-02-19 11:27:44 -08001092; CHECK: mov {{.*}},0x1
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001093
1094define internal i32 @fcmpTrueDouble(double %a, double %b) {
1095entry:
1096 %cmp = fcmp true double %a, %b
1097 %cmp.ret_ext = zext i1 %cmp to i32
1098 ret i32 %cmp.ret_ext
1099}
Jan Voung5a13f452014-06-18 10:42:02 -07001100; CHECK-LABEL: fcmpTrueDouble
Jan Vounga2703ae2015-02-19 11:27:44 -08001101; CHECK: mov {{.*}},0x1
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001102
1103define internal float @loadFloat(i32 %a) {
1104entry:
Karl Schimpfa667fb82014-05-19 14:56:51 -07001105 %__1 = inttoptr i32 %a to float*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -07001106 %v0 = load float, float* %__1, align 4
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001107 ret float %v0
1108}
Jan Voung5a13f452014-06-18 10:42:02 -07001109; CHECK-LABEL: loadFloat
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001110; CHECK: movss
1111; CHECK: fld
1112
1113define internal double @loadDouble(i32 %a) {
1114entry:
Karl Schimpfa667fb82014-05-19 14:56:51 -07001115 %__1 = inttoptr i32 %a to double*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -07001116 %v0 = load double, double* %__1, align 8
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001117 ret double %v0
1118}
Jan Voung5a13f452014-06-18 10:42:02 -07001119; CHECK-LABEL: loadDouble
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001120; CHECK: movsd
1121; CHECK: fld
1122
1123define internal void @storeFloat(i32 %a, float %value) {
1124entry:
Karl Schimpfa667fb82014-05-19 14:56:51 -07001125 %__2 = inttoptr i32 %a to float*
1126 store float %value, float* %__2, align 4
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001127 ret void
1128}
Jan Vounga2703ae2015-02-19 11:27:44 -08001129; CHECK-LABEL: storeFloat
Jan Voung5a13f452014-06-18 10:42:02 -07001130; CHECK: movss
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001131; CHECK: movss
1132
1133define internal void @storeDouble(i32 %a, double %value) {
1134entry:
Karl Schimpfa667fb82014-05-19 14:56:51 -07001135 %__2 = inttoptr i32 %a to double*
1136 store double %value, double* %__2, align 8
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001137 ret void
1138}
Jan Vounga2703ae2015-02-19 11:27:44 -08001139; CHECK-LABEL: storeDouble
Jan Voung5a13f452014-06-18 10:42:02 -07001140; CHECK: movsd
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001141; CHECK: movsd
1142
1143define internal void @storeFloatConst(i32 %a) {
1144entry:
1145 %a.asptr = inttoptr i32 %a to float*
1146 store float 0x3FF3AE1480000000, float* %a.asptr, align 4
1147 ret void
1148}
Jan Voung5a13f452014-06-18 10:42:02 -07001149; CHECK-LABEL: storeFloatConst
1150; CHECK: movss
1151; CHECK: movss
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001152
1153define internal void @storeDoubleConst(i32 %a) {
1154entry:
1155 %a.asptr = inttoptr i32 %a to double*
1156 store double 1.230000e+00, double* %a.asptr, align 8
1157 ret void
1158}
Jan Voung5a13f452014-06-18 10:42:02 -07001159; CHECK-LABEL: storeDoubleConst
1160; CHECK: movsd
1161; CHECK: movsd
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001162
1163define internal float @selectFloatVarVar(float %a, float %b) {
1164entry:
1165 %cmp = fcmp olt float %a, %b
1166 %cond = select i1 %cmp, float %a, float %b
1167 ret float %cond
1168}
Jan Voung5a13f452014-06-18 10:42:02 -07001169; CHECK-LABEL: selectFloatVarVar
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001170; CHECK: ucomiss
Jim Stichnothe94740a2015-05-22 13:17:30 -07001171; CHECK: seta
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001172; CHECK: fld
1173
1174define internal double @selectDoubleVarVar(double %a, double %b) {
1175entry:
1176 %cmp = fcmp olt double %a, %b
1177 %cond = select i1 %cmp, double %a, double %b
1178 ret double %cond
1179}
Jan Voung5a13f452014-06-18 10:42:02 -07001180; CHECK-LABEL: selectDoubleVarVar
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001181; CHECK: ucomisd
Jim Stichnothe94740a2015-05-22 13:17:30 -07001182; CHECK: seta
Jim Stichnothf7c9a142014-04-29 10:52:43 -07001183; CHECK: fld