• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -fast-isel -fast-isel-abort=1 -asm-verbose=false -mtriple=x86_64-unknown-unknown -mattr=+f16c < %s | FileCheck %s
2
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:
7; CHECK: vcvtps2ph $4, %xmm0, %xmm0
8; 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)
29