| OLD | NEW |
| 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: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s | 6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s |
| 7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s | 7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s |
| 8 | 8 |
| 9 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 9 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
| 10 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 10 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 ; CHECK-LABEL: fpext | 200 ; CHECK-LABEL: fpext |
| 201 ; CHECK: cvtss2sd | 201 ; CHECK: cvtss2sd |
| 202 ; CHECK: fld | 202 ; CHECK: fld |
| 203 | 203 |
| 204 define internal i64 @doubleToSigned64(double %a) { | 204 define internal i64 @doubleToSigned64(double %a) { |
| 205 entry: | 205 entry: |
| 206 %conv = fptosi double %a to i64 | 206 %conv = fptosi double %a to i64 |
| 207 ret i64 %conv | 207 ret i64 %conv |
| 208 } | 208 } |
| 209 ; CHECK-LABEL: doubleToSigned64 | 209 ; CHECK-LABEL: doubleToSigned64 |
| 210 ; CHECK: call {{.*}} R_{{.*}} cvtdtosi64 | 210 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptosi_f64_i64 |
| 211 | 211 |
| 212 define internal i64 @floatToSigned64(float %a) { | 212 define internal i64 @floatToSigned64(float %a) { |
| 213 entry: | 213 entry: |
| 214 %conv = fptosi float %a to i64 | 214 %conv = fptosi float %a to i64 |
| 215 ret i64 %conv | 215 ret i64 %conv |
| 216 } | 216 } |
| 217 ; CHECK-LABEL: floatToSigned64 | 217 ; CHECK-LABEL: floatToSigned64 |
| 218 ; CHECK: call {{.*}} R_{{.*}} cvtftosi64 | 218 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptosi_f32_i64 |
| 219 | 219 |
| 220 define internal i64 @doubleToUnsigned64(double %a) { | 220 define internal i64 @doubleToUnsigned64(double %a) { |
| 221 entry: | 221 entry: |
| 222 %conv = fptoui double %a to i64 | 222 %conv = fptoui double %a to i64 |
| 223 ret i64 %conv | 223 ret i64 %conv |
| 224 } | 224 } |
| 225 ; CHECK-LABEL: doubleToUnsigned64 | 225 ; CHECK-LABEL: doubleToUnsigned64 |
| 226 ; CHECK: call {{.*}} R_{{.*}} cvtdtoui64 | 226 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f64_i64 |
| 227 | 227 |
| 228 define internal i64 @floatToUnsigned64(float %a) { | 228 define internal i64 @floatToUnsigned64(float %a) { |
| 229 entry: | 229 entry: |
| 230 %conv = fptoui float %a to i64 | 230 %conv = fptoui float %a to i64 |
| 231 ret i64 %conv | 231 ret i64 %conv |
| 232 } | 232 } |
| 233 ; CHECK-LABEL: floatToUnsigned64 | 233 ; CHECK-LABEL: floatToUnsigned64 |
| 234 ; CHECK: call {{.*}} R_{{.*}} cvtftoui64 | 234 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f32_i64 |
| 235 | 235 |
| 236 define internal i32 @doubleToSigned32(double %a) { | 236 define internal i32 @doubleToSigned32(double %a) { |
| 237 entry: | 237 entry: |
| 238 %conv = fptosi double %a to i32 | 238 %conv = fptosi double %a to i32 |
| 239 ret i32 %conv | 239 ret i32 %conv |
| 240 } | 240 } |
| 241 ; CHECK-LABEL: doubleToSigned32 | 241 ; CHECK-LABEL: doubleToSigned32 |
| 242 ; CHECK: cvttsd2si | 242 ; CHECK: cvttsd2si |
| 243 | 243 |
| 244 define internal i32 @doubleToSigned32Const() { | 244 define internal i32 @doubleToSigned32Const() { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 256 } | 256 } |
| 257 ; CHECK-LABEL: floatToSigned32 | 257 ; CHECK-LABEL: floatToSigned32 |
| 258 ; CHECK: cvttss2si | 258 ; CHECK: cvttss2si |
| 259 | 259 |
| 260 define internal i32 @doubleToUnsigned32(double %a) { | 260 define internal i32 @doubleToUnsigned32(double %a) { |
| 261 entry: | 261 entry: |
| 262 %conv = fptoui double %a to i32 | 262 %conv = fptoui double %a to i32 |
| 263 ret i32 %conv | 263 ret i32 %conv |
| 264 } | 264 } |
| 265 ; CHECK-LABEL: doubleToUnsigned32 | 265 ; CHECK-LABEL: doubleToUnsigned32 |
| 266 ; CHECK: call {{.*}} R_{{.*}} cvtdtoui32 | 266 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f64_i32 |
| 267 | 267 |
| 268 define internal i32 @floatToUnsigned32(float %a) { | 268 define internal i32 @floatToUnsigned32(float %a) { |
| 269 entry: | 269 entry: |
| 270 %conv = fptoui float %a to i32 | 270 %conv = fptoui float %a to i32 |
| 271 ret i32 %conv | 271 ret i32 %conv |
| 272 } | 272 } |
| 273 ; CHECK-LABEL: floatToUnsigned32 | 273 ; CHECK-LABEL: floatToUnsigned32 |
| 274 ; CHECK: call {{.*}} R_{{.*}} cvtftoui32 | 274 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f32_i32 |
| 275 | 275 |
| 276 define internal i32 @doubleToSigned16(double %a) { | 276 define internal i32 @doubleToSigned16(double %a) { |
| 277 entry: | 277 entry: |
| 278 %conv = fptosi double %a to i16 | 278 %conv = fptosi double %a to i16 |
| 279 %conv.ret_ext = sext i16 %conv to i32 | 279 %conv.ret_ext = sext i16 %conv to i32 |
| 280 ret i32 %conv.ret_ext | 280 ret i32 %conv.ret_ext |
| 281 } | 281 } |
| 282 ; CHECK-LABEL: doubleToSigned16 | 282 ; CHECK-LABEL: doubleToSigned16 |
| 283 ; CHECK: cvttsd2si | 283 ; CHECK: cvttsd2si |
| 284 ; CHECK: movsx | 284 ; CHECK: movsx |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 ; CHECK-LABEL: floatToUnsigned1 | 372 ; CHECK-LABEL: floatToUnsigned1 |
| 373 ; CHECK: cvttss2si | 373 ; CHECK: cvttss2si |
| 374 ; CHECK: and eax,0x1 | 374 ; CHECK: and eax,0x1 |
| 375 | 375 |
| 376 define internal double @signed64ToDouble(i64 %a) { | 376 define internal double @signed64ToDouble(i64 %a) { |
| 377 entry: | 377 entry: |
| 378 %conv = sitofp i64 %a to double | 378 %conv = sitofp i64 %a to double |
| 379 ret double %conv | 379 ret double %conv |
| 380 } | 380 } |
| 381 ; CHECK-LABEL: signed64ToDouble | 381 ; CHECK-LABEL: signed64ToDouble |
| 382 ; CHECK: call {{.*}} R_{{.*}} cvtsi64tod | 382 ; CHECK: call {{.*}} R_{{.*}} __Sz_sitofp_i64_f64 |
| 383 ; CHECK: fstp QWORD | 383 ; CHECK: fstp QWORD |
| 384 | 384 |
| 385 define internal float @signed64ToFloat(i64 %a) { | 385 define internal float @signed64ToFloat(i64 %a) { |
| 386 entry: | 386 entry: |
| 387 %conv = sitofp i64 %a to float | 387 %conv = sitofp i64 %a to float |
| 388 ret float %conv | 388 ret float %conv |
| 389 } | 389 } |
| 390 ; CHECK-LABEL: signed64ToFloat | 390 ; CHECK-LABEL: signed64ToFloat |
| 391 ; CHECK: call {{.*}} R_{{.*}} cvtsi64tof | 391 ; CHECK: call {{.*}} R_{{.*}} __Sz_sitofp_i64_f32 |
| 392 ; CHECK: fstp DWORD | 392 ; CHECK: fstp DWORD |
| 393 | 393 |
| 394 define internal double @unsigned64ToDouble(i64 %a) { | 394 define internal double @unsigned64ToDouble(i64 %a) { |
| 395 entry: | 395 entry: |
| 396 %conv = uitofp i64 %a to double | 396 %conv = uitofp i64 %a to double |
| 397 ret double %conv | 397 ret double %conv |
| 398 } | 398 } |
| 399 ; CHECK-LABEL: unsigned64ToDouble | 399 ; CHECK-LABEL: unsigned64ToDouble |
| 400 ; CHECK: call {{.*}} R_{{.*}} cvtui64tod | 400 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f64 |
| 401 ; CHECK: fstp | 401 ; CHECK: fstp |
| 402 | 402 |
| 403 define internal float @unsigned64ToFloat(i64 %a) { | 403 define internal float @unsigned64ToFloat(i64 %a) { |
| 404 entry: | 404 entry: |
| 405 %conv = uitofp i64 %a to float | 405 %conv = uitofp i64 %a to float |
| 406 ret float %conv | 406 ret float %conv |
| 407 } | 407 } |
| 408 ; CHECK-LABEL: unsigned64ToFloat | 408 ; CHECK-LABEL: unsigned64ToFloat |
| 409 ; CHECK: call {{.*}} R_{{.*}} cvtui64tof | 409 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f32 |
| 410 ; CHECK: fstp | 410 ; CHECK: fstp |
| 411 | 411 |
| 412 define internal double @unsigned64ToDoubleConst() { | 412 define internal double @unsigned64ToDoubleConst() { |
| 413 entry: | 413 entry: |
| 414 %conv = uitofp i64 12345678901234 to double | 414 %conv = uitofp i64 12345678901234 to double |
| 415 ret double %conv | 415 ret double %conv |
| 416 } | 416 } |
| 417 ; CHECK-LABEL: unsigned64ToDouble | 417 ; CHECK-LABEL: unsigned64ToDouble |
| 418 ; CHECK: mov DWORD PTR [esp+0x4],0xb3a | 418 ; CHECK: mov DWORD PTR [esp+0x4],0xb3a |
| 419 ; CHECK: mov DWORD PTR [esp],0x73ce2ff2 | 419 ; CHECK: mov DWORD PTR [esp],0x73ce2ff2 |
| 420 ; CHECK: call {{.*}} R_{{.*}} cvtui64tod | 420 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f64 |
| 421 ; CHECK: fstp | 421 ; CHECK: fstp |
| 422 | 422 |
| 423 define internal double @signed32ToDouble(i32 %a) { | 423 define internal double @signed32ToDouble(i32 %a) { |
| 424 entry: | 424 entry: |
| 425 %conv = sitofp i32 %a to double | 425 %conv = sitofp i32 %a to double |
| 426 ret double %conv | 426 ret double %conv |
| 427 } | 427 } |
| 428 ; CHECK-LABEL: signed32ToDouble | 428 ; CHECK-LABEL: signed32ToDouble |
| 429 ; CHECK: cvtsi2sd | 429 ; CHECK: cvtsi2sd |
| 430 ; CHECK: fld | 430 ; CHECK: fld |
| (...skipping 15 matching lines...) Expand all Loading... |
| 446 ; CHECK-LABEL: signed32ToFloat | 446 ; CHECK-LABEL: signed32ToFloat |
| 447 ; CHECK: cvtsi2ss | 447 ; CHECK: cvtsi2ss |
| 448 ; CHECK: fld | 448 ; CHECK: fld |
| 449 | 449 |
| 450 define internal double @unsigned32ToDouble(i32 %a) { | 450 define internal double @unsigned32ToDouble(i32 %a) { |
| 451 entry: | 451 entry: |
| 452 %conv = uitofp i32 %a to double | 452 %conv = uitofp i32 %a to double |
| 453 ret double %conv | 453 ret double %conv |
| 454 } | 454 } |
| 455 ; CHECK-LABEL: unsigned32ToDouble | 455 ; CHECK-LABEL: unsigned32ToDouble |
| 456 ; CHECK: call {{.*}} R_{{.*}} cvtui32tod | 456 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i32_f64 |
| 457 ; CHECK: fstp QWORD | 457 ; CHECK: fstp QWORD |
| 458 | 458 |
| 459 define internal float @unsigned32ToFloat(i32 %a) { | 459 define internal float @unsigned32ToFloat(i32 %a) { |
| 460 entry: | 460 entry: |
| 461 %conv = uitofp i32 %a to float | 461 %conv = uitofp i32 %a to float |
| 462 ret float %conv | 462 ret float %conv |
| 463 } | 463 } |
| 464 ; CHECK-LABEL: unsigned32ToFloat | 464 ; CHECK-LABEL: unsigned32ToFloat |
| 465 ; CHECK: call {{.*}} R_{{.*}} cvtui32tof | 465 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i32_f32 |
| 466 ; CHECK: fstp DWORD | 466 ; CHECK: fstp DWORD |
| 467 | 467 |
| 468 define internal double @signed16ToDouble(i32 %a) { | 468 define internal double @signed16ToDouble(i32 %a) { |
| 469 entry: | 469 entry: |
| 470 %a.arg_trunc = trunc i32 %a to i16 | 470 %a.arg_trunc = trunc i32 %a to i16 |
| 471 %conv = sitofp i16 %a.arg_trunc to double | 471 %conv = sitofp i16 %a.arg_trunc to double |
| 472 ret double %conv | 472 ret double %conv |
| 473 } | 473 } |
| 474 ; CHECK-LABEL: signed16ToDouble | 474 ; CHECK-LABEL: signed16ToDouble |
| 475 ; CHECK: cvtsi2sd | 475 ; CHECK: cvtsi2sd |
| (...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1174 define internal double @selectDoubleVarVar(double %a, double %b) { | 1174 define internal double @selectDoubleVarVar(double %a, double %b) { |
| 1175 entry: | 1175 entry: |
| 1176 %cmp = fcmp olt double %a, %b | 1176 %cmp = fcmp olt double %a, %b |
| 1177 %cond = select i1 %cmp, double %a, double %b | 1177 %cond = select i1 %cmp, double %a, double %b |
| 1178 ret double %cond | 1178 ret double %cond |
| 1179 } | 1179 } |
| 1180 ; CHECK-LABEL: selectDoubleVarVar | 1180 ; CHECK-LABEL: selectDoubleVarVar |
| 1181 ; CHECK: ucomisd | 1181 ; CHECK: ucomisd |
| 1182 ; CHECK: ja | 1182 ; CHECK: ja |
| 1183 ; CHECK: fld | 1183 ; CHECK: fld |
| OLD | NEW |