xref: /aosp_15_r20/external/llvm/test/CodeGen/NVPTX/half.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine void @test_load_store(half addrspace(1)* %in, half addrspace(1)* %out) {
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_load_store
5*9880d681SAndroid Build Coastguard Worker; CHECK: ld.global.u16 [[TMP:%rs[0-9]+]], [{{%r[0-9]+}}]
6*9880d681SAndroid Build Coastguard Worker; CHECK: st.global.u16 [{{%r[0-9]+}}], [[TMP]]
7*9880d681SAndroid Build Coastguard Worker  %val = load half, half addrspace(1)* %in
8*9880d681SAndroid Build Coastguard Worker  store half %val, half addrspace(1) * %out
9*9880d681SAndroid Build Coastguard Worker  ret void
10*9880d681SAndroid Build Coastguard Worker}
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine void @test_bitcast_from_half(half addrspace(1)* %in, i16 addrspace(1)* %out) {
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_bitcast_from_half
14*9880d681SAndroid Build Coastguard Worker; CHECK: ld.global.u16 [[TMP:%rs[0-9]+]], [{{%r[0-9]+}}]
15*9880d681SAndroid Build Coastguard Worker; CHECK: st.global.u16 [{{%r[0-9]+}}], [[TMP]]
16*9880d681SAndroid Build Coastguard Worker  %val = load half, half addrspace(1) * %in
17*9880d681SAndroid Build Coastguard Worker  %val_int = bitcast half %val to i16
18*9880d681SAndroid Build Coastguard Worker  store i16 %val_int, i16 addrspace(1)* %out
19*9880d681SAndroid Build Coastguard Worker  ret void
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdefine void @test_bitcast_to_half(half addrspace(1)* %out, i16 addrspace(1)* %in) {
23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_bitcast_to_half
24*9880d681SAndroid Build Coastguard Worker; CHECK: ld.global.u16 [[TMP:%rs[0-9]+]], [{{%r[0-9]+}}]
25*9880d681SAndroid Build Coastguard Worker; CHECK: st.global.u16 [{{%r[0-9]+}}], [[TMP]]
26*9880d681SAndroid Build Coastguard Worker  %val = load i16, i16 addrspace(1)* %in
27*9880d681SAndroid Build Coastguard Worker  %val_fp = bitcast i16 %val to half
28*9880d681SAndroid Build Coastguard Worker  store half %val_fp, half addrspace(1)* %out
29*9880d681SAndroid Build Coastguard Worker  ret void
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine void @test_extend32(half addrspace(1)* %in, float addrspace(1)* %out) {
33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extend32
34*9880d681SAndroid Build Coastguard Worker; CHECK: cvt.f32.f16
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker  %val16 = load half, half addrspace(1)* %in
37*9880d681SAndroid Build Coastguard Worker  %val32 = fpext half %val16 to float
38*9880d681SAndroid Build Coastguard Worker  store float %val32, float addrspace(1)* %out
39*9880d681SAndroid Build Coastguard Worker  ret void
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerdefine void @test_extend64(half addrspace(1)* %in, double addrspace(1)* %out) {
43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extend64
44*9880d681SAndroid Build Coastguard Worker; CHECK: cvt.f64.f16
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Worker  %val16 = load half, half addrspace(1)* %in
47*9880d681SAndroid Build Coastguard Worker  %val64 = fpext half %val16 to double
48*9880d681SAndroid Build Coastguard Worker  store double %val64, double addrspace(1)* %out
49*9880d681SAndroid Build Coastguard Worker  ret void
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerdefine void @test_trunc32(float addrspace(1)* %in, half addrspace(1)* %out) {
53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_trunc32
54*9880d681SAndroid Build Coastguard Worker; CHECK: cvt.rn.f16.f32
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker  %val32 = load float, float addrspace(1)* %in
57*9880d681SAndroid Build Coastguard Worker  %val16 = fptrunc float %val32 to half
58*9880d681SAndroid Build Coastguard Worker  store half %val16, half addrspace(1)* %out
59*9880d681SAndroid Build Coastguard Worker  ret void
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerdefine void @test_trunc64(double addrspace(1)* %in, half addrspace(1)* %out) {
63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_trunc64
64*9880d681SAndroid Build Coastguard Worker; CHECK: cvt.rn.f16.f64
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker  %val32 = load double, double addrspace(1)* %in
67*9880d681SAndroid Build Coastguard Worker  %val16 = fptrunc double %val32 to half
68*9880d681SAndroid Build Coastguard Worker  store half %val16, half addrspace(1)* %out
69*9880d681SAndroid Build Coastguard Worker  ret void
70*9880d681SAndroid Build Coastguard Worker}
71