brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 42451f9 Raw
122 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; RUN: llc -mtriple=r600 -mcpu=cypress < %s | FileCheck -check-prefixes=CYPRESS %s7; RUN: llc -mtriple=r600 -mcpu=cayman < %s | FileCheck -check-prefixes=CAYMAN %s8 9declare float @llvm.convert.from.fp16.f32(i16) nounwind readnone10 11define amdgpu_kernel void @test_convert_fp16_to_fp32(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in) nounwind {12; GFX6-LABEL: test_convert_fp16_to_fp32:13; GFX6:       ; %bb.0:14; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x915; GFX6-NEXT:    s_mov_b32 s7, 0xf00016; GFX6-NEXT:    s_mov_b32 s6, -117; GFX6-NEXT:    s_mov_b32 s10, s618; GFX6-NEXT:    s_mov_b32 s11, s719; GFX6-NEXT:    s_waitcnt lgkmcnt(0)20; GFX6-NEXT:    s_mov_b32 s8, s221; GFX6-NEXT:    s_mov_b32 s9, s322; GFX6-NEXT:    buffer_load_ushort v0, off, s[8:11], 023; GFX6-NEXT:    s_mov_b32 s4, s024; GFX6-NEXT:    s_mov_b32 s5, s125; GFX6-NEXT:    s_waitcnt vmcnt(0)26; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v027; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 028; GFX6-NEXT:    s_endpgm29;30; GFX8-LABEL: test_convert_fp16_to_fp32: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:    buffer_store_dword v0, off, s[4:7], 046; GFX8-NEXT:    s_endpgm47;48; GFX11-TRUE16-LABEL: test_convert_fp16_to_fp32:49; GFX11-TRUE16:       ; %bb.0:50; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2451; GFX11-TRUE16-NEXT:    s_mov_b32 s6, -152; GFX11-TRUE16-NEXT:    s_mov_b32 s7, 0x3101600053; GFX11-TRUE16-NEXT:    s_mov_b32 s10, s654; GFX11-TRUE16-NEXT:    s_mov_b32 s11, s755; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)56; GFX11-TRUE16-NEXT:    s_mov_b32 s8, s257; GFX11-TRUE16-NEXT:    s_mov_b32 s9, s358; GFX11-TRUE16-NEXT:    s_mov_b32 s4, s059; GFX11-TRUE16-NEXT:    buffer_load_u16 v0, off, s[8:11], 060; GFX11-TRUE16-NEXT:    s_mov_b32 s5, s161; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)62; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l63; GFX11-TRUE16-NEXT:    buffer_store_b32 v0, off, s[4:7], 064; GFX11-TRUE16-NEXT:    s_endpgm65;66; GFX11-FAKE16-LABEL: test_convert_fp16_to_fp32:67; GFX11-FAKE16:       ; %bb.0:68; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2469; GFX11-FAKE16-NEXT:    s_mov_b32 s6, -170; GFX11-FAKE16-NEXT:    s_mov_b32 s7, 0x3101600071; GFX11-FAKE16-NEXT:    s_mov_b32 s10, s672; GFX11-FAKE16-NEXT:    s_mov_b32 s11, s773; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)74; GFX11-FAKE16-NEXT:    s_mov_b32 s8, s275; GFX11-FAKE16-NEXT:    s_mov_b32 s9, s376; GFX11-FAKE16-NEXT:    s_mov_b32 s4, s077; GFX11-FAKE16-NEXT:    buffer_load_u16 v0, off, s[8:11], 078; GFX11-FAKE16-NEXT:    s_mov_b32 s5, s179; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)80; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v081; GFX11-FAKE16-NEXT:    buffer_store_b32 v0, off, s[4:7], 082; GFX11-FAKE16-NEXT:    s_endpgm83;84; CYPRESS-LABEL: test_convert_fp16_to_fp32:85; CYPRESS:       ; %bb.0:86; CYPRESS-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]87; CYPRESS-NEXT:    TEX 0 @688; CYPRESS-NEXT:    ALU 2, @9, KC0[CB0:0-32], KC1[]89; CYPRESS-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 190; CYPRESS-NEXT:    CF_END91; CYPRESS-NEXT:    PAD92; CYPRESS-NEXT:    Fetch clause starting at 6:93; CYPRESS-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #194; CYPRESS-NEXT:    ALU clause starting at 8:95; CYPRESS-NEXT:     MOV * T0.X, KC0[2].Z,96; CYPRESS-NEXT:    ALU clause starting at 9:97; CYPRESS-NEXT:     FLT16_TO_FLT32 T0.X, T0.X,98; CYPRESS-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,99; CYPRESS-NEXT:    2(2.802597e-45), 0(0.000000e+00)100;101; CAYMAN-LABEL: test_convert_fp16_to_fp32:102; CAYMAN:       ; %bb.0:103; CAYMAN-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]104; CAYMAN-NEXT:    TEX 0 @6105; CAYMAN-NEXT:    ALU 2, @9, KC0[CB0:0-32], KC1[]106; CAYMAN-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T0.X, T1.X107; CAYMAN-NEXT:    CF_END108; CAYMAN-NEXT:    PAD109; CAYMAN-NEXT:    Fetch clause starting at 6:110; CAYMAN-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1111; CAYMAN-NEXT:    ALU clause starting at 8:112; CAYMAN-NEXT:     MOV * T0.X, KC0[2].Z,113; CAYMAN-NEXT:    ALU clause starting at 9:114; CAYMAN-NEXT:     FLT16_TO_FLT32 * T0.X, T0.X,115; CAYMAN-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,116; CAYMAN-NEXT:    2(2.802597e-45), 0(0.000000e+00)117  %val = load i16, ptr addrspace(1) %in, align 2118  %cvt = call float @llvm.convert.from.fp16.f32(i16 %val) nounwind readnone119  store float %cvt, ptr addrspace(1) %out, align 4120  ret void121}122