93 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=amdgcn < %s | FileCheck -check-prefixes=GFX6 %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -check-prefixes=GFX8 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -mattr=-flat-for-global < %s | FileCheck -check-prefixes=GFX11-TRUE16 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -mattr=-flat-for-global < %s | FileCheck -check-prefixes=GFX11-FAKE16 %s6 7 8declare double @llvm.convert.from.fp16.f64(i16) nounwind readnone9 10define amdgpu_kernel void @test_convert_fp16_to_fp64(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in) nounwind {11; GFX6-LABEL: test_convert_fp16_to_fp64:12; GFX6: ; %bb.0:13; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x914; GFX6-NEXT: s_mov_b32 s7, 0xf00015; GFX6-NEXT: s_mov_b32 s6, -116; GFX6-NEXT: s_mov_b32 s10, s617; GFX6-NEXT: s_mov_b32 s11, s718; GFX6-NEXT: s_waitcnt lgkmcnt(0)19; GFX6-NEXT: s_mov_b32 s8, s220; GFX6-NEXT: s_mov_b32 s9, s321; GFX6-NEXT: buffer_load_ushort v0, off, s[8:11], 022; GFX6-NEXT: s_mov_b32 s4, s023; GFX6-NEXT: s_mov_b32 s5, s124; GFX6-NEXT: s_waitcnt vmcnt(0)25; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v026; GFX6-NEXT: v_cvt_f64_f32_e32 v[0:1], v027; GFX6-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 028; GFX6-NEXT: s_endpgm29;30; GFX8-LABEL: test_convert_fp16_to_fp64:31; GFX8: ; %bb.0:32; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2433; GFX8-NEXT: s_mov_b32 s7, 0xf00034; GFX8-NEXT: s_mov_b32 s6, -135; GFX8-NEXT: s_mov_b32 s10, s636; GFX8-NEXT: s_mov_b32 s11, s737; GFX8-NEXT: s_waitcnt lgkmcnt(0)38; GFX8-NEXT: s_mov_b32 s8, s239; GFX8-NEXT: s_mov_b32 s9, s340; GFX8-NEXT: buffer_load_ushort v0, off, s[8:11], 041; GFX8-NEXT: s_mov_b32 s4, s042; GFX8-NEXT: s_mov_b32 s5, s143; GFX8-NEXT: s_waitcnt vmcnt(0)44; GFX8-NEXT: v_cvt_f32_f16_e32 v0, v045; GFX8-NEXT: v_cvt_f64_f32_e32 v[0:1], v046; GFX8-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 047; GFX8-NEXT: s_endpgm48;49; GFX11-TRUE16-LABEL: test_convert_fp16_to_fp64:50; GFX11-TRUE16: ; %bb.0:51; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2452; GFX11-TRUE16-NEXT: s_mov_b32 s6, -153; GFX11-TRUE16-NEXT: s_mov_b32 s7, 0x3101600054; GFX11-TRUE16-NEXT: s_mov_b32 s10, s655; GFX11-TRUE16-NEXT: s_mov_b32 s11, s756; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)57; GFX11-TRUE16-NEXT: s_mov_b32 s8, s258; GFX11-TRUE16-NEXT: s_mov_b32 s9, s359; GFX11-TRUE16-NEXT: s_mov_b32 s4, s060; GFX11-TRUE16-NEXT: buffer_load_u16 v0, off, s[8:11], 061; GFX11-TRUE16-NEXT: s_mov_b32 s5, s162; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)63; GFX11-TRUE16-NEXT: v_cvt_f32_f16_e32 v0, v0.l64; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)65; GFX11-TRUE16-NEXT: v_cvt_f64_f32_e32 v[0:1], v066; GFX11-TRUE16-NEXT: buffer_store_b64 v[0:1], off, s[4:7], 067; GFX11-TRUE16-NEXT: s_endpgm68;69; GFX11-FAKE16-LABEL: test_convert_fp16_to_fp64:70; GFX11-FAKE16: ; %bb.0:71; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2472; GFX11-FAKE16-NEXT: s_mov_b32 s6, -173; GFX11-FAKE16-NEXT: s_mov_b32 s7, 0x3101600074; GFX11-FAKE16-NEXT: s_mov_b32 s10, s675; GFX11-FAKE16-NEXT: s_mov_b32 s11, s776; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)77; GFX11-FAKE16-NEXT: s_mov_b32 s8, s278; GFX11-FAKE16-NEXT: s_mov_b32 s9, s379; GFX11-FAKE16-NEXT: s_mov_b32 s4, s080; GFX11-FAKE16-NEXT: buffer_load_u16 v0, off, s[8:11], 081; GFX11-FAKE16-NEXT: s_mov_b32 s5, s182; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)83; GFX11-FAKE16-NEXT: v_cvt_f32_f16_e32 v0, v084; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)85; GFX11-FAKE16-NEXT: v_cvt_f64_f32_e32 v[0:1], v086; GFX11-FAKE16-NEXT: buffer_store_b64 v[0:1], off, s[4:7], 087; GFX11-FAKE16-NEXT: s_endpgm88 %val = load i16, ptr addrspace(1) %in, align 289 %cvt = call double @llvm.convert.from.fp16.f64(i16 %val) nounwind readnone90 store double %cvt, ptr addrspace(1) %out, align 491 ret void92}93