blob: acb85fd171f543d89ca46a2d66df9acd7006c5cc [file] [log] [blame]
Mehdi Amini945a6602015-02-27 18:32:11 +00001; RUN: llc -fast-isel -fast-isel-abort=1 -asm-verbose=false -mtriple=x86_64-unknown-unknown -mattr=+f16c < %s | FileCheck %s
Andrea Di Biagio70351782015-02-20 19:37:14 +00002
3; Verify that fast-isel correctly expands float-half conversions.
4
5define i16 @test_fp32_to_fp16(float %a) {
6; CHECK-LABEL: test_fp32_to_fp16:
Ahmed Bougacha68a8efa2016-02-02 01:44:03 +00007; CHECK: vcvtps2ph $4, %xmm0, %xmm0
Andrea Di Biagio70351782015-02-20 19:37:14 +00008; CHECK-NEXT: vmovd %xmm0, %eax
9; CHECK-NEXT: retq
10entry:
11 %0 = call i16 @llvm.convert.to.fp16.f32(float %a)
12 ret i16 %0
13}
14
15define float @test_fp16_to_fp32(i32 %a) {
16; CHECK-LABEL: test_fp16_to_fp32:
17; CHECK: movswl %di, %eax
18; CHECK-NEXT: vmovd %eax, %xmm0
19; CHECK-NEXT: vcvtph2ps %xmm0, %xmm0
20; CHECK-NEXT: retq
21entry:
22 %0 = trunc i32 %a to i16
23 %1 = call float @llvm.convert.from.fp16.f32(i16 %0)
24 ret float %1
25}
26
27declare i16 @llvm.convert.to.fp16.f32(float)
28declare float @llvm.convert.from.fp16.f32(i16)