mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
7bbf5786d7
Clang may well start emitting these soon, and while it may not be directly relevant for OpenCL or GLSL, the instructions were just sitting there waiting to be used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213356 91177308-0d34-0410-b5e6-96231b3b80d8
46 lines
1.8 KiB
LLVM
46 lines
1.8 KiB
LLVM
; RUN: llc -march=nvptx -verify-machineinstrs < %s | FileCheck %s
|
|
|
|
declare float @llvm.convert.from.fp16.f32(i16) nounwind readnone
|
|
declare double @llvm.convert.from.fp16.f64(i16) nounwind readnone
|
|
declare i16 @llvm.convert.to.fp16.f32(float) nounwind readnone
|
|
declare i16 @llvm.convert.to.fp16.f64(double) nounwind readnone
|
|
|
|
; CHECK-LABEL: @test_convert_fp16_to_fp32
|
|
; CHECK: cvt.f32.f16
|
|
define void @test_convert_fp16_to_fp32(float addrspace(1)* noalias %out, i16 addrspace(1)* noalias %in) nounwind {
|
|
%val = load i16 addrspace(1)* %in, align 2
|
|
%cvt = call float @llvm.convert.from.fp16.f32(i16 %val) nounwind readnone
|
|
store float %cvt, float addrspace(1)* %out, align 4
|
|
ret void
|
|
}
|
|
|
|
|
|
; CHECK-LABEL: @test_convert_fp16_to_fp64
|
|
; CHECK: cvt.f64.f16
|
|
define void @test_convert_fp16_to_fp64(double addrspace(1)* noalias %out, i16 addrspace(1)* noalias %in) nounwind {
|
|
%val = load i16 addrspace(1)* %in, align 2
|
|
%cvt = call double @llvm.convert.from.fp16.f64(i16 %val) nounwind readnone
|
|
store double %cvt, double addrspace(1)* %out, align 4
|
|
ret void
|
|
}
|
|
|
|
|
|
; CHECK-LABEL: @test_convert_fp32_to_fp16
|
|
; CHECK: cvt.rn.f16.f32
|
|
define void @test_convert_fp32_to_fp16(i16 addrspace(1)* noalias %out, float addrspace(1)* noalias %in) nounwind {
|
|
%val = load float addrspace(1)* %in, align 2
|
|
%cvt = call i16 @llvm.convert.to.fp16.f32(float %val) nounwind readnone
|
|
store i16 %cvt, i16 addrspace(1)* %out, align 4
|
|
ret void
|
|
}
|
|
|
|
|
|
; CHECK-LABEL: @test_convert_fp64_to_fp16
|
|
; CHECK: cvt.rn.f16.f64
|
|
define void @test_convert_fp64_to_fp16(i16 addrspace(1)* noalias %out, double addrspace(1)* noalias %in) nounwind {
|
|
%val = load double addrspace(1)* %in, align 2
|
|
%cvt = call i16 @llvm.convert.to.fp16.f64(double %val) nounwind readnone
|
|
store i16 %cvt, i16 addrspace(1)* %out, align 4
|
|
ret void
|
|
}
|