978 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn < %s | FileCheck --check-prefixes=GFX6 %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck --check-prefixes=GFX8 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck --check-prefixes=GFX11,GFX11-TRUE16 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck --check-prefixes=GFX11,GFX11-FAKE16 %s6 7; FIXME: This should be merged with uint_to_fp.ll, but s_uint_to_fp_v2i64 crashes on r6008 9define amdgpu_kernel void @s_uint_to_fp_i64_to_f16(ptr addrspace(1) %out, i64 %in) #0 {10; GFX6-LABEL: s_uint_to_fp_i64_to_f16:11; GFX6: ; %bb.0:12; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x913; GFX6-NEXT: s_mov_b32 s7, 0xf00014; GFX6-NEXT: s_mov_b32 s6, -115; GFX6-NEXT: s_waitcnt lgkmcnt(0)16; GFX6-NEXT: s_mov_b32 s4, s017; GFX6-NEXT: s_mov_b32 s5, s118; GFX6-NEXT: s_flbit_i32_b32 s0, s319; GFX6-NEXT: s_min_u32 s8, s0, 3220; GFX6-NEXT: s_lshl_b64 s[0:1], s[2:3], s821; GFX6-NEXT: s_min_u32 s0, s0, 122; GFX6-NEXT: s_or_b32 s0, s1, s023; GFX6-NEXT: v_cvt_f32_u32_e32 v0, s024; GFX6-NEXT: s_sub_i32 s0, 32, s825; GFX6-NEXT: v_ldexp_f32_e64 v0, v0, s026; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v027; GFX6-NEXT: buffer_store_short v0, off, s[4:7], 028; GFX6-NEXT: s_endpgm29;30; GFX8-LABEL: s_uint_to_fp_i64_to_f16:31; GFX8: ; %bb.0:32; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2433; GFX8-NEXT: s_waitcnt lgkmcnt(0)34; GFX8-NEXT: s_flbit_i32_b32 s4, s335; GFX8-NEXT: s_min_u32 s4, s4, 3236; GFX8-NEXT: s_lshl_b64 s[2:3], s[2:3], s437; GFX8-NEXT: s_min_u32 s2, s2, 138; GFX8-NEXT: s_or_b32 s2, s3, s239; GFX8-NEXT: v_cvt_f32_u32_e32 v0, s240; GFX8-NEXT: s_sub_i32 s2, 32, s441; GFX8-NEXT: v_mov_b32_e32 v1, s142; GFX8-NEXT: v_ldexp_f32 v0, v0, s243; GFX8-NEXT: v_cvt_f16_f32_e32 v2, v044; GFX8-NEXT: v_mov_b32_e32 v0, s045; GFX8-NEXT: flat_store_short v[0:1], v246; GFX8-NEXT: s_endpgm47;48; GFX11-TRUE16-LABEL: s_uint_to_fp_i64_to_f16:49; GFX11-TRUE16: ; %bb.0:50; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2451; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 052; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)53; GFX11-TRUE16-NEXT: s_clz_i32_u32 s4, s354; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)55; GFX11-TRUE16-NEXT: s_min_u32 s4, s4, 3256; GFX11-TRUE16-NEXT: s_lshl_b64 s[2:3], s[2:3], s457; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)58; GFX11-TRUE16-NEXT: s_min_u32 s2, s2, 159; GFX11-TRUE16-NEXT: s_or_b32 s2, s3, s260; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)61; GFX11-TRUE16-NEXT: v_cvt_f32_u32_e32 v0, s262; GFX11-TRUE16-NEXT: s_sub_i32 s2, 32, s463; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)64; GFX11-TRUE16-NEXT: v_ldexp_f32 v0, v0, s265; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)66; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v067; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]68; GFX11-TRUE16-NEXT: s_endpgm69;70; GFX11-FAKE16-LABEL: s_uint_to_fp_i64_to_f16:71; GFX11-FAKE16: ; %bb.0:72; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x2473; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, 074; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)75; GFX11-FAKE16-NEXT: s_clz_i32_u32 s4, s376; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)77; GFX11-FAKE16-NEXT: s_min_u32 s4, s4, 3278; GFX11-FAKE16-NEXT: s_lshl_b64 s[2:3], s[2:3], s479; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)80; GFX11-FAKE16-NEXT: s_min_u32 s2, s2, 181; GFX11-FAKE16-NEXT: s_or_b32 s2, s3, s282; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)83; GFX11-FAKE16-NEXT: v_cvt_f32_u32_e32 v0, s284; GFX11-FAKE16-NEXT: s_sub_i32 s2, 32, s485; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)86; GFX11-FAKE16-NEXT: v_ldexp_f32 v0, v0, s287; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)88; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v089; GFX11-FAKE16-NEXT: global_store_b16 v1, v0, s[0:1]90; GFX11-FAKE16-NEXT: s_endpgm91 %result = uitofp i64 %in to half92 store half %result, ptr addrspace(1) %out93 ret void94}95 96define amdgpu_kernel void @v_uint_to_fp_i64_to_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {97; GFX6-LABEL: v_uint_to_fp_i64_to_f16:98; GFX6: ; %bb.0:99; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9100; GFX6-NEXT: s_mov_b32 s7, 0xf000101; GFX6-NEXT: s_mov_b32 s6, 0102; GFX6-NEXT: v_lshlrev_b32_e32 v1, 3, v0103; GFX6-NEXT: v_mov_b32_e32 v2, 0104; GFX6-NEXT: s_waitcnt lgkmcnt(0)105; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]106; GFX6-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64107; GFX6-NEXT: v_lshlrev_b32_e32 v1, 1, v0108; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]109; GFX6-NEXT: s_waitcnt vmcnt(0)110; GFX6-NEXT: v_ffbh_u32_e32 v0, v4111; GFX6-NEXT: v_min_u32_e32 v0, 32, v0112; GFX6-NEXT: v_lshl_b64 v[3:4], v[3:4], v0113; GFX6-NEXT: v_min_u32_e32 v3, 1, v3114; GFX6-NEXT: v_or_b32_e32 v3, v4, v3115; GFX6-NEXT: v_cvt_f32_u32_e32 v3, v3116; GFX6-NEXT: v_sub_i32_e32 v0, vcc, 32, v0117; GFX6-NEXT: v_ldexp_f32_e32 v0, v3, v0118; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0119; GFX6-NEXT: buffer_store_short v0, v[1:2], s[0:3], 0 addr64120; GFX6-NEXT: s_endpgm121;122; GFX8-LABEL: v_uint_to_fp_i64_to_f16:123; GFX8: ; %bb.0:124; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24125; GFX8-NEXT: v_lshlrev_b32_e32 v1, 3, v0126; GFX8-NEXT: v_lshlrev_b32_e32 v0, 1, v0127; GFX8-NEXT: s_waitcnt lgkmcnt(0)128; GFX8-NEXT: v_mov_b32_e32 v2, s3129; GFX8-NEXT: v_add_u32_e32 v1, vcc, s2, v1130; GFX8-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc131; GFX8-NEXT: flat_load_dwordx2 v[1:2], v[1:2]132; GFX8-NEXT: s_waitcnt vmcnt(0)133; GFX8-NEXT: v_ffbh_u32_e32 v3, v2134; GFX8-NEXT: v_min_u32_e32 v3, 32, v3135; GFX8-NEXT: v_lshlrev_b64 v[1:2], v3, v[1:2]136; GFX8-NEXT: v_sub_u32_e32 v3, vcc, 32, v3137; GFX8-NEXT: v_min_u32_e32 v1, 1, v1138; GFX8-NEXT: v_or_b32_e32 v1, v2, v1139; GFX8-NEXT: v_cvt_f32_u32_e32 v1, v1140; GFX8-NEXT: v_mov_b32_e32 v2, s1141; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v0142; GFX8-NEXT: v_ldexp_f32 v1, v1, v3143; GFX8-NEXT: v_cvt_f16_f32_e32 v3, v1144; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v2, vcc145; GFX8-NEXT: flat_store_short v[0:1], v3146; GFX8-NEXT: s_endpgm147;148; GFX11-TRUE16-LABEL: v_uint_to_fp_i64_to_f16:149; GFX11-TRUE16: ; %bb.0:150; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24151; GFX11-TRUE16-NEXT: v_and_b32_e32 v2, 0x3ff, v0152; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)153; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 3, v2154; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)155; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v0, s[2:3]156; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)157; GFX11-TRUE16-NEXT: v_clz_i32_u32_e32 v3, v1158; GFX11-TRUE16-NEXT: v_min_u32_e32 v3, 32, v3159; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)160; GFX11-TRUE16-NEXT: v_lshlrev_b64 v[0:1], v3, v[0:1]161; GFX11-TRUE16-NEXT: v_min_u32_e32 v0, 1, v0162; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)163; GFX11-TRUE16-NEXT: v_or_b32_e32 v0, v1, v0164; GFX11-TRUE16-NEXT: v_sub_nc_u32_e32 v1, 32, v3165; GFX11-TRUE16-NEXT: v_cvt_f32_u32_e32 v0, v0166; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)167; GFX11-TRUE16-NEXT: v_ldexp_f32 v0, v0, v1168; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v1, 1, v2169; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v0170; GFX11-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]171; GFX11-TRUE16-NEXT: s_endpgm172;173; GFX11-FAKE16-LABEL: v_uint_to_fp_i64_to_f16:174; GFX11-FAKE16: ; %bb.0:175; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24176; GFX11-FAKE16-NEXT: v_and_b32_e32 v2, 0x3ff, v0177; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)178; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 3, v2179; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)180; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v0, s[2:3]181; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)182; GFX11-FAKE16-NEXT: v_clz_i32_u32_e32 v3, v1183; GFX11-FAKE16-NEXT: v_min_u32_e32 v3, 32, v3184; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)185; GFX11-FAKE16-NEXT: v_lshlrev_b64 v[0:1], v3, v[0:1]186; GFX11-FAKE16-NEXT: v_min_u32_e32 v0, 1, v0187; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)188; GFX11-FAKE16-NEXT: v_or_b32_e32 v0, v1, v0189; GFX11-FAKE16-NEXT: v_sub_nc_u32_e32 v1, 32, v3190; GFX11-FAKE16-NEXT: v_cvt_f32_u32_e32 v0, v0191; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)192; GFX11-FAKE16-NEXT: v_ldexp_f32 v0, v0, v1193; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 1, v2194; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0195; GFX11-FAKE16-NEXT: global_store_b16 v1, v0, s[0:1]196; GFX11-FAKE16-NEXT: s_endpgm197 %tid = call i32 @llvm.amdgcn.workitem.id.x()198 %in.gep = getelementptr i64, ptr addrspace(1) %in, i32 %tid199 %out.gep = getelementptr half, ptr addrspace(1) %out, i32 %tid200 %val = load i64, ptr addrspace(1) %in.gep201 %result = uitofp i64 %val to half202 store half %result, ptr addrspace(1) %out.gep203 ret void204}205 206define amdgpu_kernel void @s_uint_to_fp_i64_to_f32(ptr addrspace(1) %out, i64 %in) #0 {207; GFX6-LABEL: s_uint_to_fp_i64_to_f32:208; GFX6: ; %bb.0:209; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9210; GFX6-NEXT: s_mov_b32 s7, 0xf000211; GFX6-NEXT: s_mov_b32 s6, -1212; GFX6-NEXT: s_waitcnt lgkmcnt(0)213; GFX6-NEXT: s_mov_b32 s4, s0214; GFX6-NEXT: s_mov_b32 s5, s1215; GFX6-NEXT: s_flbit_i32_b32 s0, s3216; GFX6-NEXT: s_min_u32 s8, s0, 32217; GFX6-NEXT: s_lshl_b64 s[0:1], s[2:3], s8218; GFX6-NEXT: s_min_u32 s0, s0, 1219; GFX6-NEXT: s_or_b32 s0, s1, s0220; GFX6-NEXT: v_cvt_f32_u32_e32 v0, s0221; GFX6-NEXT: s_sub_i32 s0, 32, s8222; GFX6-NEXT: v_ldexp_f32_e64 v0, v0, s0223; GFX6-NEXT: buffer_store_dword v0, off, s[4:7], 0224; GFX6-NEXT: s_endpgm225;226; GFX8-LABEL: s_uint_to_fp_i64_to_f32:227; GFX8: ; %bb.0:228; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24229; GFX8-NEXT: s_waitcnt lgkmcnt(0)230; GFX8-NEXT: s_flbit_i32_b32 s4, s3231; GFX8-NEXT: s_min_u32 s4, s4, 32232; GFX8-NEXT: s_lshl_b64 s[2:3], s[2:3], s4233; GFX8-NEXT: s_min_u32 s2, s2, 1234; GFX8-NEXT: s_or_b32 s2, s3, s2235; GFX8-NEXT: v_cvt_f32_u32_e32 v2, s2236; GFX8-NEXT: v_mov_b32_e32 v0, s0237; GFX8-NEXT: s_sub_i32 s0, 32, s4238; GFX8-NEXT: v_mov_b32_e32 v1, s1239; GFX8-NEXT: v_ldexp_f32 v2, v2, s0240; GFX8-NEXT: flat_store_dword v[0:1], v2241; GFX8-NEXT: s_endpgm242;243; GFX11-LABEL: s_uint_to_fp_i64_to_f32:244; GFX11: ; %bb.0:245; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24246; GFX11-NEXT: v_mov_b32_e32 v1, 0247; GFX11-NEXT: s_waitcnt lgkmcnt(0)248; GFX11-NEXT: s_clz_i32_u32 s4, s3249; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)250; GFX11-NEXT: s_min_u32 s4, s4, 32251; GFX11-NEXT: s_lshl_b64 s[2:3], s[2:3], s4252; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)253; GFX11-NEXT: s_min_u32 s2, s2, 1254; GFX11-NEXT: s_or_b32 s2, s3, s2255; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)256; GFX11-NEXT: v_cvt_f32_u32_e32 v0, s2257; GFX11-NEXT: s_sub_i32 s2, 32, s4258; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)259; GFX11-NEXT: v_ldexp_f32 v0, v0, s2260; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]261; GFX11-NEXT: s_endpgm262 %result = uitofp i64 %in to float263 store float %result, ptr addrspace(1) %out264 ret void265}266 267define amdgpu_kernel void @v_uint_to_fp_i64_to_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {268; GFX6-LABEL: v_uint_to_fp_i64_to_f32:269; GFX6: ; %bb.0:270; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9271; GFX6-NEXT: s_mov_b32 s7, 0xf000272; GFX6-NEXT: s_mov_b32 s6, 0273; GFX6-NEXT: v_lshlrev_b32_e32 v1, 3, v0274; GFX6-NEXT: v_mov_b32_e32 v2, 0275; GFX6-NEXT: s_waitcnt lgkmcnt(0)276; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]277; GFX6-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64278; GFX6-NEXT: v_lshlrev_b32_e32 v1, 2, v0279; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]280; GFX6-NEXT: s_waitcnt vmcnt(0)281; GFX6-NEXT: v_ffbh_u32_e32 v0, v4282; GFX6-NEXT: v_min_u32_e32 v0, 32, v0283; GFX6-NEXT: v_lshl_b64 v[3:4], v[3:4], v0284; GFX6-NEXT: v_min_u32_e32 v3, 1, v3285; GFX6-NEXT: v_or_b32_e32 v3, v4, v3286; GFX6-NEXT: v_cvt_f32_u32_e32 v3, v3287; GFX6-NEXT: v_sub_i32_e32 v0, vcc, 32, v0288; GFX6-NEXT: v_ldexp_f32_e32 v0, v3, v0289; GFX6-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64290; GFX6-NEXT: s_endpgm291;292; GFX8-LABEL: v_uint_to_fp_i64_to_f32:293; GFX8: ; %bb.0:294; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24295; GFX8-NEXT: v_lshlrev_b32_e32 v1, 3, v0296; GFX8-NEXT: v_lshlrev_b32_e32 v3, 2, v0297; GFX8-NEXT: s_waitcnt lgkmcnt(0)298; GFX8-NEXT: v_mov_b32_e32 v2, s3299; GFX8-NEXT: v_add_u32_e32 v1, vcc, s2, v1300; GFX8-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc301; GFX8-NEXT: flat_load_dwordx2 v[1:2], v[1:2]302; GFX8-NEXT: s_waitcnt vmcnt(0)303; GFX8-NEXT: v_ffbh_u32_e32 v0, v2304; GFX8-NEXT: v_min_u32_e32 v4, 32, v0305; GFX8-NEXT: v_lshlrev_b64 v[0:1], v4, v[1:2]306; GFX8-NEXT: v_mov_b32_e32 v2, s1307; GFX8-NEXT: v_min_u32_e32 v0, 1, v0308; GFX8-NEXT: v_or_b32_e32 v0, v1, v0309; GFX8-NEXT: v_cvt_f32_u32_e32 v5, v0310; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v3311; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v2, vcc312; GFX8-NEXT: v_sub_u32_e32 v2, vcc, 32, v4313; GFX8-NEXT: v_ldexp_f32 v2, v5, v2314; GFX8-NEXT: flat_store_dword v[0:1], v2315; GFX8-NEXT: s_endpgm316;317; GFX11-LABEL: v_uint_to_fp_i64_to_f32:318; GFX11: ; %bb.0:319; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24320; GFX11-NEXT: v_and_b32_e32 v2, 0x3ff, v0321; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)322; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v2323; GFX11-NEXT: v_lshlrev_b32_e32 v2, 2, v2324; GFX11-NEXT: s_waitcnt lgkmcnt(0)325; GFX11-NEXT: global_load_b64 v[0:1], v0, s[2:3]326; GFX11-NEXT: s_waitcnt vmcnt(0)327; GFX11-NEXT: v_clz_i32_u32_e32 v3, v1328; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)329; GFX11-NEXT: v_min_u32_e32 v3, 32, v3330; GFX11-NEXT: v_lshlrev_b64 v[0:1], v3, v[0:1]331; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)332; GFX11-NEXT: v_min_u32_e32 v0, 1, v0333; GFX11-NEXT: v_or_b32_e32 v0, v1, v0334; GFX11-NEXT: v_sub_nc_u32_e32 v1, 32, v3335; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)336; GFX11-NEXT: v_cvt_f32_u32_e32 v0, v0337; GFX11-NEXT: v_ldexp_f32 v0, v0, v1338; GFX11-NEXT: global_store_b32 v2, v0, s[0:1]339; GFX11-NEXT: s_endpgm340 %tid = call i32 @llvm.amdgcn.workitem.id.x()341 %in.gep = getelementptr i64, ptr addrspace(1) %in, i32 %tid342 %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid343 %val = load i64, ptr addrspace(1) %in.gep344 %result = uitofp i64 %val to float345 store float %result, ptr addrspace(1) %out.gep346 ret void347}348 349define amdgpu_kernel void @s_uint_to_fp_v2i64_to_v2f32(ptr addrspace(1) %out, <2 x i64> %in) #0{350; GFX6-LABEL: s_uint_to_fp_v2i64_to_v2f32:351; GFX6: ; %bb.0:352; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0xd353; GFX6-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9354; GFX6-NEXT: s_mov_b32 s7, 0xf000355; GFX6-NEXT: s_mov_b32 s6, -1356; GFX6-NEXT: s_waitcnt lgkmcnt(0)357; GFX6-NEXT: s_flbit_i32_b32 s8, s3358; GFX6-NEXT: s_flbit_i32_b32 s9, s1359; GFX6-NEXT: s_min_u32 s8, s8, 32360; GFX6-NEXT: s_min_u32 s9, s9, 32361; GFX6-NEXT: s_lshl_b64 s[2:3], s[2:3], s8362; GFX6-NEXT: s_sub_i32 s8, 32, s8363; GFX6-NEXT: s_lshl_b64 s[0:1], s[0:1], s9364; GFX6-NEXT: s_sub_i32 s9, 32, s9365; GFX6-NEXT: s_min_u32 s2, s2, 1366; GFX6-NEXT: s_min_u32 s0, s0, 1367; GFX6-NEXT: s_or_b32 s2, s3, s2368; GFX6-NEXT: s_or_b32 s0, s1, s0369; GFX6-NEXT: v_cvt_f32_u32_e32 v0, s2370; GFX6-NEXT: v_cvt_f32_u32_e32 v2, s0371; GFX6-NEXT: v_ldexp_f32_e64 v1, v0, s8372; GFX6-NEXT: v_ldexp_f32_e64 v0, v2, s9373; GFX6-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0374; GFX6-NEXT: s_endpgm375;376; GFX8-LABEL: s_uint_to_fp_v2i64_to_v2f32:377; GFX8: ; %bb.0:378; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x34379; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24380; GFX8-NEXT: s_waitcnt lgkmcnt(0)381; GFX8-NEXT: s_flbit_i32_b32 s6, s3382; GFX8-NEXT: s_flbit_i32_b32 s7, s1383; GFX8-NEXT: s_min_u32 s6, s6, 32384; GFX8-NEXT: s_min_u32 s7, s7, 32385; GFX8-NEXT: s_lshl_b64 s[2:3], s[2:3], s6386; GFX8-NEXT: s_lshl_b64 s[0:1], s[0:1], s7387; GFX8-NEXT: s_min_u32 s2, s2, 1388; GFX8-NEXT: s_or_b32 s2, s3, s2389; GFX8-NEXT: s_min_u32 s0, s0, 1390; GFX8-NEXT: v_cvt_f32_u32_e32 v0, s2391; GFX8-NEXT: s_or_b32 s0, s1, s0392; GFX8-NEXT: v_cvt_f32_u32_e32 v2, s0393; GFX8-NEXT: s_sub_i32 s0, 32, s6394; GFX8-NEXT: v_ldexp_f32 v1, v0, s0395; GFX8-NEXT: s_sub_i32 s0, 32, s7396; GFX8-NEXT: v_ldexp_f32 v0, v2, s0397; GFX8-NEXT: v_mov_b32_e32 v2, s4398; GFX8-NEXT: v_mov_b32_e32 v3, s5399; GFX8-NEXT: flat_store_dwordx2 v[2:3], v[0:1]400; GFX8-NEXT: s_endpgm401;402; GFX11-LABEL: s_uint_to_fp_v2i64_to_v2f32:403; GFX11: ; %bb.0:404; GFX11-NEXT: s_clause 0x1405; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x34406; GFX11-NEXT: s_load_b64 s[4:5], s[4:5], 0x24407; GFX11-NEXT: v_mov_b32_e32 v3, 0408; GFX11-NEXT: s_waitcnt lgkmcnt(0)409; GFX11-NEXT: s_clz_i32_u32 s6, s3410; GFX11-NEXT: s_clz_i32_u32 s7, s1411; GFX11-NEXT: s_min_u32 s6, s6, 32412; GFX11-NEXT: s_min_u32 s7, s7, 32413; GFX11-NEXT: s_lshl_b64 s[2:3], s[2:3], s6414; GFX11-NEXT: s_lshl_b64 s[0:1], s[0:1], s7415; GFX11-NEXT: s_min_u32 s2, s2, 1416; GFX11-NEXT: s_min_u32 s0, s0, 1417; GFX11-NEXT: s_or_b32 s2, s3, s2418; GFX11-NEXT: s_or_b32 s0, s1, s0419; GFX11-NEXT: v_cvt_f32_u32_e32 v0, s2420; GFX11-NEXT: v_cvt_f32_u32_e32 v2, s0421; GFX11-NEXT: s_sub_i32 s0, 32, s6422; GFX11-NEXT: s_sub_i32 s1, 32, s7423; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)424; GFX11-NEXT: v_ldexp_f32 v1, v0, s0425; GFX11-NEXT: v_ldexp_f32 v0, v2, s1426; GFX11-NEXT: global_store_b64 v3, v[0:1], s[4:5]427; GFX11-NEXT: s_endpgm428 %result = uitofp <2 x i64> %in to <2 x float>429 store <2 x float> %result, ptr addrspace(1) %out430 ret void431}432 433define amdgpu_kernel void @v_uint_to_fp_v4i64_to_v4f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {434; GFX6-LABEL: v_uint_to_fp_v4i64_to_v4f32:435; GFX6: ; %bb.0:436; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9437; GFX6-NEXT: s_mov_b32 s7, 0xf000438; GFX6-NEXT: s_mov_b32 s6, 0439; GFX6-NEXT: v_lshlrev_b32_e32 v8, 5, v0440; GFX6-NEXT: v_mov_b32_e32 v9, 0441; GFX6-NEXT: s_waitcnt lgkmcnt(0)442; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]443; GFX6-NEXT: buffer_load_dwordx4 v[1:4], v[8:9], s[4:7], 0 addr64 offset:16444; GFX6-NEXT: buffer_load_dwordx4 v[5:8], v[8:9], s[4:7], 0 addr64445; GFX6-NEXT: v_lshlrev_b32_e32 v10, 4, v0446; GFX6-NEXT: v_mov_b32_e32 v11, v9447; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]448; GFX6-NEXT: s_waitcnt vmcnt(1)449; GFX6-NEXT: v_ffbh_u32_e32 v0, v4450; GFX6-NEXT: v_ffbh_u32_e32 v9, v2451; GFX6-NEXT: s_waitcnt vmcnt(0)452; GFX6-NEXT: v_ffbh_u32_e32 v12, v8453; GFX6-NEXT: v_ffbh_u32_e32 v13, v6454; GFX6-NEXT: v_min_u32_e32 v0, 32, v0455; GFX6-NEXT: v_min_u32_e32 v9, 32, v9456; GFX6-NEXT: v_min_u32_e32 v12, 32, v12457; GFX6-NEXT: v_min_u32_e32 v13, 32, v13458; GFX6-NEXT: v_lshl_b64 v[3:4], v[3:4], v0459; GFX6-NEXT: v_sub_i32_e32 v14, vcc, 32, v0460; GFX6-NEXT: v_lshl_b64 v[0:1], v[1:2], v9461; GFX6-NEXT: v_sub_i32_e32 v2, vcc, 32, v9462; GFX6-NEXT: v_lshl_b64 v[7:8], v[7:8], v12463; GFX6-NEXT: v_sub_i32_e32 v9, vcc, 32, v12464; GFX6-NEXT: v_lshl_b64 v[5:6], v[5:6], v13465; GFX6-NEXT: v_sub_i32_e32 v12, vcc, 32, v13466; GFX6-NEXT: v_min_u32_e32 v3, 1, v3467; GFX6-NEXT: v_min_u32_e32 v0, 1, v0468; GFX6-NEXT: v_min_u32_e32 v7, 1, v7469; GFX6-NEXT: v_min_u32_e32 v5, 1, v5470; GFX6-NEXT: v_or_b32_e32 v3, v4, v3471; GFX6-NEXT: v_or_b32_e32 v0, v1, v0472; GFX6-NEXT: v_or_b32_e32 v1, v8, v7473; GFX6-NEXT: v_or_b32_e32 v4, v6, v5474; GFX6-NEXT: v_cvt_f32_u32_e32 v3, v3475; GFX6-NEXT: v_cvt_f32_u32_e32 v0, v0476; GFX6-NEXT: v_cvt_f32_u32_e32 v1, v1477; GFX6-NEXT: v_cvt_f32_u32_e32 v4, v4478; GFX6-NEXT: v_ldexp_f32_e32 v3, v3, v14479; GFX6-NEXT: v_ldexp_f32_e32 v2, v0, v2480; GFX6-NEXT: v_ldexp_f32_e32 v1, v1, v9481; GFX6-NEXT: v_ldexp_f32_e32 v0, v4, v12482; GFX6-NEXT: buffer_store_dwordx4 v[0:3], v[10:11], s[0:3], 0 addr64483; GFX6-NEXT: s_endpgm484;485; GFX8-LABEL: v_uint_to_fp_v4i64_to_v4f32:486; GFX8: ; %bb.0:487; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24488; GFX8-NEXT: v_lshlrev_b32_e32 v1, 5, v0489; GFX8-NEXT: v_lshlrev_b32_e32 v0, 4, v0490; GFX8-NEXT: s_waitcnt lgkmcnt(0)491; GFX8-NEXT: v_mov_b32_e32 v2, s3492; GFX8-NEXT: v_add_u32_e32 v5, vcc, s2, v1493; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v2, vcc494; GFX8-NEXT: flat_load_dwordx4 v[1:4], v[5:6]495; GFX8-NEXT: v_add_u32_e32 v5, vcc, 16, v5496; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v6, vcc497; GFX8-NEXT: flat_load_dwordx4 v[5:8], v[5:6]498; GFX8-NEXT: v_add_u32_e32 v9, vcc, s0, v0499; GFX8-NEXT: v_mov_b32_e32 v10, s1500; GFX8-NEXT: v_addc_u32_e32 v10, vcc, 0, v10, vcc501; GFX8-NEXT: s_waitcnt vmcnt(1)502; GFX8-NEXT: v_ffbh_u32_e32 v0, v4503; GFX8-NEXT: v_ffbh_u32_e32 v11, v2504; GFX8-NEXT: v_min_u32_e32 v0, 32, v0505; GFX8-NEXT: v_min_u32_e32 v11, 32, v11506; GFX8-NEXT: v_lshlrev_b64 v[3:4], v0, v[3:4]507; GFX8-NEXT: s_waitcnt vmcnt(0)508; GFX8-NEXT: v_ffbh_u32_e32 v12, v8509; GFX8-NEXT: v_ffbh_u32_e32 v13, v6510; GFX8-NEXT: v_min_u32_e32 v12, 32, v12511; GFX8-NEXT: v_min_u32_e32 v13, 32, v13512; GFX8-NEXT: v_sub_u32_e32 v14, vcc, 32, v0513; GFX8-NEXT: v_lshlrev_b64 v[0:1], v11, v[1:2]514; GFX8-NEXT: v_lshlrev_b64 v[7:8], v12, v[7:8]515; GFX8-NEXT: v_lshlrev_b64 v[5:6], v13, v[5:6]516; GFX8-NEXT: v_min_u32_e32 v3, 1, v3517; GFX8-NEXT: v_min_u32_e32 v0, 1, v0518; GFX8-NEXT: v_min_u32_e32 v7, 1, v7519; GFX8-NEXT: v_min_u32_e32 v5, 1, v5520; GFX8-NEXT: v_or_b32_e32 v3, v4, v3521; GFX8-NEXT: v_or_b32_e32 v0, v1, v0522; GFX8-NEXT: v_or_b32_e32 v1, v8, v7523; GFX8-NEXT: v_or_b32_e32 v4, v6, v5524; GFX8-NEXT: v_cvt_f32_u32_e32 v3, v3525; GFX8-NEXT: v_cvt_f32_u32_e32 v0, v0526; GFX8-NEXT: v_cvt_f32_u32_e32 v5, v1527; GFX8-NEXT: v_cvt_f32_u32_e32 v4, v4528; GFX8-NEXT: v_sub_u32_e32 v2, vcc, 32, v11529; GFX8-NEXT: v_sub_u32_e32 v11, vcc, 32, v12530; GFX8-NEXT: v_sub_u32_e32 v12, vcc, 32, v13531; GFX8-NEXT: v_ldexp_f32 v1, v3, v14532; GFX8-NEXT: v_ldexp_f32 v0, v0, v2533; GFX8-NEXT: v_ldexp_f32 v3, v5, v11534; GFX8-NEXT: v_ldexp_f32 v2, v4, v12535; GFX8-NEXT: flat_store_dwordx4 v[9:10], v[0:3]536; GFX8-NEXT: s_endpgm537;538; GFX11-LABEL: v_uint_to_fp_v4i64_to_v4f32:539; GFX11: ; %bb.0:540; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24541; GFX11-NEXT: v_and_b32_e32 v8, 0x3ff, v0542; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)543; GFX11-NEXT: v_lshlrev_b32_e32 v4, 5, v8544; GFX11-NEXT: s_waitcnt lgkmcnt(0)545; GFX11-NEXT: s_clause 0x1546; GFX11-NEXT: global_load_b128 v[0:3], v4, s[2:3] offset:16547; GFX11-NEXT: global_load_b128 v[4:7], v4, s[2:3]548; GFX11-NEXT: s_waitcnt vmcnt(1)549; GFX11-NEXT: v_clz_i32_u32_e32 v9, v3550; GFX11-NEXT: v_clz_i32_u32_e32 v10, v1551; GFX11-NEXT: s_waitcnt vmcnt(0)552; GFX11-NEXT: v_clz_i32_u32_e32 v11, v7553; GFX11-NEXT: v_clz_i32_u32_e32 v12, v5554; GFX11-NEXT: v_min_u32_e32 v9, 32, v9555; GFX11-NEXT: v_min_u32_e32 v10, 32, v10556; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)557; GFX11-NEXT: v_min_u32_e32 v11, 32, v11558; GFX11-NEXT: v_min_u32_e32 v12, 32, v12559; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)560; GFX11-NEXT: v_lshlrev_b64 v[2:3], v9, v[2:3]561; GFX11-NEXT: v_lshlrev_b64 v[0:1], v10, v[0:1]562; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)563; GFX11-NEXT: v_lshlrev_b64 v[6:7], v11, v[6:7]564; GFX11-NEXT: v_lshlrev_b64 v[4:5], v12, v[4:5]565; GFX11-NEXT: v_sub_nc_u32_e32 v9, 32, v9566; GFX11-NEXT: v_sub_nc_u32_e32 v10, 32, v10567; GFX11-NEXT: v_min_u32_e32 v2, 1, v2568; GFX11-NEXT: v_min_u32_e32 v0, 1, v0569; GFX11-NEXT: v_min_u32_e32 v6, 1, v6570; GFX11-NEXT: v_min_u32_e32 v4, 1, v4571; GFX11-NEXT: v_sub_nc_u32_e32 v11, 32, v11572; GFX11-NEXT: v_or_b32_e32 v2, v3, v2573; GFX11-NEXT: v_or_b32_e32 v0, v1, v0574; GFX11-NEXT: v_or_b32_e32 v1, v7, v6575; GFX11-NEXT: v_or_b32_e32 v3, v5, v4576; GFX11-NEXT: v_sub_nc_u32_e32 v4, 32, v12577; GFX11-NEXT: v_cvt_f32_u32_e32 v2, v2578; GFX11-NEXT: v_cvt_f32_u32_e32 v0, v0579; GFX11-NEXT: v_cvt_f32_u32_e32 v1, v1580; GFX11-NEXT: v_cvt_f32_u32_e32 v5, v3581; GFX11-NEXT: v_lshlrev_b32_e32 v6, 4, v8582; GFX11-NEXT: v_ldexp_f32 v3, v2, v9583; GFX11-NEXT: v_ldexp_f32 v2, v0, v10584; GFX11-NEXT: v_ldexp_f32 v1, v1, v11585; GFX11-NEXT: v_ldexp_f32 v0, v5, v4586; GFX11-NEXT: global_store_b128 v6, v[0:3], s[0:1]587; GFX11-NEXT: s_endpgm588 %tid = call i32 @llvm.amdgcn.workitem.id.x()589 %in.gep = getelementptr <4 x i64>, ptr addrspace(1) %in, i32 %tid590 %out.gep = getelementptr <4 x float>, ptr addrspace(1) %out, i32 %tid591 %value = load <4 x i64>, ptr addrspace(1) %in.gep592 %result = uitofp <4 x i64> %value to <4 x float>593 store <4 x float> %result, ptr addrspace(1) %out.gep594 ret void595}596 597define amdgpu_kernel void @s_uint_to_fp_v2i64_to_v2f16(ptr addrspace(1) %out, <2 x i64> %in) #0{598; GFX6-LABEL: s_uint_to_fp_v2i64_to_v2f16:599; GFX6: ; %bb.0:600; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0xd601; GFX6-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9602; GFX6-NEXT: s_mov_b32 s7, 0xf000603; GFX6-NEXT: s_mov_b32 s6, -1604; GFX6-NEXT: s_waitcnt lgkmcnt(0)605; GFX6-NEXT: s_flbit_i32_b32 s8, s3606; GFX6-NEXT: s_flbit_i32_b32 s9, s1607; GFX6-NEXT: s_min_u32 s8, s8, 32608; GFX6-NEXT: s_min_u32 s9, s9, 32609; GFX6-NEXT: s_lshl_b64 s[2:3], s[2:3], s8610; GFX6-NEXT: s_sub_i32 s8, 32, s8611; GFX6-NEXT: s_lshl_b64 s[0:1], s[0:1], s9612; GFX6-NEXT: s_sub_i32 s9, 32, s9613; GFX6-NEXT: s_min_u32 s2, s2, 1614; GFX6-NEXT: s_min_u32 s0, s0, 1615; GFX6-NEXT: s_or_b32 s2, s3, s2616; GFX6-NEXT: s_or_b32 s0, s1, s0617; GFX6-NEXT: v_cvt_f32_u32_e32 v0, s2618; GFX6-NEXT: v_cvt_f32_u32_e32 v1, s0619; GFX6-NEXT: v_ldexp_f32_e64 v0, v0, s8620; GFX6-NEXT: v_ldexp_f32_e64 v1, v1, s9621; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0622; GFX6-NEXT: v_lshlrev_b32_e32 v0, 16, v0623; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1624; GFX6-NEXT: v_or_b32_e32 v0, v1, v0625; GFX6-NEXT: buffer_store_dword v0, off, s[4:7], 0626; GFX6-NEXT: s_endpgm627;628; GFX8-LABEL: s_uint_to_fp_v2i64_to_v2f16:629; GFX8: ; %bb.0:630; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x34631; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24632; GFX8-NEXT: s_waitcnt lgkmcnt(0)633; GFX8-NEXT: s_flbit_i32_b32 s6, s3634; GFX8-NEXT: s_flbit_i32_b32 s7, s1635; GFX8-NEXT: s_min_u32 s6, s6, 32636; GFX8-NEXT: s_min_u32 s7, s7, 32637; GFX8-NEXT: s_lshl_b64 s[2:3], s[2:3], s6638; GFX8-NEXT: s_lshl_b64 s[0:1], s[0:1], s7639; GFX8-NEXT: s_min_u32 s2, s2, 1640; GFX8-NEXT: s_min_u32 s0, s0, 1641; GFX8-NEXT: s_or_b32 s2, s3, s2642; GFX8-NEXT: s_or_b32 s0, s1, s0643; GFX8-NEXT: v_cvt_f32_u32_e32 v0, s2644; GFX8-NEXT: v_cvt_f32_u32_e32 v1, s0645; GFX8-NEXT: s_sub_i32 s6, 32, s6646; GFX8-NEXT: s_sub_i32 s0, 32, s7647; GFX8-NEXT: v_ldexp_f32 v0, v0, s6648; GFX8-NEXT: v_ldexp_f32 v1, v1, s0649; GFX8-NEXT: v_cvt_f16_f32_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD650; GFX8-NEXT: v_cvt_f16_f32_e32 v1, v1651; GFX8-NEXT: v_or_b32_e32 v2, v1, v0652; GFX8-NEXT: v_mov_b32_e32 v0, s4653; GFX8-NEXT: v_mov_b32_e32 v1, s5654; GFX8-NEXT: flat_store_dword v[0:1], v2655; GFX8-NEXT: s_endpgm656;657; GFX11-TRUE16-LABEL: s_uint_to_fp_v2i64_to_v2f16:658; GFX11-TRUE16: ; %bb.0:659; GFX11-TRUE16-NEXT: s_clause 0x1660; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x34661; GFX11-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x24662; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)663; GFX11-TRUE16-NEXT: s_clz_i32_u32 s6, s3664; GFX11-TRUE16-NEXT: s_clz_i32_u32 s7, s1665; GFX11-TRUE16-NEXT: s_min_u32 s6, s6, 32666; GFX11-TRUE16-NEXT: s_min_u32 s7, s7, 32667; GFX11-TRUE16-NEXT: s_lshl_b64 s[2:3], s[2:3], s6668; GFX11-TRUE16-NEXT: s_lshl_b64 s[0:1], s[0:1], s7669; GFX11-TRUE16-NEXT: s_min_u32 s2, s2, 1670; GFX11-TRUE16-NEXT: s_min_u32 s0, s0, 1671; GFX11-TRUE16-NEXT: s_or_b32 s2, s3, s2672; GFX11-TRUE16-NEXT: s_or_b32 s0, s1, s0673; GFX11-TRUE16-NEXT: v_cvt_f32_u32_e32 v0, s2674; GFX11-TRUE16-NEXT: v_cvt_f32_u32_e32 v1, s0675; GFX11-TRUE16-NEXT: s_sub_i32 s0, 32, s6676; GFX11-TRUE16-NEXT: s_sub_i32 s1, 32, s7677; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)678; GFX11-TRUE16-NEXT: v_ldexp_f32 v0, v0, s0679; GFX11-TRUE16-NEXT: v_ldexp_f32 v1, v1, s1680; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)681; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v0682; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.h, v1683; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, 0684; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)685; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.h, v0.l686; GFX11-TRUE16-NEXT: global_store_b32 v1, v0, s[4:5]687; GFX11-TRUE16-NEXT: s_endpgm688;689; GFX11-FAKE16-LABEL: s_uint_to_fp_v2i64_to_v2f16:690; GFX11-FAKE16: ; %bb.0:691; GFX11-FAKE16-NEXT: s_clause 0x1692; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x34693; GFX11-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x24694; GFX11-FAKE16-NEXT: v_mov_b32_e32 v2, 0695; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)696; GFX11-FAKE16-NEXT: s_clz_i32_u32 s6, s3697; GFX11-FAKE16-NEXT: s_clz_i32_u32 s7, s1698; GFX11-FAKE16-NEXT: s_min_u32 s6, s6, 32699; GFX11-FAKE16-NEXT: s_min_u32 s7, s7, 32700; GFX11-FAKE16-NEXT: s_lshl_b64 s[2:3], s[2:3], s6701; GFX11-FAKE16-NEXT: s_lshl_b64 s[0:1], s[0:1], s7702; GFX11-FAKE16-NEXT: s_min_u32 s2, s2, 1703; GFX11-FAKE16-NEXT: s_min_u32 s0, s0, 1704; GFX11-FAKE16-NEXT: s_or_b32 s2, s3, s2705; GFX11-FAKE16-NEXT: s_or_b32 s0, s1, s0706; GFX11-FAKE16-NEXT: v_cvt_f32_u32_e32 v0, s2707; GFX11-FAKE16-NEXT: v_cvt_f32_u32_e32 v1, s0708; GFX11-FAKE16-NEXT: s_sub_i32 s0, 32, s6709; GFX11-FAKE16-NEXT: s_sub_i32 s1, 32, s7710; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)711; GFX11-FAKE16-NEXT: v_ldexp_f32 v0, v0, s0712; GFX11-FAKE16-NEXT: v_ldexp_f32 v1, v1, s1713; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)714; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0715; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v1, v1716; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)717; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v1, v0718; GFX11-FAKE16-NEXT: global_store_b32 v2, v0, s[4:5]719; GFX11-FAKE16-NEXT: s_endpgm720 %result = uitofp <2 x i64> %in to <2 x half>721 store <2 x half> %result, ptr addrspace(1) %out722 ret void723}724 725define amdgpu_kernel void @v_uint_to_fp_v4i64_to_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {726; GFX6-LABEL: v_uint_to_fp_v4i64_to_v4f16:727; GFX6: ; %bb.0:728; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9729; GFX6-NEXT: s_mov_b32 s7, 0xf000730; GFX6-NEXT: s_mov_b32 s6, 0731; GFX6-NEXT: v_lshlrev_b32_e32 v8, 5, v0732; GFX6-NEXT: v_mov_b32_e32 v9, 0733; GFX6-NEXT: s_waitcnt lgkmcnt(0)734; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]735; GFX6-NEXT: buffer_load_dwordx4 v[1:4], v[8:9], s[4:7], 0 addr64 offset:16736; GFX6-NEXT: buffer_load_dwordx4 v[5:8], v[8:9], s[4:7], 0 addr64737; GFX6-NEXT: v_lshlrev_b32_e32 v10, 3, v0738; GFX6-NEXT: v_mov_b32_e32 v11, v9739; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]740; GFX6-NEXT: s_waitcnt vmcnt(1)741; GFX6-NEXT: v_ffbh_u32_e32 v0, v4742; GFX6-NEXT: v_ffbh_u32_e32 v9, v2743; GFX6-NEXT: s_waitcnt vmcnt(0)744; GFX6-NEXT: v_ffbh_u32_e32 v12, v8745; GFX6-NEXT: v_ffbh_u32_e32 v13, v6746; GFX6-NEXT: v_min_u32_e32 v0, 32, v0747; GFX6-NEXT: v_min_u32_e32 v9, 32, v9748; GFX6-NEXT: v_min_u32_e32 v12, 32, v12749; GFX6-NEXT: v_min_u32_e32 v13, 32, v13750; GFX6-NEXT: v_lshl_b64 v[3:4], v[3:4], v0751; GFX6-NEXT: v_sub_i32_e32 v14, vcc, 32, v0752; GFX6-NEXT: v_lshl_b64 v[0:1], v[1:2], v9753; GFX6-NEXT: v_sub_i32_e32 v2, vcc, 32, v9754; GFX6-NEXT: v_lshl_b64 v[7:8], v[7:8], v12755; GFX6-NEXT: v_sub_i32_e32 v9, vcc, 32, v12756; GFX6-NEXT: v_lshl_b64 v[5:6], v[5:6], v13757; GFX6-NEXT: v_sub_i32_e32 v12, vcc, 32, v13758; GFX6-NEXT: v_min_u32_e32 v3, 1, v3759; GFX6-NEXT: v_min_u32_e32 v0, 1, v0760; GFX6-NEXT: v_min_u32_e32 v7, 1, v7761; GFX6-NEXT: v_min_u32_e32 v5, 1, v5762; GFX6-NEXT: v_or_b32_e32 v3, v4, v3763; GFX6-NEXT: v_or_b32_e32 v0, v1, v0764; GFX6-NEXT: v_or_b32_e32 v1, v8, v7765; GFX6-NEXT: v_or_b32_e32 v4, v6, v5766; GFX6-NEXT: v_cvt_f32_u32_e32 v3, v3767; GFX6-NEXT: v_cvt_f32_u32_e32 v0, v0768; GFX6-NEXT: v_cvt_f32_u32_e32 v1, v1769; GFX6-NEXT: v_cvt_f32_u32_e32 v4, v4770; GFX6-NEXT: v_ldexp_f32_e32 v3, v3, v14771; GFX6-NEXT: v_ldexp_f32_e32 v0, v0, v2772; GFX6-NEXT: v_ldexp_f32_e32 v1, v1, v9773; GFX6-NEXT: v_ldexp_f32_e32 v2, v4, v12774; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3775; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0776; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1777; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2778; GFX6-NEXT: v_lshlrev_b32_e32 v3, 16, v3779; GFX6-NEXT: v_lshlrev_b32_e32 v4, 16, v1780; GFX6-NEXT: v_or_b32_e32 v1, v0, v3781; GFX6-NEXT: v_or_b32_e32 v0, v2, v4782; GFX6-NEXT: buffer_store_dwordx2 v[0:1], v[10:11], s[0:3], 0 addr64783; GFX6-NEXT: s_endpgm784;785; GFX8-LABEL: v_uint_to_fp_v4i64_to_v4f16:786; GFX8: ; %bb.0:787; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24788; GFX8-NEXT: v_lshlrev_b32_e32 v1, 5, v0789; GFX8-NEXT: v_lshlrev_b32_e32 v9, 3, v0790; GFX8-NEXT: s_waitcnt lgkmcnt(0)791; GFX8-NEXT: v_mov_b32_e32 v2, s3792; GFX8-NEXT: v_add_u32_e32 v5, vcc, s2, v1793; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v2, vcc794; GFX8-NEXT: flat_load_dwordx4 v[1:4], v[5:6]795; GFX8-NEXT: v_add_u32_e32 v5, vcc, 16, v5796; GFX8-NEXT: v_addc_u32_e32 v6, vcc, 0, v6, vcc797; GFX8-NEXT: flat_load_dwordx4 v[5:8], v[5:6]798; GFX8-NEXT: v_mov_b32_e32 v10, s1799; GFX8-NEXT: s_waitcnt vmcnt(1)800; GFX8-NEXT: v_ffbh_u32_e32 v0, v4801; GFX8-NEXT: v_ffbh_u32_e32 v11, v2802; GFX8-NEXT: v_min_u32_e32 v0, 32, v0803; GFX8-NEXT: v_min_u32_e32 v11, 32, v11804; GFX8-NEXT: v_lshlrev_b64 v[3:4], v0, v[3:4]805; GFX8-NEXT: s_waitcnt vmcnt(0)806; GFX8-NEXT: v_ffbh_u32_e32 v12, v8807; GFX8-NEXT: v_ffbh_u32_e32 v13, v6808; GFX8-NEXT: v_min_u32_e32 v12, 32, v12809; GFX8-NEXT: v_min_u32_e32 v13, 32, v13810; GFX8-NEXT: v_sub_u32_e32 v14, vcc, 32, v0811; GFX8-NEXT: v_lshlrev_b64 v[0:1], v11, v[1:2]812; GFX8-NEXT: v_lshlrev_b64 v[7:8], v12, v[7:8]813; GFX8-NEXT: v_lshlrev_b64 v[5:6], v13, v[5:6]814; GFX8-NEXT: v_min_u32_e32 v3, 1, v3815; GFX8-NEXT: v_min_u32_e32 v0, 1, v0816; GFX8-NEXT: v_min_u32_e32 v7, 1, v7817; GFX8-NEXT: v_min_u32_e32 v5, 1, v5818; GFX8-NEXT: v_or_b32_e32 v3, v4, v3819; GFX8-NEXT: v_or_b32_e32 v0, v1, v0820; GFX8-NEXT: v_or_b32_e32 v1, v8, v7821; GFX8-NEXT: v_or_b32_e32 v4, v6, v5822; GFX8-NEXT: v_cvt_f32_u32_e32 v3, v3823; GFX8-NEXT: v_cvt_f32_u32_e32 v0, v0824; GFX8-NEXT: v_cvt_f32_u32_e32 v1, v1825; GFX8-NEXT: v_cvt_f32_u32_e32 v4, v4826; GFX8-NEXT: v_sub_u32_e32 v2, vcc, 32, v11827; GFX8-NEXT: v_sub_u32_e32 v11, vcc, 32, v12828; GFX8-NEXT: v_sub_u32_e32 v12, vcc, 32, v13829; GFX8-NEXT: v_ldexp_f32 v3, v3, v14830; GFX8-NEXT: v_ldexp_f32 v0, v0, v2831; GFX8-NEXT: v_ldexp_f32 v1, v1, v11832; GFX8-NEXT: v_ldexp_f32 v2, v4, v12833; GFX8-NEXT: v_cvt_f16_f32_sdwa v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD834; GFX8-NEXT: v_cvt_f16_f32_e32 v4, v0835; GFX8-NEXT: v_cvt_f16_f32_sdwa v5, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD836; GFX8-NEXT: v_cvt_f16_f32_e32 v6, v2837; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v9838; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v10, vcc839; GFX8-NEXT: v_or_b32_e32 v2, v4, v3840; GFX8-NEXT: v_or_b32_e32 v3, v6, v5841; GFX8-NEXT: flat_store_dwordx2 v[0:1], v[2:3]842; GFX8-NEXT: s_endpgm843;844; GFX11-TRUE16-LABEL: v_uint_to_fp_v4i64_to_v4f16:845; GFX11-TRUE16: ; %bb.0:846; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24847; GFX11-TRUE16-NEXT: v_and_b32_e32 v8, 0x3ff, v0848; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)849; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v4, 5, v8850; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)851; GFX11-TRUE16-NEXT: s_clause 0x1852; GFX11-TRUE16-NEXT: global_load_b128 v[0:3], v4, s[2:3] offset:16853; GFX11-TRUE16-NEXT: global_load_b128 v[4:7], v4, s[2:3]854; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)855; GFX11-TRUE16-NEXT: v_clz_i32_u32_e32 v9, v3856; GFX11-TRUE16-NEXT: v_clz_i32_u32_e32 v10, v1857; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)858; GFX11-TRUE16-NEXT: v_clz_i32_u32_e32 v11, v7859; GFX11-TRUE16-NEXT: v_clz_i32_u32_e32 v12, v5860; GFX11-TRUE16-NEXT: v_min_u32_e32 v9, 32, v9861; GFX11-TRUE16-NEXT: v_min_u32_e32 v10, 32, v10862; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)863; GFX11-TRUE16-NEXT: v_min_u32_e32 v11, 32, v11864; GFX11-TRUE16-NEXT: v_min_u32_e32 v12, 32, v12865; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)866; GFX11-TRUE16-NEXT: v_lshlrev_b64 v[2:3], v9, v[2:3]867; GFX11-TRUE16-NEXT: v_lshlrev_b64 v[0:1], v10, v[0:1]868; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)869; GFX11-TRUE16-NEXT: v_lshlrev_b64 v[6:7], v11, v[6:7]870; GFX11-TRUE16-NEXT: v_lshlrev_b64 v[4:5], v12, v[4:5]871; GFX11-TRUE16-NEXT: v_sub_nc_u32_e32 v9, 32, v9872; GFX11-TRUE16-NEXT: v_sub_nc_u32_e32 v10, 32, v10873; GFX11-TRUE16-NEXT: v_min_u32_e32 v2, 1, v2874; GFX11-TRUE16-NEXT: v_min_u32_e32 v0, 1, v0875; GFX11-TRUE16-NEXT: v_min_u32_e32 v6, 1, v6876; GFX11-TRUE16-NEXT: v_min_u32_e32 v4, 1, v4877; GFX11-TRUE16-NEXT: v_sub_nc_u32_e32 v11, 32, v11878; GFX11-TRUE16-NEXT: v_or_b32_e32 v2, v3, v2879; GFX11-TRUE16-NEXT: v_or_b32_e32 v0, v1, v0880; GFX11-TRUE16-NEXT: v_or_b32_e32 v1, v7, v6881; GFX11-TRUE16-NEXT: v_or_b32_e32 v3, v5, v4882; GFX11-TRUE16-NEXT: v_sub_nc_u32_e32 v4, 32, v12883; GFX11-TRUE16-NEXT: v_cvt_f32_u32_e32 v2, v2884; GFX11-TRUE16-NEXT: v_cvt_f32_u32_e32 v0, v0885; GFX11-TRUE16-NEXT: v_cvt_f32_u32_e32 v1, v1886; GFX11-TRUE16-NEXT: v_cvt_f32_u32_e32 v3, v3887; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)888; GFX11-TRUE16-NEXT: v_ldexp_f32 v2, v2, v9889; GFX11-TRUE16-NEXT: v_ldexp_f32 v5, v0, v10890; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)891; GFX11-TRUE16-NEXT: v_ldexp_f32 v1, v1, v11892; GFX11-TRUE16-NEXT: v_ldexp_f32 v3, v3, v4893; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)894; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.l, v2895; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v0.h, v5896; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)897; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v1.l, v1898; GFX11-TRUE16-NEXT: v_cvt_f16_f32_e32 v1.h, v3899; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v3, 3, v8900; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)901; GFX11-TRUE16-NEXT: v_pack_b32_f16 v2, v0.h, v0.l902; GFX11-TRUE16-NEXT: v_pack_b32_f16 v1, v1.h, v1.l903; GFX11-TRUE16-NEXT: global_store_b64 v3, v[1:2], s[0:1]904; GFX11-TRUE16-NEXT: s_endpgm905;906; GFX11-FAKE16-LABEL: v_uint_to_fp_v4i64_to_v4f16:907; GFX11-FAKE16: ; %bb.0:908; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24909; GFX11-FAKE16-NEXT: v_and_b32_e32 v8, 0x3ff, v0910; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)911; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v4, 5, v8912; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)913; GFX11-FAKE16-NEXT: s_clause 0x1914; GFX11-FAKE16-NEXT: global_load_b128 v[0:3], v4, s[2:3] offset:16915; GFX11-FAKE16-NEXT: global_load_b128 v[4:7], v4, s[2:3]916; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)917; GFX11-FAKE16-NEXT: v_clz_i32_u32_e32 v9, v3918; GFX11-FAKE16-NEXT: v_clz_i32_u32_e32 v10, v1919; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)920; GFX11-FAKE16-NEXT: v_clz_i32_u32_e32 v11, v7921; GFX11-FAKE16-NEXT: v_clz_i32_u32_e32 v12, v5922; GFX11-FAKE16-NEXT: v_min_u32_e32 v9, 32, v9923; GFX11-FAKE16-NEXT: v_min_u32_e32 v10, 32, v10924; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)925; GFX11-FAKE16-NEXT: v_min_u32_e32 v11, 32, v11926; GFX11-FAKE16-NEXT: v_min_u32_e32 v12, 32, v12927; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)928; GFX11-FAKE16-NEXT: v_lshlrev_b64 v[2:3], v9, v[2:3]929; GFX11-FAKE16-NEXT: v_lshlrev_b64 v[0:1], v10, v[0:1]930; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)931; GFX11-FAKE16-NEXT: v_lshlrev_b64 v[6:7], v11, v[6:7]932; GFX11-FAKE16-NEXT: v_lshlrev_b64 v[4:5], v12, v[4:5]933; GFX11-FAKE16-NEXT: v_sub_nc_u32_e32 v9, 32, v9934; GFX11-FAKE16-NEXT: v_sub_nc_u32_e32 v10, 32, v10935; GFX11-FAKE16-NEXT: v_min_u32_e32 v2, 1, v2936; GFX11-FAKE16-NEXT: v_min_u32_e32 v0, 1, v0937; GFX11-FAKE16-NEXT: v_min_u32_e32 v6, 1, v6938; GFX11-FAKE16-NEXT: v_min_u32_e32 v4, 1, v4939; GFX11-FAKE16-NEXT: v_sub_nc_u32_e32 v11, 32, v11940; GFX11-FAKE16-NEXT: v_or_b32_e32 v2, v3, v2941; GFX11-FAKE16-NEXT: v_or_b32_e32 v0, v1, v0942; GFX11-FAKE16-NEXT: v_or_b32_e32 v1, v7, v6943; GFX11-FAKE16-NEXT: v_or_b32_e32 v3, v5, v4944; GFX11-FAKE16-NEXT: v_sub_nc_u32_e32 v4, 32, v12945; GFX11-FAKE16-NEXT: v_cvt_f32_u32_e32 v2, v2946; GFX11-FAKE16-NEXT: v_cvt_f32_u32_e32 v0, v0947; GFX11-FAKE16-NEXT: v_cvt_f32_u32_e32 v1, v1948; GFX11-FAKE16-NEXT: v_cvt_f32_u32_e32 v3, v3949; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v5, 3, v8950; GFX11-FAKE16-NEXT: v_ldexp_f32 v2, v2, v9951; GFX11-FAKE16-NEXT: v_ldexp_f32 v0, v0, v10952; GFX11-FAKE16-NEXT: v_ldexp_f32 v1, v1, v11953; GFX11-FAKE16-NEXT: v_ldexp_f32 v3, v3, v4954; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)955; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v2, v2956; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v0, v0957; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)958; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v4, v1959; GFX11-FAKE16-NEXT: v_cvt_f16_f32_e32 v3, v3960; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)961; GFX11-FAKE16-NEXT: v_pack_b32_f16 v1, v0, v2962; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v3, v4963; GFX11-FAKE16-NEXT: global_store_b64 v5, v[0:1], s[0:1]964; GFX11-FAKE16-NEXT: s_endpgm965 %tid = call i32 @llvm.amdgcn.workitem.id.x()966 %in.gep = getelementptr <4 x i64>, ptr addrspace(1) %in, i32 %tid967 %out.gep = getelementptr <4 x half>, ptr addrspace(1) %out, i32 %tid968 %value = load <4 x i64>, ptr addrspace(1) %in.gep969 %result = uitofp <4 x i64> %value to <4 x half>970 store <4 x half> %result, ptr addrspace(1) %out.gep971 ret void972}973 974declare i32 @llvm.amdgcn.workitem.id.x() #1975 976attributes #0 = { nounwind }977attributes #1 = { nounwind readnone }978