501 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=SI %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji -mattr=-flat-for-global < %s | FileCheck -check-prefixes=VI %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global,+real-true16 < %s | FileCheck -check-prefixes=GFX11-TRUE16 %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global,-real-true16 < %s | FileCheck -check-prefixes=GFX11-FAKE16 %s6 7define amdgpu_kernel void @sitofp_i16_to_f16(8; SI-LABEL: sitofp_i16_to_f16:9; SI: ; %bb.0: ; %entry10; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x911; SI-NEXT: s_mov_b32 s7, 0xf00012; SI-NEXT: s_mov_b32 s6, -113; SI-NEXT: s_mov_b32 s10, s614; SI-NEXT: s_mov_b32 s11, s715; SI-NEXT: s_waitcnt lgkmcnt(0)16; SI-NEXT: s_mov_b32 s8, s217; SI-NEXT: s_mov_b32 s9, s318; SI-NEXT: buffer_load_sshort v0, off, s[8:11], 019; SI-NEXT: s_mov_b32 s4, s020; SI-NEXT: s_mov_b32 s5, s121; SI-NEXT: s_waitcnt vmcnt(0)22; SI-NEXT: v_cvt_f32_i32_e32 v0, v023; SI-NEXT: v_cvt_f16_f32_e32 v0, v024; SI-NEXT: buffer_store_short v0, off, s[4:7], 025; SI-NEXT: s_endpgm26;27; VI-LABEL: sitofp_i16_to_f16:28; VI: ; %bb.0: ; %entry29; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2430; VI-NEXT: s_mov_b32 s7, 0xf00031; VI-NEXT: s_mov_b32 s6, -132; VI-NEXT: s_mov_b32 s10, s633; VI-NEXT: s_mov_b32 s11, s734; VI-NEXT: s_waitcnt lgkmcnt(0)35; VI-NEXT: s_mov_b32 s8, s236; VI-NEXT: s_mov_b32 s9, s337; VI-NEXT: buffer_load_ushort v0, off, s[8:11], 038; VI-NEXT: s_mov_b32 s4, s039; VI-NEXT: s_mov_b32 s5, s140; VI-NEXT: s_waitcnt vmcnt(0)41; VI-NEXT: v_cvt_f16_i16_e32 v0, v042; VI-NEXT: buffer_store_short v0, off, s[4:7], 043; VI-NEXT: s_endpgm44;45; GFX11-TRUE16-LABEL: sitofp_i16_to_f16:46; GFX11-TRUE16: ; %bb.0: ; %entry47; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2448; GFX11-TRUE16-NEXT: s_mov_b32 s6, -149; GFX11-TRUE16-NEXT: s_mov_b32 s7, 0x3101600050; GFX11-TRUE16-NEXT: s_mov_b32 s10, s651; GFX11-TRUE16-NEXT: s_mov_b32 s11, s752; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)53; GFX11-TRUE16-NEXT: s_mov_b32 s8, s254; GFX11-TRUE16-NEXT: s_mov_b32 s9, s355; GFX11-TRUE16-NEXT: s_mov_b32 s4, s056; GFX11-TRUE16-NEXT: buffer_load_u16 v0, off, s[8:11], 057; GFX11-TRUE16-NEXT: s_mov_b32 s5, s158; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)59; GFX11-TRUE16-NEXT: v_cvt_f16_i16_e32 v0.l, v0.l60; GFX11-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 061; GFX11-TRUE16-NEXT: s_endpgm62;63; GFX11-FAKE16-LABEL: sitofp_i16_to_f16:64; GFX11-FAKE16: ; %bb.0: ; %entry65; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2466; GFX11-FAKE16-NEXT: s_mov_b32 s6, -167; GFX11-FAKE16-NEXT: s_mov_b32 s7, 0x3101600068; GFX11-FAKE16-NEXT: s_mov_b32 s10, s669; GFX11-FAKE16-NEXT: s_mov_b32 s11, s770; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)71; GFX11-FAKE16-NEXT: s_mov_b32 s8, s272; GFX11-FAKE16-NEXT: s_mov_b32 s9, s373; GFX11-FAKE16-NEXT: s_mov_b32 s4, s074; GFX11-FAKE16-NEXT: buffer_load_u16 v0, off, s[8:11], 075; GFX11-FAKE16-NEXT: s_mov_b32 s5, s176; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)77; GFX11-FAKE16-NEXT: v_cvt_f16_i16_e32 v0, v078; GFX11-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 079; GFX11-FAKE16-NEXT: s_endpgm80 ptr addrspace(1) %r,81 ptr addrspace(1) %a) {82entry:83 %a.val = load i16, ptr addrspace(1) %a84 %r.val = sitofp i16 %a.val to half85 store half %r.val, ptr addrspace(1) %r86 ret void87}88 89define amdgpu_kernel void @sitofp_i32_to_f16(90; SI-LABEL: sitofp_i32_to_f16:91; SI: ; %bb.0: ; %entry92; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x993; SI-NEXT: s_mov_b32 s7, 0xf00094; SI-NEXT: s_mov_b32 s6, -195; SI-NEXT: s_mov_b32 s10, s696; SI-NEXT: s_mov_b32 s11, s797; SI-NEXT: s_waitcnt lgkmcnt(0)98; SI-NEXT: s_mov_b32 s8, s299; SI-NEXT: s_mov_b32 s9, s3100; SI-NEXT: buffer_load_dword v0, off, s[8:11], 0101; SI-NEXT: s_mov_b32 s4, s0102; SI-NEXT: s_mov_b32 s5, s1103; SI-NEXT: s_waitcnt vmcnt(0)104; SI-NEXT: v_cvt_f32_i32_e32 v0, v0105; SI-NEXT: v_cvt_f16_f32_e32 v0, v0106; SI-NEXT: buffer_store_short v0, off, s[4:7], 0107; SI-NEXT: s_endpgm108;109; VI-LABEL: sitofp_i32_to_f16:110; VI: ; %bb.0: ; %entry111; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24112; VI-NEXT: s_mov_b32 s7, 0xf000113; VI-NEXT: s_mov_b32 s6, -1114; VI-NEXT: s_mov_b32 s10, s6115; VI-NEXT: s_mov_b32 s11, s7116; VI-NEXT: s_waitcnt lgkmcnt(0)117; VI-NEXT: s_mov_b32 s8, s2118; VI-NEXT: s_mov_b32 s9, s3119; VI-NEXT: buffer_load_dword v0, off, s[8:11], 0120; VI-NEXT: s_mov_b32 s4, s0121; VI-NEXT: s_mov_b32 s5, s1122; VI-NEXT: s_waitcnt vmcnt(0)123; VI-NEXT: v_cvt_f32_i32_e32 v0, v0124; VI-NEXT: v_cvt_f16_f32_e32 v0, v0125; VI-NEXT: buffer_store_short v0, off, s[4:7], 0126; VI-NEXT: s_endpgm127;128; GFX11-TRUE16-LABEL: sitofp_i32_to_f16:129; GFX11-TRUE16: ; %bb.0: ; %entry130; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24131; GFX11-TRUE16-NEXT: s_mov_b32 s6, -1132; GFX11-TRUE16-NEXT: s_mov_b32 s7, 0x31016000133; GFX11-TRUE16-NEXT: s_mov_b32 s10, s6134; GFX11-TRUE16-NEXT: s_mov_b32 s11, s7135; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)136; GFX11-TRUE16-NEXT: s_mov_b32 s8, s2137; GFX11-TRUE16-NEXT: s_mov_b32 s9, s3138; GFX11-TRUE16-NEXT: s_mov_b32 s4, s0139; GFX11-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 0140; GFX11-TRUE16-NEXT: s_mov_b32 s5, s1141; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)142; GFX11-TRUE16-NEXT: v_cvt_f32_i32_e32 v0, v0143; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)144; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v0145; GFX11-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 0146; GFX11-TRUE16-NEXT: s_endpgm147;148; GFX11-FAKE16-LABEL: sitofp_i32_to_f16:149; GFX11-FAKE16: ; %bb.0: ; %entry150; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24151; GFX11-FAKE16-NEXT: s_mov_b32 s6, -1152; GFX11-FAKE16-NEXT: s_mov_b32 s7, 0x31016000153; GFX11-FAKE16-NEXT: s_mov_b32 s10, s6154; GFX11-FAKE16-NEXT: s_mov_b32 s11, s7155; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)156; GFX11-FAKE16-NEXT: s_mov_b32 s8, s2157; GFX11-FAKE16-NEXT: s_mov_b32 s9, s3158; GFX11-FAKE16-NEXT: s_mov_b32 s4, s0159; GFX11-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 0160; GFX11-FAKE16-NEXT: s_mov_b32 s5, s1161; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)162; GFX11-FAKE16-NEXT: v_cvt_f32_i32_e32 v0, v0163; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)164; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0165; GFX11-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 0166; GFX11-FAKE16-NEXT: s_endpgm167 ptr addrspace(1) %r,168 ptr addrspace(1) %a) {169entry:170 %a.val = load i32, ptr addrspace(1) %a171 %r.val = sitofp i32 %a.val to half172 store half %r.val, ptr addrspace(1) %r173 ret void174}175 176; f16 = sitofp i64 is in sint_to_fp.i64.ll177 178define amdgpu_kernel void @sitofp_v2i16_to_v2f16(179; SI-LABEL: sitofp_v2i16_to_v2f16:180; SI: ; %bb.0: ; %entry181; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9182; SI-NEXT: s_mov_b32 s7, 0xf000183; SI-NEXT: s_mov_b32 s6, -1184; SI-NEXT: s_mov_b32 s10, s6185; SI-NEXT: s_mov_b32 s11, s7186; SI-NEXT: s_waitcnt lgkmcnt(0)187; SI-NEXT: s_mov_b32 s8, s2188; SI-NEXT: s_mov_b32 s9, s3189; SI-NEXT: buffer_load_dword v0, off, s[8:11], 0190; SI-NEXT: s_mov_b32 s4, s0191; SI-NEXT: s_mov_b32 s5, s1192; SI-NEXT: s_waitcnt vmcnt(0)193; SI-NEXT: v_bfe_i32 v1, v0, 0, 16194; SI-NEXT: v_ashrrev_i32_e32 v0, 16, v0195; SI-NEXT: v_cvt_f32_i32_e32 v0, v0196; SI-NEXT: v_cvt_f32_i32_e32 v1, v1197; SI-NEXT: v_cvt_f16_f32_e32 v0, v0198; SI-NEXT: v_cvt_f16_f32_e32 v1, v1199; SI-NEXT: v_lshlrev_b32_e32 v0, 16, v0200; SI-NEXT: v_or_b32_e32 v0, v1, v0201; SI-NEXT: buffer_store_dword v0, off, s[4:7], 0202; SI-NEXT: s_endpgm203;204; VI-LABEL: sitofp_v2i16_to_v2f16:205; VI: ; %bb.0: ; %entry206; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24207; VI-NEXT: s_mov_b32 s7, 0xf000208; VI-NEXT: s_mov_b32 s6, -1209; VI-NEXT: s_mov_b32 s10, s6210; VI-NEXT: s_mov_b32 s11, s7211; VI-NEXT: s_waitcnt lgkmcnt(0)212; VI-NEXT: s_mov_b32 s8, s2213; VI-NEXT: s_mov_b32 s9, s3214; VI-NEXT: buffer_load_dword v0, off, s[8:11], 0215; VI-NEXT: s_mov_b32 s4, s0216; VI-NEXT: s_mov_b32 s5, s1217; VI-NEXT: s_waitcnt vmcnt(0)218; VI-NEXT: v_cvt_f16_i16_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1219; VI-NEXT: v_cvt_f16_i16_e32 v0, v0220; VI-NEXT: v_or_b32_e32 v0, v0, v1221; VI-NEXT: buffer_store_dword v0, off, s[4:7], 0222; VI-NEXT: s_endpgm223;224; GFX11-TRUE16-LABEL: sitofp_v2i16_to_v2f16:225; GFX11-TRUE16: ; %bb.0: ; %entry226; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24227; GFX11-TRUE16-NEXT: s_mov_b32 s6, -1228; GFX11-TRUE16-NEXT: s_mov_b32 s7, 0x31016000229; GFX11-TRUE16-NEXT: s_mov_b32 s10, s6230; GFX11-TRUE16-NEXT: s_mov_b32 s11, s7231; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)232; GFX11-TRUE16-NEXT: s_mov_b32 s8, s2233; GFX11-TRUE16-NEXT: s_mov_b32 s9, s3234; GFX11-TRUE16-NEXT: s_mov_b32 s4, s0235; GFX11-TRUE16-NEXT: buffer_load_b32 v0, off, s[8:11], 0236; GFX11-TRUE16-NEXT: s_mov_b32 s5, s1237; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)238; GFX11-TRUE16-NEXT: v_lshrrev_b32_e32 v1, 16, v0239; GFX11-TRUE16-NEXT: v_cvt_f16_i16_e32 v0.l, v0.l240; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)241; GFX11-TRUE16-NEXT: v_cvt_f16_i16_e32 v0.h, v1.l242; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h243; GFX11-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], 0244; GFX11-TRUE16-NEXT: s_endpgm245;246; GFX11-FAKE16-LABEL: sitofp_v2i16_to_v2f16:247; GFX11-FAKE16: ; %bb.0: ; %entry248; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24249; GFX11-FAKE16-NEXT: s_mov_b32 s6, -1250; GFX11-FAKE16-NEXT: s_mov_b32 s7, 0x31016000251; GFX11-FAKE16-NEXT: s_mov_b32 s10, s6252; GFX11-FAKE16-NEXT: s_mov_b32 s11, s7253; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)254; GFX11-FAKE16-NEXT: s_mov_b32 s8, s2255; GFX11-FAKE16-NEXT: s_mov_b32 s9, s3256; GFX11-FAKE16-NEXT: s_mov_b32 s4, s0257; GFX11-FAKE16-NEXT: buffer_load_b32 v0, off, s[8:11], 0258; GFX11-FAKE16-NEXT: s_mov_b32 s5, s1259; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)260; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v0261; GFX11-FAKE16-NEXT: v_cvt_f16_i16_e32 v0, v0262; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)263; GFX11-FAKE16-NEXT: v_cvt_f16_i16_e32 v1, v1264; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v1265; GFX11-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 0266; GFX11-FAKE16-NEXT: s_endpgm267 ptr addrspace(1) %r,268 ptr addrspace(1) %a) {269entry:270 %a.val = load <2 x i16>, ptr addrspace(1) %a271 %r.val = sitofp <2 x i16> %a.val to <2 x half>272 store <2 x half> %r.val, ptr addrspace(1) %r273 ret void274}275 276define amdgpu_kernel void @sitofp_v2i32_to_v2f16(277; SI-LABEL: sitofp_v2i32_to_v2f16:278; SI: ; %bb.0: ; %entry279; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9280; SI-NEXT: s_mov_b32 s7, 0xf000281; SI-NEXT: s_mov_b32 s6, -1282; SI-NEXT: s_mov_b32 s10, s6283; SI-NEXT: s_mov_b32 s11, s7284; SI-NEXT: s_waitcnt lgkmcnt(0)285; SI-NEXT: s_mov_b32 s8, s2286; SI-NEXT: s_mov_b32 s9, s3287; SI-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 0288; SI-NEXT: s_mov_b32 s4, s0289; SI-NEXT: s_mov_b32 s5, s1290; SI-NEXT: s_waitcnt vmcnt(0)291; SI-NEXT: v_cvt_f32_i32_e32 v1, v1292; SI-NEXT: v_cvt_f32_i32_e32 v0, v0293; SI-NEXT: v_cvt_f16_f32_e32 v1, v1294; SI-NEXT: v_cvt_f16_f32_e32 v0, v0295; SI-NEXT: v_lshlrev_b32_e32 v1, 16, v1296; SI-NEXT: v_or_b32_e32 v0, v0, v1297; SI-NEXT: buffer_store_dword v0, off, s[4:7], 0298; SI-NEXT: s_endpgm299;300; VI-LABEL: sitofp_v2i32_to_v2f16:301; VI: ; %bb.0: ; %entry302; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24303; VI-NEXT: s_mov_b32 s7, 0xf000304; VI-NEXT: s_mov_b32 s6, -1305; VI-NEXT: s_mov_b32 s10, s6306; VI-NEXT: s_mov_b32 s11, s7307; VI-NEXT: s_waitcnt lgkmcnt(0)308; VI-NEXT: s_mov_b32 s8, s2309; VI-NEXT: s_mov_b32 s9, s3310; VI-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 0311; VI-NEXT: s_mov_b32 s4, s0312; VI-NEXT: s_mov_b32 s5, s1313; VI-NEXT: s_waitcnt vmcnt(0)314; VI-NEXT: v_cvt_f32_i32_e32 v1, v1315; VI-NEXT: v_cvt_f32_i32_e32 v0, v0316; VI-NEXT: v_cvt_f16_f32_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD317; VI-NEXT: v_cvt_f16_f32_e32 v0, v0318; VI-NEXT: v_or_b32_e32 v0, v0, v1319; VI-NEXT: buffer_store_dword v0, off, s[4:7], 0320; VI-NEXT: s_endpgm321;322; GFX11-TRUE16-LABEL: sitofp_v2i32_to_v2f16:323; GFX11-TRUE16: ; %bb.0: ; %entry324; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24325; GFX11-TRUE16-NEXT: s_mov_b32 s6, -1326; GFX11-TRUE16-NEXT: s_mov_b32 s7, 0x31016000327; GFX11-TRUE16-NEXT: s_mov_b32 s10, s6328; GFX11-TRUE16-NEXT: s_mov_b32 s11, s7329; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)330; GFX11-TRUE16-NEXT: s_mov_b32 s8, s2331; GFX11-TRUE16-NEXT: s_mov_b32 s9, s3332; GFX11-TRUE16-NEXT: s_mov_b32 s4, s0333; GFX11-TRUE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], 0334; GFX11-TRUE16-NEXT: s_mov_b32 s5, s1335; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)336; GFX11-TRUE16-NEXT: v_cvt_f32_i32_e32 v1, v1337; GFX11-TRUE16-NEXT: v_cvt_f32_i32_e32 v2, v0338; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)339; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v1340; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.h, v2341; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)342; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.h, v0.l343; GFX11-TRUE16-NEXT: buffer_store_b32 v0, off, s[4:7], 0344; GFX11-TRUE16-NEXT: s_endpgm345;346; GFX11-FAKE16-LABEL: sitofp_v2i32_to_v2f16:347; GFX11-FAKE16: ; %bb.0: ; %entry348; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24349; GFX11-FAKE16-NEXT: s_mov_b32 s6, -1350; GFX11-FAKE16-NEXT: s_mov_b32 s7, 0x31016000351; GFX11-FAKE16-NEXT: s_mov_b32 s10, s6352; GFX11-FAKE16-NEXT: s_mov_b32 s11, s7353; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)354; GFX11-FAKE16-NEXT: s_mov_b32 s8, s2355; GFX11-FAKE16-NEXT: s_mov_b32 s9, s3356; GFX11-FAKE16-NEXT: s_mov_b32 s4, s0357; GFX11-FAKE16-NEXT: buffer_load_b64 v[0:1], off, s[8:11], 0358; GFX11-FAKE16-NEXT: s_mov_b32 s5, s1359; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)360; GFX11-FAKE16-NEXT: v_cvt_f32_i32_e32 v1, v1361; GFX11-FAKE16-NEXT: v_cvt_f32_i32_e32 v0, v0362; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)363; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, v1364; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0365; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)366; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v1367; GFX11-FAKE16-NEXT: buffer_store_b32 v0, off, s[4:7], 0368; GFX11-FAKE16-NEXT: s_endpgm369 ptr addrspace(1) %r,370 ptr addrspace(1) %a) {371entry:372 %a.val = load <2 x i32>, ptr addrspace(1) %a373 %r.val = sitofp <2 x i32> %a.val to <2 x half>374 store <2 x half> %r.val, ptr addrspace(1) %r375 ret void376}377 378define amdgpu_kernel void @s_sint_to_fp_i1_to_f16(ptr addrspace(1) %out, ptr addrspace(1) %in0, ptr addrspace(1) %in1) {379; SI-LABEL: s_sint_to_fp_i1_to_f16:380; SI: ; %bb.0:381; SI-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x9382; SI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd383; SI-NEXT: s_mov_b32 s3, 0xf000384; SI-NEXT: s_mov_b32 s2, -1385; SI-NEXT: s_mov_b32 s6, s2386; SI-NEXT: s_mov_b32 s7, s3387; SI-NEXT: s_waitcnt lgkmcnt(0)388; SI-NEXT: s_mov_b32 s12, s10389; SI-NEXT: s_mov_b32 s13, s11390; SI-NEXT: s_mov_b32 s14, s2391; SI-NEXT: s_mov_b32 s15, s3392; SI-NEXT: buffer_load_dword v0, off, s[4:7], 0393; SI-NEXT: buffer_load_dword v1, off, s[12:15], 0394; SI-NEXT: s_waitcnt vmcnt(1)395; SI-NEXT: v_cmp_le_f32_e32 vcc, 1.0, v0396; SI-NEXT: s_waitcnt vmcnt(0)397; SI-NEXT: v_cmp_le_f32_e64 s[0:1], 0, v1398; SI-NEXT: s_xor_b64 s[0:1], s[0:1], vcc399; SI-NEXT: v_cndmask_b32_e64 v0, 0, -1.0, s[0:1]400; SI-NEXT: v_cvt_f16_f32_e32 v0, v0401; SI-NEXT: s_mov_b32 s0, s8402; SI-NEXT: s_mov_b32 s1, s9403; SI-NEXT: buffer_store_short v0, off, s[0:3], 0404; SI-NEXT: s_endpgm405;406; VI-LABEL: s_sint_to_fp_i1_to_f16:407; VI: ; %bb.0:408; VI-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24409; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34410; VI-NEXT: s_mov_b32 s3, 0xf000411; VI-NEXT: s_mov_b32 s2, -1412; VI-NEXT: s_mov_b32 s6, s2413; VI-NEXT: s_mov_b32 s7, s3414; VI-NEXT: s_waitcnt lgkmcnt(0)415; VI-NEXT: s_mov_b32 s12, s10416; VI-NEXT: s_mov_b32 s13, s11417; VI-NEXT: s_mov_b32 s14, s2418; VI-NEXT: s_mov_b32 s15, s3419; VI-NEXT: buffer_load_dword v0, off, s[4:7], 0420; VI-NEXT: buffer_load_dword v1, off, s[12:15], 0421; VI-NEXT: s_waitcnt vmcnt(1)422; VI-NEXT: v_cmp_le_f32_e32 vcc, 1.0, v0423; VI-NEXT: s_waitcnt vmcnt(0)424; VI-NEXT: v_cmp_le_f32_e64 s[0:1], 0, v1425; VI-NEXT: s_xor_b64 s[0:1], s[0:1], vcc426; VI-NEXT: v_cndmask_b32_e64 v0, 0, -1.0, s[0:1]427; VI-NEXT: v_cvt_f16_f32_e32 v0, v0428; VI-NEXT: s_mov_b32 s0, s8429; VI-NEXT: s_mov_b32 s1, s9430; VI-NEXT: buffer_store_short v0, off, s[0:3], 0431; VI-NEXT: s_endpgm432;433; GFX11-TRUE16-LABEL: s_sint_to_fp_i1_to_f16:434; GFX11-TRUE16: ; %bb.0:435; GFX11-TRUE16-NEXT: s_clause 0x1436; GFX11-TRUE16-NEXT: s_load_b128 s[8:11], s[4:5], 0x24437; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x34438; GFX11-TRUE16-NEXT: s_mov_b32 s6, -1439; GFX11-TRUE16-NEXT: s_mov_b32 s7, 0x31016000440; GFX11-TRUE16-NEXT: s_mov_b32 s2, s6441; GFX11-TRUE16-NEXT: s_mov_b32 s3, s7442; GFX11-TRUE16-NEXT: s_mov_b32 s14, s6443; GFX11-TRUE16-NEXT: s_mov_b32 s15, s7444; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)445; GFX11-TRUE16-NEXT: s_mov_b32 s12, s10446; GFX11-TRUE16-NEXT: s_mov_b32 s13, s11447; GFX11-TRUE16-NEXT: buffer_load_b32 v0, off, s[0:3], 0448; GFX11-TRUE16-NEXT: buffer_load_b32 v1, off, s[12:15], 0449; GFX11-TRUE16-NEXT: s_mov_b32 s4, s8450; GFX11-TRUE16-NEXT: s_mov_b32 s5, s9451; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)452; GFX11-TRUE16-NEXT: v_cmp_le_f32_e32 vcc_lo, 1.0, v0453; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)454; GFX11-TRUE16-NEXT: v_cmp_le_f32_e64 s0, 0, v1455; GFX11-TRUE16-NEXT: s_xor_b32 s0, s0, vcc_lo456; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)457; GFX11-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, -1.0, s0458; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v0459; GFX11-TRUE16-NEXT: buffer_store_b16 v0, off, s[4:7], 0460; GFX11-TRUE16-NEXT: s_endpgm461;462; GFX11-FAKE16-LABEL: s_sint_to_fp_i1_to_f16:463; GFX11-FAKE16: ; %bb.0:464; GFX11-FAKE16-NEXT: s_clause 0x1465; GFX11-FAKE16-NEXT: s_load_b128 s[8:11], s[4:5], 0x24466; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x34467; GFX11-FAKE16-NEXT: s_mov_b32 s6, -1468; GFX11-FAKE16-NEXT: s_mov_b32 s7, 0x31016000469; GFX11-FAKE16-NEXT: s_mov_b32 s2, s6470; GFX11-FAKE16-NEXT: s_mov_b32 s3, s7471; GFX11-FAKE16-NEXT: s_mov_b32 s14, s6472; GFX11-FAKE16-NEXT: s_mov_b32 s15, s7473; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)474; GFX11-FAKE16-NEXT: s_mov_b32 s12, s10475; GFX11-FAKE16-NEXT: s_mov_b32 s13, s11476; GFX11-FAKE16-NEXT: buffer_load_b32 v0, off, s[0:3], 0477; GFX11-FAKE16-NEXT: buffer_load_b32 v1, off, s[12:15], 0478; GFX11-FAKE16-NEXT: s_mov_b32 s4, s8479; GFX11-FAKE16-NEXT: s_mov_b32 s5, s9480; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)481; GFX11-FAKE16-NEXT: v_cmp_le_f32_e32 vcc_lo, 1.0, v0482; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)483; GFX11-FAKE16-NEXT: v_cmp_le_f32_e64 s0, 0, v1484; GFX11-FAKE16-NEXT: s_xor_b32 s0, s0, vcc_lo485; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)486; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, -1.0, s0487; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0488; GFX11-FAKE16-NEXT: buffer_store_b16 v0, off, s[4:7], 0489; GFX11-FAKE16-NEXT: s_endpgm490 %a = load float, ptr addrspace(1) %in0491 %b = load float, ptr addrspace(1) %in1492 %acmp = fcmp oge float %a, 0.000000e+00493 %bcmp = fcmp oge float %b, 1.000000e+00494 %result = xor i1 %acmp, %bcmp495 %fp = sitofp i1 %result to half496 store half %fp, ptr addrspace(1) %out497 ret void498}499 500; v2f16 = sitofp v2i64 is in sint_to_fp.i64.ll501