brintos

brintos / llvm-project-archived public Read only

0
0
Text · 145.0 KiB · 8e427a6 Raw
3578 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri < %s | FileCheck -allow-deprecated-dag-overlap -enable-var-scope -check-prefixes=CIVI,CI %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn-amd-amdhsa -mcpu=tonga < %s | FileCheck -allow-deprecated-dag-overlap -enable-var-scope -check-prefixes=CIVI,VI %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -allow-deprecated-dag-overlap -enable-var-scope -check-prefixes=GFX11,GFX11-TRUE16 %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -allow-deprecated-dag-overlap -enable-var-scope -check-prefixes=GFX11,GFX11-FAKE16 %s6 7; half args should be promoted to float for CI and lower.8 9define amdgpu_kernel void @load_f16_arg(ptr addrspace(1) %out, half %arg) #0 {10; CI-LABEL: load_f16_arg:11; CI:       ; %bb.0:12; CI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x013; CI-NEXT:    s_load_dword s2, s[8:9], 0x214; CI-NEXT:    s_add_i32 s12, s12, s1715; CI-NEXT:    s_mov_b32 flat_scratch_lo, s1316; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 817; CI-NEXT:    s_waitcnt lgkmcnt(0)18; CI-NEXT:    v_mov_b32_e32 v0, s019; CI-NEXT:    v_mov_b32_e32 v1, s120; CI-NEXT:    v_mov_b32_e32 v2, s221; CI-NEXT:    flat_store_short v[0:1], v222; CI-NEXT:    s_endpgm23;24; VI-LABEL: load_f16_arg:25; VI:       ; %bb.0:26; VI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x027; VI-NEXT:    s_load_dword s2, s[8:9], 0x828; VI-NEXT:    s_add_i32 s12, s12, s1729; VI-NEXT:    s_mov_b32 flat_scratch_lo, s1330; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 831; VI-NEXT:    s_waitcnt lgkmcnt(0)32; VI-NEXT:    v_mov_b32_e32 v0, s033; VI-NEXT:    v_mov_b32_e32 v1, s134; VI-NEXT:    v_mov_b32_e32 v2, s235; VI-NEXT:    flat_store_short v[0:1], v236; VI-NEXT:    s_endpgm37;38; GFX11-LABEL: load_f16_arg:39; GFX11:       ; %bb.0:40; GFX11-NEXT:    s_clause 0x141; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x842; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x043; GFX11-NEXT:    s_waitcnt lgkmcnt(0)44; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s245; GFX11-NEXT:    global_store_b16 v0, v1, s[0:1]46; GFX11-NEXT:    s_endpgm47  store half %arg, ptr addrspace(1) %out48  ret void49}50 51define amdgpu_kernel void @load_v2f16_arg(ptr addrspace(1) %out, <2 x half> %arg) #0 {52; CI-LABEL: load_v2f16_arg:53; CI:       ; %bb.0:54; CI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x055; CI-NEXT:    s_load_dword s2, s[8:9], 0x256; CI-NEXT:    s_add_i32 s12, s12, s1757; CI-NEXT:    s_mov_b32 flat_scratch_lo, s1358; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 859; CI-NEXT:    s_waitcnt lgkmcnt(0)60; CI-NEXT:    v_mov_b32_e32 v0, s061; CI-NEXT:    v_mov_b32_e32 v1, s162; CI-NEXT:    v_mov_b32_e32 v2, s263; CI-NEXT:    flat_store_dword v[0:1], v264; CI-NEXT:    s_endpgm65;66; VI-LABEL: load_v2f16_arg:67; VI:       ; %bb.0:68; VI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x069; VI-NEXT:    s_load_dword s2, s[8:9], 0x870; VI-NEXT:    s_add_i32 s12, s12, s1771; VI-NEXT:    s_mov_b32 flat_scratch_lo, s1372; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 873; VI-NEXT:    s_waitcnt lgkmcnt(0)74; VI-NEXT:    v_mov_b32_e32 v0, s075; VI-NEXT:    v_mov_b32_e32 v1, s176; VI-NEXT:    v_mov_b32_e32 v2, s277; VI-NEXT:    flat_store_dword v[0:1], v278; VI-NEXT:    s_endpgm79;80; GFX11-LABEL: load_v2f16_arg:81; GFX11:       ; %bb.0:82; GFX11-NEXT:    s_clause 0x183; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x884; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x085; GFX11-NEXT:    s_waitcnt lgkmcnt(0)86; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s287; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]88; GFX11-NEXT:    s_endpgm89  store <2 x half> %arg, ptr addrspace(1) %out90  ret void91}92 93define amdgpu_kernel void @load_v3f16_arg(ptr addrspace(1) %out, <3 x half> %arg) #0 {94; CIVI-LABEL: load_v3f16_arg:95; CIVI:       ; %bb.0:96; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x097; CIVI-NEXT:    s_add_i32 s12, s12, s1798; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 899; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s13100; CIVI-NEXT:    s_waitcnt lgkmcnt(0)101; CIVI-NEXT:    s_add_u32 s4, s0, 4102; CIVI-NEXT:    s_addc_u32 s5, s1, 0103; CIVI-NEXT:    v_mov_b32_e32 v2, s4104; CIVI-NEXT:    v_mov_b32_e32 v4, s3105; CIVI-NEXT:    v_mov_b32_e32 v0, s0106; CIVI-NEXT:    v_mov_b32_e32 v3, s5107; CIVI-NEXT:    v_mov_b32_e32 v1, s1108; CIVI-NEXT:    v_mov_b32_e32 v5, s2109; CIVI-NEXT:    flat_store_short v[2:3], v4110; CIVI-NEXT:    flat_store_dword v[0:1], v5111; CIVI-NEXT:    s_endpgm112;113; GFX11-LABEL: load_v3f16_arg:114; GFX11:       ; %bb.0:115; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0116; GFX11-NEXT:    s_waitcnt lgkmcnt(0)117; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s3118; GFX11-NEXT:    v_mov_b32_e32 v2, s2119; GFX11-NEXT:    s_clause 0x1120; GFX11-NEXT:    global_store_b16 v0, v1, s[0:1] offset:4121; GFX11-NEXT:    global_store_b32 v0, v2, s[0:1]122; GFX11-NEXT:    s_endpgm123  store <3 x half> %arg, ptr addrspace(1) %out124  ret void125}126 127 128; FIXME: Why not one load?129define amdgpu_kernel void @load_v4f16_arg(ptr addrspace(1) %out, <4 x half> %arg) #0 {130; CIVI-LABEL: load_v4f16_arg:131; CIVI:       ; %bb.0:132; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0133; CIVI-NEXT:    s_add_i32 s12, s12, s17134; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s13135; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8136; CIVI-NEXT:    s_waitcnt lgkmcnt(0)137; CIVI-NEXT:    v_mov_b32_e32 v0, s0138; CIVI-NEXT:    v_mov_b32_e32 v2, s2139; CIVI-NEXT:    v_mov_b32_e32 v1, s1140; CIVI-NEXT:    v_mov_b32_e32 v3, s3141; CIVI-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]142; CIVI-NEXT:    s_endpgm143;144; GFX11-LABEL: load_v4f16_arg:145; GFX11:       ; %bb.0:146; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0147; GFX11-NEXT:    v_mov_b32_e32 v2, 0148; GFX11-NEXT:    s_waitcnt lgkmcnt(0)149; GFX11-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3150; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]151; GFX11-NEXT:    s_endpgm152  store <4 x half> %arg, ptr addrspace(1) %out153  ret void154}155 156define amdgpu_kernel void @load_v8f16_arg(ptr addrspace(1) %out, <8 x half> %arg) #0 {157; CI-LABEL: load_v8f16_arg:158; CI:       ; %bb.0:159; CI-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0160; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x4161; CI-NEXT:    s_add_i32 s12, s12, s17162; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13163; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8164; CI-NEXT:    s_waitcnt lgkmcnt(0)165; CI-NEXT:    v_mov_b32_e32 v4, s4166; CI-NEXT:    v_mov_b32_e32 v0, s0167; CI-NEXT:    v_mov_b32_e32 v5, s5168; CI-NEXT:    v_mov_b32_e32 v1, s1169; CI-NEXT:    v_mov_b32_e32 v2, s2170; CI-NEXT:    v_mov_b32_e32 v3, s3171; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]172; CI-NEXT:    s_endpgm173;174; VI-LABEL: load_v8f16_arg:175; VI:       ; %bb.0:176; VI-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0177; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x10178; VI-NEXT:    s_add_i32 s12, s12, s17179; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13180; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8181; VI-NEXT:    s_waitcnt lgkmcnt(0)182; VI-NEXT:    v_mov_b32_e32 v4, s4183; VI-NEXT:    v_mov_b32_e32 v0, s0184; VI-NEXT:    v_mov_b32_e32 v5, s5185; VI-NEXT:    v_mov_b32_e32 v1, s1186; VI-NEXT:    v_mov_b32_e32 v2, s2187; VI-NEXT:    v_mov_b32_e32 v3, s3188; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]189; VI-NEXT:    s_endpgm190;191; GFX11-LABEL: load_v8f16_arg:192; GFX11:       ; %bb.0:193; GFX11-NEXT:    s_clause 0x1194; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x10195; GFX11-NEXT:    s_load_b64 s[4:5], s[4:5], 0x0196; GFX11-NEXT:    v_mov_b32_e32 v4, 0197; GFX11-NEXT:    s_waitcnt lgkmcnt(0)198; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v3, s3199; GFX11-NEXT:    v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s2200; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[4:5]201; GFX11-NEXT:    s_endpgm202  store <8 x half> %arg, ptr addrspace(1) %out203  ret void204}205 206define amdgpu_kernel void @extload_v2f16_arg(ptr addrspace(1) %out, <2 x half> %in) #0 {207; CI-LABEL: extload_v2f16_arg:208; CI:       ; %bb.0:209; CI-NEXT:    s_load_dword s2, s[8:9], 0x2210; CI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0211; CI-NEXT:    s_add_i32 s12, s12, s17212; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13213; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8214; CI-NEXT:    s_waitcnt lgkmcnt(0)215; CI-NEXT:    s_lshr_b32 s3, s2, 16216; CI-NEXT:    v_cvt_f32_f16_e32 v1, s3217; CI-NEXT:    v_cvt_f32_f16_e32 v0, s2218; CI-NEXT:    v_mov_b32_e32 v3, s1219; CI-NEXT:    v_mov_b32_e32 v2, s0220; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]221; CI-NEXT:    s_endpgm222;223; VI-LABEL: extload_v2f16_arg:224; VI:       ; %bb.0:225; VI-NEXT:    s_load_dword s2, s[8:9], 0x8226; VI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0227; VI-NEXT:    s_add_i32 s12, s12, s17228; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13229; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8230; VI-NEXT:    s_waitcnt lgkmcnt(0)231; VI-NEXT:    s_lshr_b32 s3, s2, 16232; VI-NEXT:    v_cvt_f32_f16_e32 v1, s3233; VI-NEXT:    v_cvt_f32_f16_e32 v0, s2234; VI-NEXT:    v_mov_b32_e32 v3, s1235; VI-NEXT:    v_mov_b32_e32 v2, s0236; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]237; VI-NEXT:    s_endpgm238;239; GFX11-LABEL: extload_v2f16_arg:240; GFX11:       ; %bb.0:241; GFX11-NEXT:    s_clause 0x1242; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x8243; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0244; GFX11-NEXT:    v_mov_b32_e32 v2, 0245; GFX11-NEXT:    s_waitcnt lgkmcnt(0)246; GFX11-NEXT:    s_lshr_b32 s3, s2, 16247; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s2248; GFX11-NEXT:    v_cvt_f32_f16_e32 v1, s3249; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]250; GFX11-NEXT:    s_endpgm251  %fpext = fpext <2 x half> %in to <2 x float>252  store <2 x float> %fpext, ptr addrspace(1) %out253  ret void254}255 256define amdgpu_kernel void @extload_f16_to_f32_arg(ptr addrspace(1) %out, half %arg) #0 {257; CI-LABEL: extload_f16_to_f32_arg:258; CI:       ; %bb.0:259; CI-NEXT:    s_load_dword s2, s[8:9], 0x2260; CI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0261; CI-NEXT:    s_add_i32 s12, s12, s17262; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13263; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8264; CI-NEXT:    s_waitcnt lgkmcnt(0)265; CI-NEXT:    v_cvt_f32_f16_e32 v2, s2266; CI-NEXT:    v_mov_b32_e32 v0, s0267; CI-NEXT:    v_mov_b32_e32 v1, s1268; CI-NEXT:    flat_store_dword v[0:1], v2269; CI-NEXT:    s_endpgm270;271; VI-LABEL: extload_f16_to_f32_arg:272; VI:       ; %bb.0:273; VI-NEXT:    s_load_dword s2, s[8:9], 0x8274; VI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0275; VI-NEXT:    s_add_i32 s12, s12, s17276; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13277; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8278; VI-NEXT:    s_waitcnt lgkmcnt(0)279; VI-NEXT:    v_cvt_f32_f16_e32 v2, s2280; VI-NEXT:    v_mov_b32_e32 v0, s0281; VI-NEXT:    v_mov_b32_e32 v1, s1282; VI-NEXT:    flat_store_dword v[0:1], v2283; VI-NEXT:    s_endpgm284;285; GFX11-LABEL: extload_f16_to_f32_arg:286; GFX11:       ; %bb.0:287; GFX11-NEXT:    s_clause 0x1288; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x8289; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0290; GFX11-NEXT:    v_mov_b32_e32 v0, 0291; GFX11-NEXT:    s_waitcnt lgkmcnt(0)292; GFX11-NEXT:    v_cvt_f32_f16_e32 v1, s2293; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]294; GFX11-NEXT:    s_endpgm295  %ext = fpext half %arg to float296  store float %ext, ptr addrspace(1) %out297  ret void298}299 300define amdgpu_kernel void @extload_v2f16_to_v2f32_arg(ptr addrspace(1) %out, <2 x half> %arg) #0 {301; CI-LABEL: extload_v2f16_to_v2f32_arg:302; CI:       ; %bb.0:303; CI-NEXT:    s_load_dword s2, s[8:9], 0x2304; CI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0305; CI-NEXT:    s_add_i32 s12, s12, s17306; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13307; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8308; CI-NEXT:    s_waitcnt lgkmcnt(0)309; CI-NEXT:    s_lshr_b32 s3, s2, 16310; CI-NEXT:    v_cvt_f32_f16_e32 v1, s3311; CI-NEXT:    v_cvt_f32_f16_e32 v0, s2312; CI-NEXT:    v_mov_b32_e32 v3, s1313; CI-NEXT:    v_mov_b32_e32 v2, s0314; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]315; CI-NEXT:    s_endpgm316;317; VI-LABEL: extload_v2f16_to_v2f32_arg:318; VI:       ; %bb.0:319; VI-NEXT:    s_load_dword s2, s[8:9], 0x8320; VI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0321; VI-NEXT:    s_add_i32 s12, s12, s17322; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13323; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8324; VI-NEXT:    s_waitcnt lgkmcnt(0)325; VI-NEXT:    s_lshr_b32 s3, s2, 16326; VI-NEXT:    v_cvt_f32_f16_e32 v1, s3327; VI-NEXT:    v_cvt_f32_f16_e32 v0, s2328; VI-NEXT:    v_mov_b32_e32 v3, s1329; VI-NEXT:    v_mov_b32_e32 v2, s0330; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]331; VI-NEXT:    s_endpgm332;333; GFX11-LABEL: extload_v2f16_to_v2f32_arg:334; GFX11:       ; %bb.0:335; GFX11-NEXT:    s_clause 0x1336; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x8337; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0338; GFX11-NEXT:    v_mov_b32_e32 v2, 0339; GFX11-NEXT:    s_waitcnt lgkmcnt(0)340; GFX11-NEXT:    s_lshr_b32 s3, s2, 16341; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s2342; GFX11-NEXT:    v_cvt_f32_f16_e32 v1, s3343; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]344; GFX11-NEXT:    s_endpgm345  %ext = fpext <2 x half> %arg to <2 x float>346  store <2 x float> %ext, ptr addrspace(1) %out347  ret void348}349 350define amdgpu_kernel void @extload_v3f16_to_v3f32_arg(ptr addrspace(1) %out, <3 x half> %arg) #0 {351; CI-LABEL: extload_v3f16_to_v3f32_arg:352; CI:       ; %bb.0:353; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0354; CI-NEXT:    s_add_i32 s12, s12, s17355; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13356; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8357; CI-NEXT:    s_waitcnt lgkmcnt(0)358; CI-NEXT:    s_lshr_b32 s4, s2, 16359; CI-NEXT:    v_cvt_f32_f16_e32 v2, s3360; CI-NEXT:    v_cvt_f32_f16_e32 v1, s4361; CI-NEXT:    v_cvt_f32_f16_e32 v0, s2362; CI-NEXT:    v_mov_b32_e32 v4, s1363; CI-NEXT:    v_mov_b32_e32 v3, s0364; CI-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]365; CI-NEXT:    s_endpgm366;367; VI-LABEL: extload_v3f16_to_v3f32_arg:368; VI:       ; %bb.0:369; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0370; VI-NEXT:    s_add_i32 s12, s12, s17371; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13372; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8373; VI-NEXT:    s_waitcnt lgkmcnt(0)374; VI-NEXT:    s_lshr_b32 s4, s2, 16375; VI-NEXT:    v_cvt_f32_f16_e32 v0, s2376; VI-NEXT:    v_cvt_f32_f16_e32 v1, s4377; VI-NEXT:    v_cvt_f32_f16_e32 v2, s3378; VI-NEXT:    v_mov_b32_e32 v4, s1379; VI-NEXT:    v_mov_b32_e32 v3, s0380; VI-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]381; VI-NEXT:    s_endpgm382;383; GFX11-LABEL: extload_v3f16_to_v3f32_arg:384; GFX11:       ; %bb.0:385; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0386; GFX11-NEXT:    v_mov_b32_e32 v3, 0387; GFX11-NEXT:    s_waitcnt lgkmcnt(0)388; GFX11-NEXT:    s_lshr_b32 s4, s2, 16389; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s2390; GFX11-NEXT:    v_cvt_f32_f16_e32 v1, s4391; GFX11-NEXT:    v_cvt_f32_f16_e32 v2, s3392; GFX11-NEXT:    global_store_b96 v3, v[0:2], s[0:1]393; GFX11-NEXT:    s_endpgm394  %ext = fpext <3 x half> %arg to <3 x float>395  store <3 x float> %ext, ptr addrspace(1) %out396  ret void397}398 399define amdgpu_kernel void @extload_v4f16_to_v4f32_arg(ptr addrspace(1) %out, <4 x half> %arg) #0 {400; CI-LABEL: extload_v4f16_to_v4f32_arg:401; CI:       ; %bb.0:402; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0403; CI-NEXT:    s_add_i32 s12, s12, s17404; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13405; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8406; CI-NEXT:    s_waitcnt lgkmcnt(0)407; CI-NEXT:    s_lshr_b32 s4, s3, 16408; CI-NEXT:    s_lshr_b32 s5, s2, 16409; CI-NEXT:    v_cvt_f32_f16_e32 v2, s3410; CI-NEXT:    v_cvt_f32_f16_e32 v3, s4411; CI-NEXT:    v_cvt_f32_f16_e32 v1, s5412; CI-NEXT:    v_cvt_f32_f16_e32 v0, s2413; CI-NEXT:    v_mov_b32_e32 v5, s1414; CI-NEXT:    v_mov_b32_e32 v4, s0415; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]416; CI-NEXT:    s_endpgm417;418; VI-LABEL: extload_v4f16_to_v4f32_arg:419; VI:       ; %bb.0:420; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0421; VI-NEXT:    s_add_i32 s12, s12, s17422; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13423; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8424; VI-NEXT:    s_waitcnt lgkmcnt(0)425; VI-NEXT:    s_lshr_b32 s4, s3, 16426; VI-NEXT:    s_lshr_b32 s5, s2, 16427; VI-NEXT:    v_cvt_f32_f16_e32 v0, s2428; VI-NEXT:    v_cvt_f32_f16_e32 v3, s4429; VI-NEXT:    v_cvt_f32_f16_e32 v1, s5430; VI-NEXT:    v_cvt_f32_f16_e32 v2, s3431; VI-NEXT:    v_mov_b32_e32 v5, s1432; VI-NEXT:    v_mov_b32_e32 v4, s0433; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]434; VI-NEXT:    s_endpgm435;436; GFX11-LABEL: extload_v4f16_to_v4f32_arg:437; GFX11:       ; %bb.0:438; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0439; GFX11-NEXT:    v_mov_b32_e32 v4, 0440; GFX11-NEXT:    s_waitcnt lgkmcnt(0)441; GFX11-NEXT:    s_lshr_b32 s4, s3, 16442; GFX11-NEXT:    s_lshr_b32 s5, s2, 16443; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s2444; GFX11-NEXT:    v_cvt_f32_f16_e32 v3, s4445; GFX11-NEXT:    v_cvt_f32_f16_e32 v1, s5446; GFX11-NEXT:    v_cvt_f32_f16_e32 v2, s3447; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[0:1]448; GFX11-NEXT:    s_endpgm449  %ext = fpext <4 x half> %arg to <4 x float>450  store <4 x float> %ext, ptr addrspace(1) %out451  ret void452}453 454define amdgpu_kernel void @extload_v8f16_to_v8f32_arg(ptr addrspace(1) %out, <8 x half> %arg) #0 {455; CI-LABEL: extload_v8f16_to_v8f32_arg:456; CI:       ; %bb.0:457; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x4458; CI-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0459; CI-NEXT:    s_add_i32 s12, s12, s17460; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8461; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13462; CI-NEXT:    s_waitcnt lgkmcnt(0)463; CI-NEXT:    s_lshr_b32 s6, s1, 16464; CI-NEXT:    s_lshr_b32 s7, s0, 16465; CI-NEXT:    s_lshr_b32 s8, s3, 16466; CI-NEXT:    v_cvt_f32_f16_e32 v3, s6467; CI-NEXT:    s_lshr_b32 s6, s2, 16468; CI-NEXT:    v_cvt_f32_f16_e32 v7, s8469; CI-NEXT:    v_cvt_f32_f16_e32 v5, s6470; CI-NEXT:    v_cvt_f32_f16_e32 v0, s0471; CI-NEXT:    v_cvt_f32_f16_e32 v6, s3472; CI-NEXT:    v_cvt_f32_f16_e32 v4, s2473; CI-NEXT:    s_add_u32 s0, s4, 16474; CI-NEXT:    v_cvt_f32_f16_e32 v2, s1475; CI-NEXT:    s_addc_u32 s1, s5, 0476; CI-NEXT:    v_cvt_f32_f16_e32 v1, s7477; CI-NEXT:    v_mov_b32_e32 v9, s1478; CI-NEXT:    v_mov_b32_e32 v8, s0479; CI-NEXT:    flat_store_dwordx4 v[8:9], v[4:7]480; CI-NEXT:    s_nop 0481; CI-NEXT:    v_mov_b32_e32 v4, s4482; CI-NEXT:    v_mov_b32_e32 v5, s5483; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]484; CI-NEXT:    s_endpgm485;486; VI-LABEL: extload_v8f16_to_v8f32_arg:487; VI:       ; %bb.0:488; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x10489; VI-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0490; VI-NEXT:    s_add_i32 s12, s12, s17491; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8492; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13493; VI-NEXT:    s_waitcnt lgkmcnt(0)494; VI-NEXT:    s_lshr_b32 s6, s1, 16495; VI-NEXT:    s_lshr_b32 s7, s0, 16496; VI-NEXT:    s_lshr_b32 s8, s3, 16497; VI-NEXT:    v_cvt_f32_f16_e32 v3, s6498; VI-NEXT:    s_lshr_b32 s6, s2, 16499; VI-NEXT:    v_cvt_f32_f16_e32 v7, s8500; VI-NEXT:    v_cvt_f32_f16_e32 v5, s6501; VI-NEXT:    v_cvt_f32_f16_e32 v0, s0502; VI-NEXT:    v_cvt_f32_f16_e32 v6, s3503; VI-NEXT:    v_cvt_f32_f16_e32 v4, s2504; VI-NEXT:    s_add_u32 s0, s4, 16505; VI-NEXT:    v_cvt_f32_f16_e32 v2, s1506; VI-NEXT:    s_addc_u32 s1, s5, 0507; VI-NEXT:    v_cvt_f32_f16_e32 v1, s7508; VI-NEXT:    v_mov_b32_e32 v9, s1509; VI-NEXT:    v_mov_b32_e32 v8, s0510; VI-NEXT:    flat_store_dwordx4 v[8:9], v[4:7]511; VI-NEXT:    s_nop 0512; VI-NEXT:    v_mov_b32_e32 v4, s4513; VI-NEXT:    v_mov_b32_e32 v5, s5514; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]515; VI-NEXT:    s_endpgm516;517; GFX11-LABEL: extload_v8f16_to_v8f32_arg:518; GFX11:       ; %bb.0:519; GFX11-NEXT:    s_clause 0x1520; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x10521; GFX11-NEXT:    s_load_b64 s[4:5], s[4:5], 0x0522; GFX11-NEXT:    v_mov_b32_e32 v8, 0523; GFX11-NEXT:    s_waitcnt lgkmcnt(0)524; GFX11-NEXT:    s_lshr_b32 s8, s3, 16525; GFX11-NEXT:    s_lshr_b32 s9, s2, 16526; GFX11-NEXT:    s_lshr_b32 s6, s1, 16527; GFX11-NEXT:    s_lshr_b32 s7, s0, 16528; GFX11-NEXT:    v_cvt_f32_f16_e32 v6, s3529; GFX11-NEXT:    v_cvt_f32_f16_e32 v4, s2530; GFX11-NEXT:    v_cvt_f32_f16_e32 v7, s8531; GFX11-NEXT:    v_cvt_f32_f16_e32 v5, s9532; GFX11-NEXT:    v_cvt_f32_f16_e32 v2, s1533; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s0534; GFX11-NEXT:    v_cvt_f32_f16_e32 v3, s6535; GFX11-NEXT:    v_cvt_f32_f16_e32 v1, s7536; GFX11-NEXT:    s_clause 0x1537; GFX11-NEXT:    global_store_b128 v8, v[4:7], s[4:5] offset:16538; GFX11-NEXT:    global_store_b128 v8, v[0:3], s[4:5]539; GFX11-NEXT:    s_endpgm540  %ext = fpext <8 x half> %arg to <8 x float>541  store <8 x float> %ext, ptr addrspace(1) %out542  ret void543}544 545define amdgpu_kernel void @extload_f16_to_f64_arg(ptr addrspace(1) %out, half %arg) #0 {546; CI-LABEL: extload_f16_to_f64_arg:547; CI:       ; %bb.0:548; CI-NEXT:    s_load_dword s0, s[8:9], 0x2549; CI-NEXT:    s_add_i32 s12, s12, s17550; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13551; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8552; CI-NEXT:    s_waitcnt lgkmcnt(0)553; CI-NEXT:    v_cvt_f32_f16_e32 v0, s0554; CI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0555; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0556; CI-NEXT:    s_waitcnt lgkmcnt(0)557; CI-NEXT:    v_mov_b32_e32 v3, s1558; CI-NEXT:    v_mov_b32_e32 v2, s0559; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]560; CI-NEXT:    s_endpgm561;562; VI-LABEL: extload_f16_to_f64_arg:563; VI:       ; %bb.0:564; VI-NEXT:    s_load_dword s0, s[8:9], 0x8565; VI-NEXT:    s_add_i32 s12, s12, s17566; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13567; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8568; VI-NEXT:    s_waitcnt lgkmcnt(0)569; VI-NEXT:    v_cvt_f32_f16_e32 v0, s0570; VI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0571; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0572; VI-NEXT:    s_waitcnt lgkmcnt(0)573; VI-NEXT:    v_mov_b32_e32 v3, s1574; VI-NEXT:    v_mov_b32_e32 v2, s0575; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]576; VI-NEXT:    s_endpgm577;578; GFX11-LABEL: extload_f16_to_f64_arg:579; GFX11:       ; %bb.0:580; GFX11-NEXT:    s_load_b32 s0, s[4:5], 0x8581; GFX11-NEXT:    v_mov_b32_e32 v2, 0582; GFX11-NEXT:    s_waitcnt lgkmcnt(0)583; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s0584; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0585; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)586; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0587; GFX11-NEXT:    s_waitcnt lgkmcnt(0)588; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]589; GFX11-NEXT:    s_endpgm590  %ext = fpext half %arg to double591  store double %ext, ptr addrspace(1) %out592  ret void593}594 595define amdgpu_kernel void @extload_v2f16_to_v2f64_arg(ptr addrspace(1) %out, <2 x half> %arg) #0 {596; CI-LABEL: extload_v2f16_to_v2f64_arg:597; CI:       ; %bb.0:598; CI-NEXT:    s_load_dword s0, s[8:9], 0x2599; CI-NEXT:    s_add_i32 s12, s12, s17600; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13601; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8602; CI-NEXT:    s_waitcnt lgkmcnt(0)603; CI-NEXT:    s_lshr_b32 s1, s0, 16604; CI-NEXT:    v_cvt_f32_f16_e32 v0, s1605; CI-NEXT:    v_cvt_f32_f16_e32 v1, s0606; CI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0607; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v0608; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v1609; CI-NEXT:    s_waitcnt lgkmcnt(0)610; CI-NEXT:    v_mov_b32_e32 v5, s1611; CI-NEXT:    v_mov_b32_e32 v4, s0612; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]613; CI-NEXT:    s_endpgm614;615; VI-LABEL: extload_v2f16_to_v2f64_arg:616; VI:       ; %bb.0:617; VI-NEXT:    s_load_dword s0, s[8:9], 0x8618; VI-NEXT:    s_add_i32 s12, s12, s17619; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13620; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8621; VI-NEXT:    s_waitcnt lgkmcnt(0)622; VI-NEXT:    s_lshr_b32 s1, s0, 16623; VI-NEXT:    v_cvt_f32_f16_e32 v0, s1624; VI-NEXT:    v_cvt_f32_f16_e32 v1, s0625; VI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0626; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v0627; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v1628; VI-NEXT:    s_waitcnt lgkmcnt(0)629; VI-NEXT:    v_mov_b32_e32 v5, s1630; VI-NEXT:    v_mov_b32_e32 v4, s0631; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]632; VI-NEXT:    s_endpgm633;634; GFX11-LABEL: extload_v2f16_to_v2f64_arg:635; GFX11:       ; %bb.0:636; GFX11-NEXT:    s_load_b32 s0, s[4:5], 0x8637; GFX11-NEXT:    v_mov_b32_e32 v4, 0638; GFX11-NEXT:    s_waitcnt lgkmcnt(0)639; GFX11-NEXT:    s_lshr_b32 s1, s0, 16640; GFX11-NEXT:    v_cvt_f32_f16_e32 v1, s0641; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s1642; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0643; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)644; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v0645; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v1646; GFX11-NEXT:    s_waitcnt lgkmcnt(0)647; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[0:1]648; GFX11-NEXT:    s_endpgm649  %ext = fpext <2 x half> %arg to <2 x double>650  store <2 x double> %ext, ptr addrspace(1) %out651  ret void652}653 654define amdgpu_kernel void @extload_v3f16_to_v3f64_arg(ptr addrspace(1) %out, <3 x half> %arg) #0 {655; CI-LABEL: extload_v3f16_to_v3f64_arg:656; CI:       ; %bb.0:657; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0658; CI-NEXT:    s_add_i32 s12, s12, s17659; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8660; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13661; CI-NEXT:    s_waitcnt lgkmcnt(0)662; CI-NEXT:    v_cvt_f32_f16_e32 v0, s3663; CI-NEXT:    s_lshr_b32 s4, s2, 16664; CI-NEXT:    v_cvt_f32_f16_e32 v1, s2665; CI-NEXT:    v_cvt_f32_f16_e32 v2, s4666; CI-NEXT:    s_add_u32 s2, s0, 16667; CI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v0668; CI-NEXT:    s_addc_u32 s3, s1, 0669; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v1670; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2671; CI-NEXT:    v_mov_b32_e32 v7, s3672; CI-NEXT:    v_mov_b32_e32 v6, s2673; CI-NEXT:    flat_store_dwordx2 v[6:7], v[4:5]674; CI-NEXT:    v_mov_b32_e32 v5, s1675; CI-NEXT:    v_mov_b32_e32 v4, s0676; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]677; CI-NEXT:    s_endpgm678;679; VI-LABEL: extload_v3f16_to_v3f64_arg:680; VI:       ; %bb.0:681; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0682; VI-NEXT:    s_add_i32 s12, s12, s17683; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8684; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13685; VI-NEXT:    s_waitcnt lgkmcnt(0)686; VI-NEXT:    v_cvt_f32_f16_e32 v1, s3687; VI-NEXT:    s_lshr_b32 s4, s2, 16688; VI-NEXT:    v_cvt_f32_f16_e32 v0, s2689; VI-NEXT:    v_cvt_f32_f16_e32 v2, s4690; VI-NEXT:    s_add_u32 s2, s0, 16691; VI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v1692; VI-NEXT:    s_addc_u32 s3, s1, 0693; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0694; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2695; VI-NEXT:    v_mov_b32_e32 v7, s3696; VI-NEXT:    v_mov_b32_e32 v6, s2697; VI-NEXT:    flat_store_dwordx2 v[6:7], v[4:5]698; VI-NEXT:    v_mov_b32_e32 v5, s1699; VI-NEXT:    v_mov_b32_e32 v4, s0700; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]701; VI-NEXT:    s_endpgm702;703; GFX11-LABEL: extload_v3f16_to_v3f64_arg:704; GFX11:       ; %bb.0:705; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0706; GFX11-NEXT:    s_waitcnt lgkmcnt(0)707; GFX11-NEXT:    s_lshr_b32 s4, s2, 16708; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s3709; GFX11-NEXT:    v_cvt_f32_f16_e32 v1, s4710; GFX11-NEXT:    v_cvt_f32_f16_e32 v6, s2711; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)712; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v0713; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v1714; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)715; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v6716; GFX11-NEXT:    v_mov_b32_e32 v6, 0717; GFX11-NEXT:    s_clause 0x1718; GFX11-NEXT:    global_store_b64 v6, v[4:5], s[0:1] offset:16719; GFX11-NEXT:    global_store_b128 v6, v[0:3], s[0:1]720; GFX11-NEXT:    s_endpgm721  %ext = fpext <3 x half> %arg to <3 x double>722  store <3 x double> %ext, ptr addrspace(1) %out723  ret void724}725 726define amdgpu_kernel void @extload_v4f16_to_v4f64_arg(ptr addrspace(1) %out, <4 x half> %arg) #0 {727; CI-LABEL: extload_v4f16_to_v4f64_arg:728; CI:       ; %bb.0:729; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0730; CI-NEXT:    s_add_i32 s12, s12, s17731; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8732; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13733; CI-NEXT:    s_waitcnt lgkmcnt(0)734; CI-NEXT:    s_lshr_b32 s4, s3, 16735; CI-NEXT:    v_cvt_f32_f16_e32 v0, s3736; CI-NEXT:    v_cvt_f32_f16_e32 v2, s4737; CI-NEXT:    s_lshr_b32 s5, s2, 16738; CI-NEXT:    v_cvt_f32_f16_e32 v4, s2739; CI-NEXT:    v_cvt_f32_f16_e32 v6, s5740; CI-NEXT:    s_add_u32 s2, s0, 16741; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0742; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2743; CI-NEXT:    s_addc_u32 s3, s1, 0744; CI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4745; CI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6746; CI-NEXT:    v_mov_b32_e32 v9, s3747; CI-NEXT:    v_mov_b32_e32 v8, s2748; CI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]749; CI-NEXT:    s_nop 0750; CI-NEXT:    v_mov_b32_e32 v0, s0751; CI-NEXT:    v_mov_b32_e32 v1, s1752; CI-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]753; CI-NEXT:    s_endpgm754;755; VI-LABEL: extload_v4f16_to_v4f64_arg:756; VI:       ; %bb.0:757; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0758; VI-NEXT:    s_add_i32 s12, s12, s17759; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8760; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13761; VI-NEXT:    s_waitcnt lgkmcnt(0)762; VI-NEXT:    s_lshr_b32 s5, s3, 16763; VI-NEXT:    v_cvt_f32_f16_e32 v0, s3764; VI-NEXT:    v_cvt_f32_f16_e32 v2, s5765; VI-NEXT:    s_lshr_b32 s4, s2, 16766; VI-NEXT:    v_cvt_f32_f16_e32 v4, s2767; VI-NEXT:    v_cvt_f32_f16_e32 v6, s4768; VI-NEXT:    s_add_u32 s2, s0, 16769; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0770; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2771; VI-NEXT:    s_addc_u32 s3, s1, 0772; VI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4773; VI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6774; VI-NEXT:    v_mov_b32_e32 v9, s3775; VI-NEXT:    v_mov_b32_e32 v8, s2776; VI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]777; VI-NEXT:    s_nop 0778; VI-NEXT:    v_mov_b32_e32 v0, s0779; VI-NEXT:    v_mov_b32_e32 v1, s1780; VI-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]781; VI-NEXT:    s_endpgm782;783; GFX11-LABEL: extload_v4f16_to_v4f64_arg:784; GFX11:       ; %bb.0:785; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0786; GFX11-NEXT:    s_waitcnt lgkmcnt(0)787; GFX11-NEXT:    s_lshr_b32 s5, s3, 16788; GFX11-NEXT:    s_lshr_b32 s4, s2, 16789; GFX11-NEXT:    v_cvt_f32_f16_e32 v2, s3790; GFX11-NEXT:    v_cvt_f32_f16_e32 v3, s5791; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s2792; GFX11-NEXT:    v_cvt_f32_f16_e32 v8, s4793; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)794; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v2795; GFX11-NEXT:    v_cvt_f64_f32_e32 v[6:7], v3796; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)797; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0798; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v8799; GFX11-NEXT:    v_mov_b32_e32 v8, 0800; GFX11-NEXT:    s_clause 0x1801; GFX11-NEXT:    global_store_b128 v8, v[4:7], s[0:1] offset:16802; GFX11-NEXT:    global_store_b128 v8, v[0:3], s[0:1]803; GFX11-NEXT:    s_endpgm804  %ext = fpext <4 x half> %arg to <4 x double>805  store <4 x double> %ext, ptr addrspace(1) %out806  ret void807}808 809define amdgpu_kernel void @extload_v8f16_to_v8f64_arg(ptr addrspace(1) %out, <8 x half> %arg) #0 {810; CI-LABEL: extload_v8f16_to_v8f64_arg:811; CI:       ; %bb.0:812; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x4813; CI-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0814; CI-NEXT:    s_add_i32 s12, s12, s17815; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8816; CI-NEXT:    s_mov_b32 flat_scratch_lo, s13817; CI-NEXT:    s_waitcnt lgkmcnt(0)818; CI-NEXT:    s_lshr_b32 s6, s3, 16819; CI-NEXT:    v_cvt_f32_f16_e32 v0, s6820; CI-NEXT:    v_cvt_f32_f16_e32 v12, s3821; CI-NEXT:    s_lshr_b32 s7, s2, 16822; CI-NEXT:    s_lshr_b32 s8, s1, 16823; CI-NEXT:    s_lshr_b32 s6, s0, 16824; CI-NEXT:    v_cvt_f32_f16_e32 v1, s7825; CI-NEXT:    v_cvt_f32_f16_e32 v8, s2826; CI-NEXT:    v_cvt_f32_f16_e32 v9, s0827; CI-NEXT:    s_add_u32 s0, s4, 48828; CI-NEXT:    v_cvt_f32_f16_e32 v5, s1829; CI-NEXT:    v_cvt_f64_f32_e32 v[14:15], v0830; CI-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12831; CI-NEXT:    s_addc_u32 s1, s5, 0832; CI-NEXT:    v_cvt_f32_f16_e32 v4, s8833; CI-NEXT:    v_mov_b32_e32 v17, s1834; CI-NEXT:    v_mov_b32_e32 v16, s0835; CI-NEXT:    s_add_u32 s0, s4, 32836; CI-NEXT:    v_cvt_f32_f16_e32 v2, s6837; CI-NEXT:    v_cvt_f64_f32_e32 v[10:11], v1838; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v9839; CI-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8840; CI-NEXT:    s_addc_u32 s1, s5, 0841; CI-NEXT:    flat_store_dwordx4 v[16:17], v[12:15]842; CI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v4843; CI-NEXT:    v_mov_b32_e32 v13, s1844; CI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5845; CI-NEXT:    v_mov_b32_e32 v12, s0846; CI-NEXT:    s_add_u32 s0, s4, 16847; CI-NEXT:    s_addc_u32 s1, s5, 0848; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2849; CI-NEXT:    flat_store_dwordx4 v[12:13], v[8:11]850; CI-NEXT:    s_nop 0851; CI-NEXT:    v_mov_b32_e32 v9, s1852; CI-NEXT:    v_mov_b32_e32 v8, s0853; CI-NEXT:    flat_store_dwordx4 v[8:9], v[4:7]854; CI-NEXT:    s_nop 0855; CI-NEXT:    v_mov_b32_e32 v4, s4856; CI-NEXT:    v_mov_b32_e32 v5, s5857; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]858; CI-NEXT:    s_endpgm859;860; VI-LABEL: extload_v8f16_to_v8f64_arg:861; VI:       ; %bb.0:862; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x10863; VI-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x0864; VI-NEXT:    s_add_i32 s12, s12, s17865; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8866; VI-NEXT:    s_mov_b32 flat_scratch_lo, s13867; VI-NEXT:    s_waitcnt lgkmcnt(0)868; VI-NEXT:    s_lshr_b32 s6, s0, 16869; VI-NEXT:    s_lshr_b32 s8, s2, 16870; VI-NEXT:    s_lshr_b32 s9, s3, 16871; VI-NEXT:    v_cvt_f32_f16_e32 v0, s6872; VI-NEXT:    v_cvt_f32_f16_e32 v4, s8873; VI-NEXT:    v_cvt_f32_f16_e32 v5, s9874; VI-NEXT:    v_cvt_f32_f16_e32 v12, s3875; VI-NEXT:    s_lshr_b32 s7, s1, 16876; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v0877; VI-NEXT:    v_cvt_f32_f16_e32 v0, s0878; VI-NEXT:    v_cvt_f32_f16_e32 v8, s2879; VI-NEXT:    s_add_u32 s0, s4, 48880; VI-NEXT:    v_cvt_f64_f32_e32 v[10:11], v4881; VI-NEXT:    v_cvt_f64_f32_e32 v[14:15], v5882; VI-NEXT:    v_cvt_f32_f16_e32 v4, s1883; VI-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12884; VI-NEXT:    s_addc_u32 s1, s5, 0885; VI-NEXT:    v_cvt_f32_f16_e32 v1, s7886; VI-NEXT:    v_mov_b32_e32 v17, s1887; VI-NEXT:    v_mov_b32_e32 v16, s0888; VI-NEXT:    s_add_u32 s0, s4, 32889; VI-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8890; VI-NEXT:    s_addc_u32 s1, s5, 0891; VI-NEXT:    flat_store_dwordx4 v[16:17], v[12:15]892; VI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v1893; VI-NEXT:    v_mov_b32_e32 v13, s1894; VI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4895; VI-NEXT:    v_mov_b32_e32 v12, s0896; VI-NEXT:    s_add_u32 s0, s4, 16897; VI-NEXT:    s_addc_u32 s1, s5, 0898; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0899; VI-NEXT:    flat_store_dwordx4 v[12:13], v[8:11]900; VI-NEXT:    s_nop 0901; VI-NEXT:    v_mov_b32_e32 v9, s1902; VI-NEXT:    v_mov_b32_e32 v8, s0903; VI-NEXT:    flat_store_dwordx4 v[8:9], v[4:7]904; VI-NEXT:    s_nop 0905; VI-NEXT:    v_mov_b32_e32 v4, s4906; VI-NEXT:    v_mov_b32_e32 v5, s5907; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]908; VI-NEXT:    s_endpgm909;910; GFX11-LABEL: extload_v8f16_to_v8f64_arg:911; GFX11:       ; %bb.0:912; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x10913; GFX11-NEXT:    s_waitcnt lgkmcnt(0)914; GFX11-NEXT:    s_lshr_b32 s9, s3, 16915; GFX11-NEXT:    s_lshr_b32 s8, s2, 16916; GFX11-NEXT:    s_lshr_b32 s7, s1, 16917; GFX11-NEXT:    v_cvt_f32_f16_e32 v6, s3918; GFX11-NEXT:    v_cvt_f32_f16_e32 v11, s9919; GFX11-NEXT:    s_lshr_b32 s6, s0, 16920; GFX11-NEXT:    v_cvt_f32_f16_e32 v3, s2921; GFX11-NEXT:    v_cvt_f32_f16_e32 v10, s8922; GFX11-NEXT:    v_cvt_f32_f16_e32 v2, s1923; GFX11-NEXT:    v_cvt_f32_f16_e32 v7, s7924; GFX11-NEXT:    v_cvt_f32_f16_e32 v0, s0925; GFX11-NEXT:    v_cvt_f32_f16_e32 v16, s6926; GFX11-NEXT:    v_cvt_f64_f32_e32 v[12:13], v6927; GFX11-NEXT:    v_cvt_f64_f32_e32 v[14:15], v11928; GFX11-NEXT:    v_cvt_f64_f32_e32 v[8:9], v3929; GFX11-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10930; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v2931; GFX11-NEXT:    v_cvt_f64_f32_e32 v[6:7], v7932; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0933; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v16934; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0935; GFX11-NEXT:    v_mov_b32_e32 v16, 0936; GFX11-NEXT:    s_waitcnt lgkmcnt(0)937; GFX11-NEXT:    s_clause 0x3938; GFX11-NEXT:    global_store_b128 v16, v[12:15], s[0:1] offset:48939; GFX11-NEXT:    global_store_b128 v16, v[8:11], s[0:1] offset:32940; GFX11-NEXT:    global_store_b128 v16, v[4:7], s[0:1] offset:16941; GFX11-NEXT:    global_store_b128 v16, v[0:3], s[0:1]942; GFX11-NEXT:    s_endpgm943  %ext = fpext <8 x half> %arg to <8 x double>944  store <8 x double> %ext, ptr addrspace(1) %out945  ret void946}947 948define amdgpu_kernel void @global_load_store_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {949; CIVI-LABEL: global_load_store_f16:950; CIVI:       ; %bb.0:951; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0952; CIVI-NEXT:    s_add_i32 s12, s12, s17953; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s13954; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8955; CIVI-NEXT:    s_waitcnt lgkmcnt(0)956; CIVI-NEXT:    v_mov_b32_e32 v0, s2957; CIVI-NEXT:    v_mov_b32_e32 v1, s3958; CIVI-NEXT:    flat_load_ushort v2, v[0:1]959; CIVI-NEXT:    v_mov_b32_e32 v0, s0960; CIVI-NEXT:    v_mov_b32_e32 v1, s1961; CIVI-NEXT:    s_waitcnt vmcnt(0)962; CIVI-NEXT:    flat_store_short v[0:1], v2963; CIVI-NEXT:    s_endpgm964;965; GFX11-TRUE16-LABEL: global_load_store_f16:966; GFX11-TRUE16:       ; %bb.0:967; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0968; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 0969; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)970; GFX11-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3]971; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)972; GFX11-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]973; GFX11-TRUE16-NEXT:    s_endpgm974;975; GFX11-FAKE16-LABEL: global_load_store_f16:976; GFX11-FAKE16:       ; %bb.0:977; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0978; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 0979; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)980; GFX11-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]981; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)982; GFX11-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]983; GFX11-FAKE16-NEXT:    s_endpgm984  %val = load half, ptr addrspace(1) %in985  store half %val, ptr addrspace(1) %out986  ret void987}988 989define amdgpu_kernel void @global_load_store_v2f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {990; CIVI-LABEL: global_load_store_v2f16:991; CIVI:       ; %bb.0:992; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0993; CIVI-NEXT:    s_add_i32 s12, s12, s17994; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s13995; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8996; CIVI-NEXT:    s_waitcnt lgkmcnt(0)997; CIVI-NEXT:    v_mov_b32_e32 v0, s2998; CIVI-NEXT:    v_mov_b32_e32 v1, s3999; CIVI-NEXT:    flat_load_dword v2, v[0:1]1000; CIVI-NEXT:    v_mov_b32_e32 v0, s01001; CIVI-NEXT:    v_mov_b32_e32 v1, s11002; CIVI-NEXT:    s_waitcnt vmcnt(0)1003; CIVI-NEXT:    flat_store_dword v[0:1], v21004; CIVI-NEXT:    s_endpgm1005;1006; GFX11-LABEL: global_load_store_v2f16:1007; GFX11:       ; %bb.0:1008; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01009; GFX11-NEXT:    v_mov_b32_e32 v0, 01010; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1011; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]1012; GFX11-NEXT:    s_waitcnt vmcnt(0)1013; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]1014; GFX11-NEXT:    s_endpgm1015  %val = load <2 x half>, ptr addrspace(1) %in1016  store <2 x half> %val, ptr addrspace(1) %out1017  ret void1018}1019 1020define amdgpu_kernel void @global_load_store_v4f16(ptr addrspace(1) %in, ptr addrspace(1) %out) #0 {1021; CIVI-LABEL: global_load_store_v4f16:1022; CIVI:       ; %bb.0:1023; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01024; CIVI-NEXT:    s_add_i32 s12, s12, s171025; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s131026; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81027; CIVI-NEXT:    s_waitcnt lgkmcnt(0)1028; CIVI-NEXT:    v_mov_b32_e32 v0, s01029; CIVI-NEXT:    v_mov_b32_e32 v1, s11030; CIVI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]1031; CIVI-NEXT:    v_mov_b32_e32 v2, s21032; CIVI-NEXT:    v_mov_b32_e32 v3, s31033; CIVI-NEXT:    s_waitcnt vmcnt(0)1034; CIVI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1035; CIVI-NEXT:    s_endpgm1036;1037; GFX11-LABEL: global_load_store_v4f16:1038; GFX11:       ; %bb.0:1039; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01040; GFX11-NEXT:    v_mov_b32_e32 v2, 01041; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1042; GFX11-NEXT:    global_load_b64 v[0:1], v2, s[0:1]1043; GFX11-NEXT:    s_waitcnt vmcnt(0)1044; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[2:3]1045; GFX11-NEXT:    s_endpgm1046  %val = load <4 x half>, ptr addrspace(1) %in1047  store <4 x half> %val, ptr addrspace(1) %out1048  ret void1049}1050 1051define amdgpu_kernel void @global_load_store_v8f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1052; CIVI-LABEL: global_load_store_v8f16:1053; CIVI:       ; %bb.0:1054; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01055; CIVI-NEXT:    s_add_i32 s12, s12, s171056; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s131057; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81058; CIVI-NEXT:    s_waitcnt lgkmcnt(0)1059; CIVI-NEXT:    v_mov_b32_e32 v0, s21060; CIVI-NEXT:    v_mov_b32_e32 v1, s31061; CIVI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]1062; CIVI-NEXT:    v_mov_b32_e32 v4, s01063; CIVI-NEXT:    v_mov_b32_e32 v5, s11064; CIVI-NEXT:    s_waitcnt vmcnt(0)1065; CIVI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1066; CIVI-NEXT:    s_endpgm1067;1068; GFX11-LABEL: global_load_store_v8f16:1069; GFX11:       ; %bb.0:1070; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01071; GFX11-NEXT:    v_mov_b32_e32 v4, 01072; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1073; GFX11-NEXT:    global_load_b128 v[0:3], v4, s[2:3]1074; GFX11-NEXT:    s_waitcnt vmcnt(0)1075; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[0:1]1076; GFX11-NEXT:    s_endpgm1077  %val = load <8 x half>, ptr addrspace(1) %in1078  store <8 x half> %val, ptr addrspace(1) %out1079  ret void1080}1081 1082define amdgpu_kernel void @global_extload_f16_to_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1083; CIVI-LABEL: global_extload_f16_to_f32:1084; CIVI:       ; %bb.0:1085; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01086; CIVI-NEXT:    s_add_i32 s12, s12, s171087; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s131088; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81089; CIVI-NEXT:    s_waitcnt lgkmcnt(0)1090; CIVI-NEXT:    v_mov_b32_e32 v0, s21091; CIVI-NEXT:    v_mov_b32_e32 v1, s31092; CIVI-NEXT:    flat_load_ushort v0, v[0:1]1093; CIVI-NEXT:    v_mov_b32_e32 v1, s11094; CIVI-NEXT:    s_waitcnt vmcnt(0)1095; CIVI-NEXT:    v_cvt_f32_f16_e32 v2, v01096; CIVI-NEXT:    v_mov_b32_e32 v0, s01097; CIVI-NEXT:    flat_store_dword v[0:1], v21098; CIVI-NEXT:    s_endpgm1099;1100; GFX11-TRUE16-LABEL: global_extload_f16_to_f32:1101; GFX11-TRUE16:       ; %bb.0:1102; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01103; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 01104; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1105; GFX11-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3]1106; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1107; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l1108; GFX11-TRUE16-NEXT:    global_store_b32 v1, v0, s[0:1]1109; GFX11-TRUE16-NEXT:    s_endpgm1110;1111; GFX11-FAKE16-LABEL: global_extload_f16_to_f32:1112; GFX11-FAKE16:       ; %bb.0:1113; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01114; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 01115; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1116; GFX11-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]1117; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1118; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v1, v11119; GFX11-FAKE16-NEXT:    global_store_b32 v0, v1, s[0:1]1120; GFX11-FAKE16-NEXT:    s_endpgm1121  %val = load half, ptr addrspace(1) %in1122  %cvt = fpext half %val to float1123  store float %cvt, ptr addrspace(1) %out1124  ret void1125}1126 1127define amdgpu_kernel void @global_extload_v2f16_to_v2f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1128; CI-LABEL: global_extload_v2f16_to_v2f32:1129; CI:       ; %bb.0:1130; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01131; CI-NEXT:    s_add_i32 s12, s12, s171132; CI-NEXT:    s_mov_b32 flat_scratch_lo, s131133; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81134; CI-NEXT:    s_waitcnt lgkmcnt(0)1135; CI-NEXT:    v_mov_b32_e32 v0, s21136; CI-NEXT:    v_mov_b32_e32 v1, s31137; CI-NEXT:    flat_load_dword v1, v[0:1]1138; CI-NEXT:    v_mov_b32_e32 v2, s01139; CI-NEXT:    v_mov_b32_e32 v3, s11140; CI-NEXT:    s_waitcnt vmcnt(0)1141; CI-NEXT:    v_cvt_f32_f16_e32 v0, v11142; CI-NEXT:    v_lshrrev_b32_e32 v1, 16, v11143; CI-NEXT:    v_cvt_f32_f16_e32 v1, v11144; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1145; CI-NEXT:    s_endpgm1146;1147; VI-LABEL: global_extload_v2f16_to_v2f32:1148; VI:       ; %bb.0:1149; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01150; VI-NEXT:    s_add_i32 s12, s12, s171151; VI-NEXT:    s_mov_b32 flat_scratch_lo, s131152; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81153; VI-NEXT:    s_waitcnt lgkmcnt(0)1154; VI-NEXT:    v_mov_b32_e32 v0, s21155; VI-NEXT:    v_mov_b32_e32 v1, s31156; VI-NEXT:    flat_load_dword v1, v[0:1]1157; VI-NEXT:    v_mov_b32_e32 v2, s01158; VI-NEXT:    v_mov_b32_e32 v3, s11159; VI-NEXT:    s_waitcnt vmcnt(0)1160; VI-NEXT:    v_cvt_f32_f16_e32 v0, v11161; VI-NEXT:    v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11162; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1163; VI-NEXT:    s_endpgm1164;1165; GFX11-TRUE16-LABEL: global_extload_v2f16_to_v2f32:1166; GFX11-TRUE16:       ; %bb.0:1167; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01168; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v2, 01169; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1170; GFX11-TRUE16-NEXT:    global_load_b32 v0, v2, s[2:3]1171; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1172; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v01173; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l1174; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1175; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v1, v1.l1176; GFX11-TRUE16-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1177; GFX11-TRUE16-NEXT:    s_endpgm1178;1179; GFX11-FAKE16-LABEL: global_extload_v2f16_to_v2f32:1180; GFX11-FAKE16:       ; %bb.0:1181; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01182; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v2, 01183; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1184; GFX11-FAKE16-NEXT:    global_load_b32 v0, v2, s[2:3]1185; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1186; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v01187; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v01188; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1189; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v1, v11190; GFX11-FAKE16-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1191; GFX11-FAKE16-NEXT:    s_endpgm1192  %val = load <2 x half>, ptr addrspace(1) %in1193  %cvt = fpext <2 x half> %val to <2 x float>1194  store <2 x float> %cvt, ptr addrspace(1) %out1195  ret void1196}1197 1198define amdgpu_kernel void @global_extload_v3f16_to_v3f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1199; CI-LABEL: global_extload_v3f16_to_v3f32:1200; CI:       ; %bb.0:1201; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01202; CI-NEXT:    s_add_i32 s12, s12, s171203; CI-NEXT:    s_mov_b32 flat_scratch_lo, s131204; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81205; CI-NEXT:    s_waitcnt lgkmcnt(0)1206; CI-NEXT:    v_mov_b32_e32 v0, s21207; CI-NEXT:    v_mov_b32_e32 v1, s31208; CI-NEXT:    flat_load_dwordx2 v[1:2], v[0:1]1209; CI-NEXT:    v_mov_b32_e32 v3, s01210; CI-NEXT:    v_mov_b32_e32 v4, s11211; CI-NEXT:    s_waitcnt vmcnt(0)1212; CI-NEXT:    v_cvt_f32_f16_e32 v0, v11213; CI-NEXT:    v_lshrrev_b32_e32 v1, 16, v11214; CI-NEXT:    v_cvt_f32_f16_e32 v2, v21215; CI-NEXT:    v_cvt_f32_f16_e32 v1, v11216; CI-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]1217; CI-NEXT:    s_endpgm1218;1219; VI-LABEL: global_extload_v3f16_to_v3f32:1220; VI:       ; %bb.0:1221; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01222; VI-NEXT:    s_add_i32 s12, s12, s171223; VI-NEXT:    s_mov_b32 flat_scratch_lo, s131224; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81225; VI-NEXT:    s_waitcnt lgkmcnt(0)1226; VI-NEXT:    v_mov_b32_e32 v0, s21227; VI-NEXT:    v_mov_b32_e32 v1, s31228; VI-NEXT:    flat_load_dwordx2 v[1:2], v[0:1]1229; VI-NEXT:    v_mov_b32_e32 v3, s01230; VI-NEXT:    v_mov_b32_e32 v4, s11231; VI-NEXT:    s_waitcnt vmcnt(0)1232; VI-NEXT:    v_cvt_f32_f16_e32 v0, v11233; VI-NEXT:    v_cvt_f32_f16_e32 v2, v21234; VI-NEXT:    v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11235; VI-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]1236; VI-NEXT:    s_endpgm1237;1238; GFX11-TRUE16-LABEL: global_extload_v3f16_to_v3f32:1239; GFX11-TRUE16:       ; %bb.0:1240; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01241; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v3, 01242; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1243; GFX11-TRUE16-NEXT:    global_load_b64 v[0:1], v3, s[2:3]1244; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1245; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v4, 16, v01246; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l1247; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v2, v1.l1248; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)1249; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v1, v4.l1250; GFX11-TRUE16-NEXT:    global_store_b96 v3, v[0:2], s[0:1]1251; GFX11-TRUE16-NEXT:    s_endpgm1252;1253; GFX11-FAKE16-LABEL: global_extload_v3f16_to_v3f32:1254; GFX11-FAKE16:       ; %bb.0:1255; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01256; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v3, 01257; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1258; GFX11-FAKE16-NEXT:    global_load_b64 v[0:1], v3, s[2:3]1259; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1260; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v4, 16, v01261; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v01262; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v2, v11263; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)1264; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v1, v41265; GFX11-FAKE16-NEXT:    global_store_b96 v3, v[0:2], s[0:1]1266; GFX11-FAKE16-NEXT:    s_endpgm1267  %val = load <3 x half>, ptr addrspace(1) %in1268  %cvt = fpext <3 x half> %val to <3 x float>1269  store <3 x float> %cvt, ptr addrspace(1) %out1270  ret void1271}1272 1273define amdgpu_kernel void @global_extload_v4f16_to_v4f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1274; CI-LABEL: global_extload_v4f16_to_v4f32:1275; CI:       ; %bb.0:1276; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01277; CI-NEXT:    s_add_i32 s12, s12, s171278; CI-NEXT:    s_mov_b32 flat_scratch_lo, s131279; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81280; CI-NEXT:    s_waitcnt lgkmcnt(0)1281; CI-NEXT:    v_mov_b32_e32 v0, s21282; CI-NEXT:    v_mov_b32_e32 v1, s31283; CI-NEXT:    flat_load_dwordx2 v[3:4], v[0:1]1284; CI-NEXT:    v_mov_b32_e32 v5, s11285; CI-NEXT:    s_waitcnt vmcnt(0)1286; CI-NEXT:    v_cvt_f32_f16_e32 v2, v41287; CI-NEXT:    v_lshrrev_b32_e32 v1, 16, v41288; CI-NEXT:    v_lshrrev_b32_e32 v4, 16, v31289; CI-NEXT:    v_cvt_f32_f16_e32 v0, v31290; CI-NEXT:    v_cvt_f32_f16_e32 v3, v11291; CI-NEXT:    v_cvt_f32_f16_e32 v1, v41292; CI-NEXT:    v_mov_b32_e32 v4, s01293; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1294; CI-NEXT:    s_endpgm1295;1296; VI-LABEL: global_extload_v4f16_to_v4f32:1297; VI:       ; %bb.0:1298; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01299; VI-NEXT:    s_add_i32 s12, s12, s171300; VI-NEXT:    s_mov_b32 flat_scratch_lo, s131301; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81302; VI-NEXT:    s_waitcnt lgkmcnt(0)1303; VI-NEXT:    v_mov_b32_e32 v0, s21304; VI-NEXT:    v_mov_b32_e32 v1, s31305; VI-NEXT:    flat_load_dwordx2 v[4:5], v[0:1]1306; VI-NEXT:    s_waitcnt vmcnt(0)1307; VI-NEXT:    v_cvt_f32_f16_e32 v0, v41308; VI-NEXT:    v_cvt_f32_f16_e32 v2, v51309; VI-NEXT:    v_cvt_f32_f16_sdwa v3, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11310; VI-NEXT:    v_cvt_f32_f16_sdwa v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11311; VI-NEXT:    v_mov_b32_e32 v4, s01312; VI-NEXT:    v_mov_b32_e32 v5, s11313; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1314; VI-NEXT:    s_endpgm1315;1316; GFX11-TRUE16-LABEL: global_extload_v4f16_to_v4f32:1317; GFX11-TRUE16:       ; %bb.0:1318; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01319; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v4, 01320; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1321; GFX11-TRUE16-NEXT:    global_load_b64 v[0:1], v4, s[2:3]1322; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1323; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v11324; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v5, 16, v01325; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l1326; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v2, v1.l1327; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1328; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v3, v3.l1329; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v1, v5.l1330; GFX11-TRUE16-NEXT:    global_store_b128 v4, v[0:3], s[0:1]1331; GFX11-TRUE16-NEXT:    s_endpgm1332;1333; GFX11-FAKE16-LABEL: global_extload_v4f16_to_v4f32:1334; GFX11-FAKE16:       ; %bb.0:1335; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01336; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v4, 01337; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1338; GFX11-FAKE16-NEXT:    global_load_b64 v[0:1], v4, s[2:3]1339; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1340; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v11341; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v5, 16, v01342; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v01343; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v2, v11344; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1345; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v3, v31346; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v1, v51347; GFX11-FAKE16-NEXT:    global_store_b128 v4, v[0:3], s[0:1]1348; GFX11-FAKE16-NEXT:    s_endpgm1349  %val = load <4 x half>, ptr addrspace(1) %in1350  %cvt = fpext <4 x half> %val to <4 x float>1351  store <4 x float> %cvt, ptr addrspace(1) %out1352  ret void1353}1354 1355define amdgpu_kernel void @global_extload_v8f16_to_v8f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1356; CI-LABEL: global_extload_v8f16_to_v8f32:1357; CI:       ; %bb.0:1358; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01359; CI-NEXT:    s_add_i32 s12, s12, s171360; CI-NEXT:    s_mov_b32 flat_scratch_lo, s131361; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81362; CI-NEXT:    s_waitcnt lgkmcnt(0)1363; CI-NEXT:    v_mov_b32_e32 v0, s21364; CI-NEXT:    v_mov_b32_e32 v1, s31365; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]1366; CI-NEXT:    s_add_u32 s2, s0, 161367; CI-NEXT:    s_addc_u32 s3, s1, 01368; CI-NEXT:    v_mov_b32_e32 v13, s11369; CI-NEXT:    v_mov_b32_e32 v12, s01370; CI-NEXT:    s_waitcnt vmcnt(0)1371; CI-NEXT:    v_cvt_f32_f16_e32 v10, v31372; CI-NEXT:    v_cvt_f32_f16_e32 v8, v21373; CI-NEXT:    v_lshrrev_b32_e32 v3, 16, v31374; CI-NEXT:    v_lshrrev_b32_e32 v2, 16, v21375; CI-NEXT:    v_cvt_f32_f16_e32 v6, v11376; CI-NEXT:    v_cvt_f32_f16_e32 v4, v01377; CI-NEXT:    v_lshrrev_b32_e32 v1, 16, v11378; CI-NEXT:    v_lshrrev_b32_e32 v0, 16, v01379; CI-NEXT:    v_cvt_f32_f16_e32 v11, v31380; CI-NEXT:    v_cvt_f32_f16_e32 v9, v21381; CI-NEXT:    v_cvt_f32_f16_e32 v7, v11382; CI-NEXT:    v_cvt_f32_f16_e32 v5, v01383; CI-NEXT:    v_mov_b32_e32 v0, s21384; CI-NEXT:    v_mov_b32_e32 v1, s31385; CI-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]1386; CI-NEXT:    flat_store_dwordx4 v[12:13], v[4:7]1387; CI-NEXT:    s_endpgm1388;1389; VI-LABEL: global_extload_v8f16_to_v8f32:1390; VI:       ; %bb.0:1391; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01392; VI-NEXT:    s_add_i32 s12, s12, s171393; VI-NEXT:    s_mov_b32 flat_scratch_lo, s131394; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81395; VI-NEXT:    s_waitcnt lgkmcnt(0)1396; VI-NEXT:    v_mov_b32_e32 v0, s21397; VI-NEXT:    v_mov_b32_e32 v1, s31398; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]1399; VI-NEXT:    s_add_u32 s2, s0, 161400; VI-NEXT:    s_addc_u32 s3, s1, 01401; VI-NEXT:    v_mov_b32_e32 v13, s11402; VI-NEXT:    v_mov_b32_e32 v12, s01403; VI-NEXT:    s_waitcnt vmcnt(0)1404; VI-NEXT:    v_cvt_f32_f16_e32 v10, v31405; VI-NEXT:    v_cvt_f32_f16_e32 v8, v21406; VI-NEXT:    v_cvt_f32_f16_sdwa v11, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11407; VI-NEXT:    v_cvt_f32_f16_sdwa v9, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11408; VI-NEXT:    v_cvt_f32_f16_e32 v6, v11409; VI-NEXT:    v_cvt_f32_f16_e32 v4, v01410; VI-NEXT:    v_cvt_f32_f16_sdwa v7, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11411; VI-NEXT:    v_cvt_f32_f16_sdwa v5, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11412; VI-NEXT:    v_mov_b32_e32 v0, s21413; VI-NEXT:    v_mov_b32_e32 v1, s31414; VI-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]1415; VI-NEXT:    flat_store_dwordx4 v[12:13], v[4:7]1416; VI-NEXT:    s_endpgm1417;1418; GFX11-TRUE16-LABEL: global_extload_v8f16_to_v8f32:1419; GFX11-TRUE16:       ; %bb.0:1420; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01421; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v12, 01422; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1423; GFX11-TRUE16-NEXT:    global_load_b128 v[0:3], v12, s[2:3]1424; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1425; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v5, 16, v31426; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v9, 16, v21427; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v6, v1.l1428; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v4, v0.l1429; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v11430; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v0, 16, v01431; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v10, v3.l1432; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v8, v2.l1433; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v11, v5.l1434; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v9, v9.l1435; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v7, v1.l1436; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v5, v0.l1437; GFX11-TRUE16-NEXT:    s_clause 0x11438; GFX11-TRUE16-NEXT:    global_store_b128 v12, v[8:11], s[0:1] offset:161439; GFX11-TRUE16-NEXT:    global_store_b128 v12, v[4:7], s[0:1]1440; GFX11-TRUE16-NEXT:    s_endpgm1441;1442; GFX11-FAKE16-LABEL: global_extload_v8f16_to_v8f32:1443; GFX11-FAKE16:       ; %bb.0:1444; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01445; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v12, 01446; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1447; GFX11-FAKE16-NEXT:    global_load_b128 v[0:3], v12, s[2:3]1448; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1449; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v5, 16, v31450; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v9, 16, v21451; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v6, v11452; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v4, v01453; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v11454; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v0, 16, v01455; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v10, v31456; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v8, v21457; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v11, v51458; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v9, v91459; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v7, v11460; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v5, v01461; GFX11-FAKE16-NEXT:    s_clause 0x11462; GFX11-FAKE16-NEXT:    global_store_b128 v12, v[8:11], s[0:1] offset:161463; GFX11-FAKE16-NEXT:    global_store_b128 v12, v[4:7], s[0:1]1464; GFX11-FAKE16-NEXT:    s_endpgm1465  %val = load <8 x half>, ptr addrspace(1) %in1466  %cvt = fpext <8 x half> %val to <8 x float>1467  store <8 x float> %cvt, ptr addrspace(1) %out1468  ret void1469}1470 1471define amdgpu_kernel void @global_extload_v16f16_to_v16f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1472; CI-LABEL: global_extload_v16f16_to_v16f32:1473; CI:       ; %bb.0:1474; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01475; CI-NEXT:    s_add_i32 s12, s12, s171476; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81477; CI-NEXT:    s_mov_b32 flat_scratch_lo, s131478; CI-NEXT:    s_waitcnt lgkmcnt(0)1479; CI-NEXT:    s_add_u32 s4, s2, 161480; CI-NEXT:    v_mov_b32_e32 v5, s31481; CI-NEXT:    s_addc_u32 s5, s3, 01482; CI-NEXT:    v_mov_b32_e32 v0, s41483; CI-NEXT:    v_mov_b32_e32 v4, s21484; CI-NEXT:    v_mov_b32_e32 v1, s51485; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]1486; CI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]1487; CI-NEXT:    s_add_u32 s2, s0, 161488; CI-NEXT:    s_addc_u32 s3, s1, 01489; CI-NEXT:    v_mov_b32_e32 v14, s31490; CI-NEXT:    v_mov_b32_e32 v13, s21491; CI-NEXT:    s_add_u32 s2, s0, 481492; CI-NEXT:    s_addc_u32 s3, s1, 01493; CI-NEXT:    s_waitcnt vmcnt(1)1494; CI-NEXT:    v_cvt_f32_f16_e32 v8, v11495; CI-NEXT:    s_waitcnt vmcnt(0)1496; CI-NEXT:    v_cvt_f32_f16_e32 v11, v71497; CI-NEXT:    v_cvt_f32_f16_e32 v9, v61498; CI-NEXT:    v_lshrrev_b32_e32 v7, 16, v71499; CI-NEXT:    v_lshrrev_b32_e32 v6, 16, v61500; CI-NEXT:    v_cvt_f32_f16_e32 v12, v71501; CI-NEXT:    v_cvt_f32_f16_e32 v10, v61502; CI-NEXT:    v_lshrrev_b32_e32 v1, 16, v11503; CI-NEXT:    v_lshrrev_b32_e32 v16, 16, v51504; CI-NEXT:    v_lshrrev_b32_e32 v17, 16, v41505; CI-NEXT:    flat_store_dwordx4 v[13:14], v[9:12]1506; CI-NEXT:    v_cvt_f32_f16_e32 v6, v01507; CI-NEXT:    v_cvt_f32_f16_e32 v12, v31508; CI-NEXT:    v_lshrrev_b32_e32 v3, 16, v31509; CI-NEXT:    v_lshrrev_b32_e32 v7, 16, v01510; CI-NEXT:    v_cvt_f32_f16_e32 v10, v21511; CI-NEXT:    v_lshrrev_b32_e32 v11, 16, v21512; CI-NEXT:    v_cvt_f32_f16_e32 v2, v51513; CI-NEXT:    v_cvt_f32_f16_e32 v0, v41514; CI-NEXT:    v_mov_b32_e32 v5, s11515; CI-NEXT:    v_cvt_f32_f16_e32 v9, v11516; CI-NEXT:    v_cvt_f32_f16_e32 v13, v31517; CI-NEXT:    v_cvt_f32_f16_e32 v3, v161518; CI-NEXT:    v_cvt_f32_f16_e32 v1, v171519; CI-NEXT:    v_mov_b32_e32 v4, s01520; CI-NEXT:    s_add_u32 s0, s0, 321521; CI-NEXT:    v_cvt_f32_f16_e32 v11, v111522; CI-NEXT:    s_addc_u32 s1, s1, 01523; CI-NEXT:    v_cvt_f32_f16_e32 v7, v71524; CI-NEXT:    v_mov_b32_e32 v15, s31525; CI-NEXT:    v_mov_b32_e32 v17, s11526; CI-NEXT:    v_mov_b32_e32 v14, s21527; CI-NEXT:    v_mov_b32_e32 v16, s01528; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1529; CI-NEXT:    flat_store_dwordx4 v[14:15], v[10:13]1530; CI-NEXT:    flat_store_dwordx4 v[16:17], v[6:9]1531; CI-NEXT:    s_endpgm1532;1533; VI-LABEL: global_extload_v16f16_to_v16f32:1534; VI:       ; %bb.0:1535; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01536; VI-NEXT:    s_add_i32 s12, s12, s171537; VI-NEXT:    s_mov_b32 flat_scratch_lo, s131538; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81539; VI-NEXT:    s_waitcnt lgkmcnt(0)1540; VI-NEXT:    v_mov_b32_e32 v0, s21541; VI-NEXT:    v_mov_b32_e32 v1, s31542; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]1543; VI-NEXT:    s_add_u32 s2, s2, 161544; VI-NEXT:    s_addc_u32 s3, s3, 01545; VI-NEXT:    v_mov_b32_e32 v5, s31546; VI-NEXT:    v_mov_b32_e32 v4, s21547; VI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]1548; VI-NEXT:    s_add_u32 s2, s0, 161549; VI-NEXT:    s_addc_u32 s3, s1, 01550; VI-NEXT:    v_mov_b32_e32 v19, s31551; VI-NEXT:    v_mov_b32_e32 v18, s21552; VI-NEXT:    s_add_u32 s2, s0, 481553; VI-NEXT:    v_mov_b32_e32 v17, s11554; VI-NEXT:    s_addc_u32 s3, s1, 01555; VI-NEXT:    v_mov_b32_e32 v16, s01556; VI-NEXT:    s_add_u32 s0, s0, 321557; VI-NEXT:    s_addc_u32 s1, s1, 01558; VI-NEXT:    v_mov_b32_e32 v21, s31559; VI-NEXT:    v_mov_b32_e32 v20, s21560; VI-NEXT:    s_waitcnt vmcnt(1)1561; VI-NEXT:    v_cvt_f32_f16_e32 v14, v31562; VI-NEXT:    v_cvt_f32_f16_e32 v12, v21563; VI-NEXT:    v_cvt_f32_f16_sdwa v15, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11564; VI-NEXT:    v_cvt_f32_f16_sdwa v13, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11565; VI-NEXT:    v_cvt_f32_f16_e32 v10, v11566; VI-NEXT:    v_cvt_f32_f16_e32 v8, v01567; VI-NEXT:    v_cvt_f32_f16_sdwa v11, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11568; VI-NEXT:    v_cvt_f32_f16_sdwa v9, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11569; VI-NEXT:    flat_store_dwordx4 v[18:19], v[12:15]1570; VI-NEXT:    s_waitcnt vmcnt(1)1571; VI-NEXT:    v_cvt_f32_f16_e32 v2, v51572; VI-NEXT:    v_cvt_f32_f16_e32 v14, v71573; VI-NEXT:    v_cvt_f32_f16_e32 v12, v61574; VI-NEXT:    v_cvt_f32_f16_sdwa v15, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11575; VI-NEXT:    v_cvt_f32_f16_sdwa v13, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11576; VI-NEXT:    v_cvt_f32_f16_e32 v0, v41577; VI-NEXT:    v_cvt_f32_f16_sdwa v3, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11578; VI-NEXT:    v_cvt_f32_f16_sdwa v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11579; VI-NEXT:    v_mov_b32_e32 v5, s11580; VI-NEXT:    v_mov_b32_e32 v4, s01581; VI-NEXT:    flat_store_dwordx4 v[16:17], v[8:11]1582; VI-NEXT:    flat_store_dwordx4 v[20:21], v[12:15]1583; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1584; VI-NEXT:    s_endpgm1585;1586; GFX11-TRUE16-LABEL: global_extload_v16f16_to_v16f32:1587; GFX11-TRUE16:       ; %bb.0:1588; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01589; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v20, 01590; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1591; GFX11-TRUE16-NEXT:    s_clause 0x11592; GFX11-TRUE16-NEXT:    global_load_b128 v[0:3], v20, s[2:3]1593; GFX11-TRUE16-NEXT:    global_load_b128 v[4:7], v20, s[2:3] offset:161594; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(1)1595; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v10, v1.l1596; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1597; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v18, v7.l1598; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v16, v6.l1599; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v7, 16, v71600; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v6, 16, v61601; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v8, v0.l1602; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v11603; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v9, 16, v01604; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v14, v3.l1605; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v12, v2.l1606; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v31607; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v13, 16, v21608; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v2, v5.l1609; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v4.l1610; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v5, 16, v51611; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v4, 16, v41612; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v19, v7.l1613; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v17, v6.l1614; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v11, v1.l1615; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v15, v3.l1616; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v3, v5.l1617; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v1, v4.l1618; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v13, v13.l1619; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v9, v9.l1620; GFX11-TRUE16-NEXT:    s_clause 0x31621; GFX11-TRUE16-NEXT:    global_store_b128 v20, v[16:19], s[0:1] offset:481622; GFX11-TRUE16-NEXT:    global_store_b128 v20, v[0:3], s[0:1] offset:321623; GFX11-TRUE16-NEXT:    global_store_b128 v20, v[12:15], s[0:1] offset:161624; GFX11-TRUE16-NEXT:    global_store_b128 v20, v[8:11], s[0:1]1625; GFX11-TRUE16-NEXT:    s_endpgm1626;1627; GFX11-FAKE16-LABEL: global_extload_v16f16_to_v16f32:1628; GFX11-FAKE16:       ; %bb.0:1629; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01630; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v20, 01631; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1632; GFX11-FAKE16-NEXT:    s_clause 0x11633; GFX11-FAKE16-NEXT:    global_load_b128 v[0:3], v20, s[2:3]1634; GFX11-FAKE16-NEXT:    global_load_b128 v[4:7], v20, s[2:3] offset:161635; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(1)1636; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v10, v11637; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1638; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v18, v71639; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v16, v61640; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v7, 16, v71641; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v6, 16, v61642; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v8, v01643; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v11644; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v9, 16, v01645; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v14, v31646; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v12, v21647; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v31648; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v13, 16, v21649; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v2, v51650; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v41651; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v5, 16, v51652; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v4, 16, v41653; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v19, v71654; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v17, v61655; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v11, v11656; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v15, v31657; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v3, v51658; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v1, v41659; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v13, v131660; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v9, v91661; GFX11-FAKE16-NEXT:    s_clause 0x31662; GFX11-FAKE16-NEXT:    global_store_b128 v20, v[16:19], s[0:1] offset:481663; GFX11-FAKE16-NEXT:    global_store_b128 v20, v[0:3], s[0:1] offset:321664; GFX11-FAKE16-NEXT:    global_store_b128 v20, v[12:15], s[0:1] offset:161665; GFX11-FAKE16-NEXT:    global_store_b128 v20, v[8:11], s[0:1]1666; GFX11-FAKE16-NEXT:    s_endpgm1667  %val = load <16 x half>, ptr addrspace(1) %in1668  %cvt = fpext <16 x half> %val to <16 x float>1669  store <16 x float> %cvt, ptr addrspace(1) %out1670  ret void1671}1672 1673define amdgpu_kernel void @global_extload_f16_to_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1674; CIVI-LABEL: global_extload_f16_to_f64:1675; CIVI:       ; %bb.0:1676; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01677; CIVI-NEXT:    s_add_i32 s12, s12, s171678; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s131679; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81680; CIVI-NEXT:    s_waitcnt lgkmcnt(0)1681; CIVI-NEXT:    v_mov_b32_e32 v0, s21682; CIVI-NEXT:    v_mov_b32_e32 v1, s31683; CIVI-NEXT:    flat_load_ushort v0, v[0:1]1684; CIVI-NEXT:    v_mov_b32_e32 v2, s01685; CIVI-NEXT:    v_mov_b32_e32 v3, s11686; CIVI-NEXT:    s_waitcnt vmcnt(0)1687; CIVI-NEXT:    v_cvt_f32_f16_e32 v0, v01688; CIVI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01689; CIVI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1690; CIVI-NEXT:    s_endpgm1691;1692; GFX11-TRUE16-LABEL: global_extload_f16_to_f64:1693; GFX11-TRUE16:       ; %bb.0:1694; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01695; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v2, 01696; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1697; GFX11-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]1698; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1699; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l1700; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1701; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01702; GFX11-TRUE16-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1703; GFX11-TRUE16-NEXT:    s_endpgm1704;1705; GFX11-FAKE16-LABEL: global_extload_f16_to_f64:1706; GFX11-FAKE16:       ; %bb.0:1707; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01708; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v2, 01709; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1710; GFX11-FAKE16-NEXT:    global_load_u16 v0, v2, s[2:3]1711; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1712; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v01713; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1714; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01715; GFX11-FAKE16-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1716; GFX11-FAKE16-NEXT:    s_endpgm1717  %val = load half, ptr addrspace(1) %in1718  %cvt = fpext half %val to double1719  store double %cvt, ptr addrspace(1) %out1720  ret void1721}1722 1723define amdgpu_kernel void @global_extload_v2f16_to_v2f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1724; CI-LABEL: global_extload_v2f16_to_v2f64:1725; CI:       ; %bb.0:1726; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01727; CI-NEXT:    s_add_i32 s12, s12, s171728; CI-NEXT:    s_mov_b32 flat_scratch_lo, s131729; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81730; CI-NEXT:    s_waitcnt lgkmcnt(0)1731; CI-NEXT:    v_mov_b32_e32 v0, s21732; CI-NEXT:    v_mov_b32_e32 v1, s31733; CI-NEXT:    flat_load_dword v0, v[0:1]1734; CI-NEXT:    v_mov_b32_e32 v4, s01735; CI-NEXT:    v_mov_b32_e32 v5, s11736; CI-NEXT:    s_waitcnt vmcnt(0)1737; CI-NEXT:    v_lshrrev_b32_e32 v1, 16, v01738; CI-NEXT:    v_cvt_f32_f16_e32 v0, v01739; CI-NEXT:    v_cvt_f32_f16_e32 v2, v11740; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01741; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v21742; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1743; CI-NEXT:    s_endpgm1744;1745; VI-LABEL: global_extload_v2f16_to_v2f64:1746; VI:       ; %bb.0:1747; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01748; VI-NEXT:    s_add_i32 s12, s12, s171749; VI-NEXT:    s_mov_b32 flat_scratch_lo, s131750; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81751; VI-NEXT:    s_waitcnt lgkmcnt(0)1752; VI-NEXT:    v_mov_b32_e32 v0, s21753; VI-NEXT:    v_mov_b32_e32 v1, s31754; VI-NEXT:    flat_load_dword v0, v[0:1]1755; VI-NEXT:    v_mov_b32_e32 v4, s01756; VI-NEXT:    v_mov_b32_e32 v5, s11757; VI-NEXT:    s_waitcnt vmcnt(0)1758; VI-NEXT:    v_cvt_f32_f16_e32 v1, v01759; VI-NEXT:    v_cvt_f32_f16_sdwa v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11760; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v11761; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v21762; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1763; VI-NEXT:    s_endpgm1764;1765; GFX11-TRUE16-LABEL: global_extload_v2f16_to_v2f64:1766; GFX11-TRUE16:       ; %bb.0:1767; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01768; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v4, 01769; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1770; GFX11-TRUE16-NEXT:    global_load_b32 v0, v4, s[2:3]1771; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1772; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v01773; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l1774; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1775; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v2, v1.l1776; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01777; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1778; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v21779; GFX11-TRUE16-NEXT:    global_store_b128 v4, v[0:3], s[0:1]1780; GFX11-TRUE16-NEXT:    s_endpgm1781;1782; GFX11-FAKE16-LABEL: global_extload_v2f16_to_v2f64:1783; GFX11-FAKE16:       ; %bb.0:1784; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01785; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v4, 01786; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1787; GFX11-FAKE16-NEXT:    global_load_b32 v0, v4, s[2:3]1788; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1789; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v01790; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v01791; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1792; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v2, v11793; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01794; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1795; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v21796; GFX11-FAKE16-NEXT:    global_store_b128 v4, v[0:3], s[0:1]1797; GFX11-FAKE16-NEXT:    s_endpgm1798  %val = load <2 x half>, ptr addrspace(1) %in1799  %cvt = fpext <2 x half> %val to <2 x double>1800  store <2 x double> %cvt, ptr addrspace(1) %out1801  ret void1802}1803 1804define amdgpu_kernel void @global_extload_v3f16_to_v3f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1805; CI-LABEL: global_extload_v3f16_to_v3f64:1806; CI:       ; %bb.0:1807; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01808; CI-NEXT:    s_add_i32 s12, s12, s171809; CI-NEXT:    s_mov_b32 flat_scratch_lo, s131810; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81811; CI-NEXT:    s_waitcnt lgkmcnt(0)1812; CI-NEXT:    v_mov_b32_e32 v0, s21813; CI-NEXT:    v_mov_b32_e32 v1, s31814; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]1815; CI-NEXT:    s_add_u32 s2, s0, 161816; CI-NEXT:    s_addc_u32 s3, s1, 01817; CI-NEXT:    v_mov_b32_e32 v7, s31818; CI-NEXT:    v_mov_b32_e32 v6, s21819; CI-NEXT:    s_waitcnt vmcnt(0)1820; CI-NEXT:    v_cvt_f32_f16_e32 v1, v11821; CI-NEXT:    v_lshrrev_b32_e32 v2, 16, v01822; CI-NEXT:    v_cvt_f32_f16_e32 v0, v01823; CI-NEXT:    v_cvt_f32_f16_e32 v2, v21824; CI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v11825; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01826; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v21827; CI-NEXT:    flat_store_dwordx2 v[6:7], v[4:5]1828; CI-NEXT:    v_mov_b32_e32 v5, s11829; CI-NEXT:    v_mov_b32_e32 v4, s01830; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1831; CI-NEXT:    s_endpgm1832;1833; VI-LABEL: global_extload_v3f16_to_v3f64:1834; VI:       ; %bb.0:1835; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01836; VI-NEXT:    s_add_i32 s12, s12, s171837; VI-NEXT:    s_mov_b32 flat_scratch_lo, s131838; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81839; VI-NEXT:    s_waitcnt lgkmcnt(0)1840; VI-NEXT:    v_mov_b32_e32 v0, s21841; VI-NEXT:    v_mov_b32_e32 v1, s31842; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]1843; VI-NEXT:    s_add_u32 s2, s0, 161844; VI-NEXT:    s_addc_u32 s3, s1, 01845; VI-NEXT:    v_mov_b32_e32 v5, s11846; VI-NEXT:    v_mov_b32_e32 v4, s01847; VI-NEXT:    s_waitcnt vmcnt(0)1848; VI-NEXT:    v_cvt_f32_f16_e32 v3, v11849; VI-NEXT:    v_cvt_f32_f16_e32 v2, v01850; VI-NEXT:    v_cvt_f32_f16_sdwa v8, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11851; VI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v31852; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v21853; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v81854; VI-NEXT:    v_mov_b32_e32 v9, s31855; VI-NEXT:    v_mov_b32_e32 v8, s21856; VI-NEXT:    flat_store_dwordx2 v[8:9], v[6:7]1857; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]1858; VI-NEXT:    s_endpgm1859;1860; GFX11-TRUE16-LABEL: global_extload_v3f16_to_v3f64:1861; GFX11-TRUE16:       ; %bb.0:1862; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01863; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v6, 01864; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1865; GFX11-TRUE16-NEXT:    global_load_b64 v[0:1], v6, s[2:3]1866; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1867; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v01868; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v3, v1.l1869; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l1870; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)1871; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v2, v2.l1872; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[4:5], v31873; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)1874; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01875; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v21876; GFX11-TRUE16-NEXT:    s_clause 0x11877; GFX11-TRUE16-NEXT:    global_store_b64 v6, v[4:5], s[0:1] offset:161878; GFX11-TRUE16-NEXT:    global_store_b128 v6, v[0:3], s[0:1]1879; GFX11-TRUE16-NEXT:    s_endpgm1880;1881; GFX11-FAKE16-LABEL: global_extload_v3f16_to_v3f64:1882; GFX11-FAKE16:       ; %bb.0:1883; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01884; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v6, 01885; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1886; GFX11-FAKE16-NEXT:    global_load_b64 v[0:1], v6, s[2:3]1887; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)1888; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v01889; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v3, v11890; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v01891; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)1892; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v2, v21893; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[4:5], v31894; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)1895; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01896; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v21897; GFX11-FAKE16-NEXT:    s_clause 0x11898; GFX11-FAKE16-NEXT:    global_store_b64 v6, v[4:5], s[0:1] offset:161899; GFX11-FAKE16-NEXT:    global_store_b128 v6, v[0:3], s[0:1]1900; GFX11-FAKE16-NEXT:    s_endpgm1901  %val = load <3 x half>, ptr addrspace(1) %in1902  %cvt = fpext <3 x half> %val to <3 x double>1903  store <3 x double> %cvt, ptr addrspace(1) %out1904  ret void1905}1906 1907define amdgpu_kernel void @global_extload_v4f16_to_v4f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1908; CI-LABEL: global_extload_v4f16_to_v4f64:1909; CI:       ; %bb.0:1910; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01911; CI-NEXT:    s_add_i32 s12, s12, s171912; CI-NEXT:    s_mov_b32 flat_scratch_lo, s131913; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81914; CI-NEXT:    s_waitcnt lgkmcnt(0)1915; CI-NEXT:    v_mov_b32_e32 v0, s21916; CI-NEXT:    v_mov_b32_e32 v1, s31917; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]1918; CI-NEXT:    s_add_u32 s2, s0, 161919; CI-NEXT:    s_addc_u32 s3, s1, 01920; CI-NEXT:    v_mov_b32_e32 v9, s11921; CI-NEXT:    v_mov_b32_e32 v8, s01922; CI-NEXT:    s_waitcnt vmcnt(0)1923; CI-NEXT:    v_lshrrev_b32_e32 v2, 16, v11924; CI-NEXT:    v_cvt_f32_f16_e32 v3, v11925; CI-NEXT:    v_cvt_f32_f16_e32 v1, v01926; CI-NEXT:    v_lshrrev_b32_e32 v0, 16, v01927; CI-NEXT:    v_cvt_f32_f16_e32 v2, v21928; CI-NEXT:    v_cvt_f32_f16_e32 v10, v01929; CI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v31930; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v11931; CI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v21932; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v101933; CI-NEXT:    v_mov_b32_e32 v11, s31934; CI-NEXT:    v_mov_b32_e32 v10, s21935; CI-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]1936; CI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]1937; CI-NEXT:    s_endpgm1938;1939; VI-LABEL: global_extload_v4f16_to_v4f64:1940; VI:       ; %bb.0:1941; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01942; VI-NEXT:    s_add_i32 s12, s12, s171943; VI-NEXT:    s_mov_b32 flat_scratch_lo, s131944; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81945; VI-NEXT:    s_waitcnt lgkmcnt(0)1946; VI-NEXT:    v_mov_b32_e32 v0, s21947; VI-NEXT:    v_mov_b32_e32 v1, s31948; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]1949; VI-NEXT:    s_add_u32 s2, s0, 161950; VI-NEXT:    s_addc_u32 s3, s1, 01951; VI-NEXT:    v_mov_b32_e32 v9, s11952; VI-NEXT:    v_mov_b32_e32 v8, s01953; VI-NEXT:    s_waitcnt vmcnt(0)1954; VI-NEXT:    v_cvt_f32_f16_e32 v3, v11955; VI-NEXT:    v_cvt_f32_f16_sdwa v6, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11956; VI-NEXT:    v_cvt_f32_f16_e32 v2, v01957; VI-NEXT:    v_cvt_f32_f16_sdwa v10, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_11958; VI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v31959; VI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v61960; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v21961; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v101962; VI-NEXT:    v_mov_b32_e32 v11, s31963; VI-NEXT:    v_mov_b32_e32 v10, s21964; VI-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]1965; VI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]1966; VI-NEXT:    s_endpgm1967;1968; GFX11-TRUE16-LABEL: global_extload_v4f16_to_v4f64:1969; GFX11-TRUE16:       ; %bb.0:1970; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01971; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v8, 01972; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1973; GFX11-TRUE16-NEXT:    global_load_b64 v[0:1], v8, s[2:3]1974; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)1975; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v11976; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v01977; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v4, v1.l1978; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v0, v0.l1979; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1980; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v2, v2.l1981; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v3, v3.l1982; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1983; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[4:5], v41984; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v01985; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1986; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[6:7], v21987; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v31988; GFX11-TRUE16-NEXT:    s_clause 0x11989; GFX11-TRUE16-NEXT:    global_store_b128 v8, v[4:7], s[0:1] offset:161990; GFX11-TRUE16-NEXT:    global_store_b128 v8, v[0:3], s[0:1]1991; GFX11-TRUE16-NEXT:    s_endpgm1992;1993; GFX11-FAKE16-LABEL: global_extload_v4f16_to_v4f64:1994; GFX11-FAKE16:       ; %bb.0:1995; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01996; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v8, 01997; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1998; GFX11-FAKE16-NEXT:    global_load_b64 v[0:1], v8, s[2:3]1999; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)2000; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v12001; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v02002; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v4, v12003; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v0, v02004; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)2005; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v2, v22006; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v3, v32007; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)2008; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[4:5], v42009; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v02010; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)2011; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[6:7], v22012; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v32013; GFX11-FAKE16-NEXT:    s_clause 0x12014; GFX11-FAKE16-NEXT:    global_store_b128 v8, v[4:7], s[0:1] offset:162015; GFX11-FAKE16-NEXT:    global_store_b128 v8, v[0:3], s[0:1]2016; GFX11-FAKE16-NEXT:    s_endpgm2017  %val = load <4 x half>, ptr addrspace(1) %in2018  %cvt = fpext <4 x half> %val to <4 x double>2019  store <4 x double> %cvt, ptr addrspace(1) %out2020  ret void2021}2022 2023define amdgpu_kernel void @global_extload_v8f16_to_v8f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2024; CI-LABEL: global_extload_v8f16_to_v8f64:2025; CI:       ; %bb.0:2026; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02027; CI-NEXT:    s_add_i32 s12, s12, s172028; CI-NEXT:    s_mov_b32 flat_scratch_lo, s132029; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82030; CI-NEXT:    s_waitcnt lgkmcnt(0)2031; CI-NEXT:    v_mov_b32_e32 v0, s22032; CI-NEXT:    v_mov_b32_e32 v1, s32033; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2034; CI-NEXT:    s_add_u32 s2, s0, 482035; CI-NEXT:    s_addc_u32 s3, s1, 02036; CI-NEXT:    v_mov_b32_e32 v7, s32037; CI-NEXT:    v_mov_b32_e32 v6, s22038; CI-NEXT:    s_add_u32 s2, s0, 322039; CI-NEXT:    v_mov_b32_e32 v13, s12040; CI-NEXT:    s_addc_u32 s3, s1, 02041; CI-NEXT:    v_mov_b32_e32 v12, s02042; CI-NEXT:    s_add_u32 s0, s0, 162043; CI-NEXT:    v_mov_b32_e32 v15, s32044; CI-NEXT:    s_addc_u32 s1, s1, 02045; CI-NEXT:    v_mov_b32_e32 v14, s22046; CI-NEXT:    s_waitcnt vmcnt(0)2047; CI-NEXT:    v_lshrrev_b32_e32 v4, 16, v32048; CI-NEXT:    v_cvt_f32_f16_e32 v3, v32049; CI-NEXT:    v_lshrrev_b32_e32 v5, 16, v22050; CI-NEXT:    v_cvt_f32_f16_e32 v8, v22051; CI-NEXT:    v_cvt_f32_f16_e32 v2, v42052; CI-NEXT:    v_lshrrev_b32_e32 v9, 16, v12053; CI-NEXT:    v_cvt_f32_f16_e32 v10, v12054; CI-NEXT:    v_lshrrev_b32_e32 v11, 16, v02055; CI-NEXT:    v_cvt_f32_f16_e32 v4, v02056; CI-NEXT:    v_cvt_f32_f16_e32 v16, v52057; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v32058; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v22059; CI-NEXT:    v_cvt_f32_f16_e32 v17, v92060; CI-NEXT:    v_cvt_f32_f16_e32 v18, v112061; CI-NEXT:    v_cvt_f64_f32_e32 v[8:9], v82062; CI-NEXT:    flat_store_dwordx4 v[6:7], v[0:3]2063; CI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v42064; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v102065; CI-NEXT:    v_cvt_f64_f32_e32 v[10:11], v162066; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v172067; CI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v182068; CI-NEXT:    v_mov_b32_e32 v17, s12069; CI-NEXT:    v_mov_b32_e32 v16, s02070; CI-NEXT:    flat_store_dwordx4 v[14:15], v[8:11]2071; CI-NEXT:    flat_store_dwordx4 v[16:17], v[0:3]2072; CI-NEXT:    flat_store_dwordx4 v[12:13], v[4:7]2073; CI-NEXT:    s_endpgm2074;2075; VI-LABEL: global_extload_v8f16_to_v8f64:2076; VI:       ; %bb.0:2077; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02078; VI-NEXT:    s_add_i32 s12, s12, s172079; VI-NEXT:    s_mov_b32 flat_scratch_lo, s132080; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82081; VI-NEXT:    s_waitcnt lgkmcnt(0)2082; VI-NEXT:    v_mov_b32_e32 v0, s22083; VI-NEXT:    v_mov_b32_e32 v1, s32084; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2085; VI-NEXT:    s_add_u32 s2, s0, 482086; VI-NEXT:    s_addc_u32 s3, s1, 02087; VI-NEXT:    v_mov_b32_e32 v8, s32088; VI-NEXT:    v_mov_b32_e32 v7, s22089; VI-NEXT:    s_add_u32 s2, s0, 322090; VI-NEXT:    v_mov_b32_e32 v13, s12091; VI-NEXT:    s_addc_u32 s3, s1, 02092; VI-NEXT:    v_mov_b32_e32 v12, s02093; VI-NEXT:    s_add_u32 s0, s0, 162094; VI-NEXT:    v_mov_b32_e32 v15, s32095; VI-NEXT:    s_addc_u32 s1, s1, 02096; VI-NEXT:    v_mov_b32_e32 v14, s22097; VI-NEXT:    s_waitcnt vmcnt(0)2098; VI-NEXT:    v_cvt_f32_f16_e32 v9, v02099; VI-NEXT:    v_cvt_f32_f16_sdwa v16, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12100; VI-NEXT:    v_cvt_f32_f16_e32 v0, v32101; VI-NEXT:    v_cvt_f32_f16_sdwa v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12102; VI-NEXT:    v_cvt_f32_f16_e32 v10, v12103; VI-NEXT:    v_cvt_f32_f16_e32 v11, v22104; VI-NEXT:    v_cvt_f64_f32_e32 v[3:4], v02105; VI-NEXT:    v_cvt_f64_f32_e32 v[5:6], v52106; VI-NEXT:    v_cvt_f32_f16_sdwa v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12107; VI-NEXT:    v_cvt_f32_f16_sdwa v17, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12108; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v92109; VI-NEXT:    flat_store_dwordx4 v[7:8], v[3:6]2110; VI-NEXT:    v_cvt_f64_f32_e32 v[8:9], v112111; VI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v102112; VI-NEXT:    v_cvt_f64_f32_e32 v[10:11], v22113; VI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v172114; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v162115; VI-NEXT:    v_mov_b32_e32 v17, s12116; VI-NEXT:    v_mov_b32_e32 v16, s02117; VI-NEXT:    flat_store_dwordx4 v[14:15], v[8:11]2118; VI-NEXT:    flat_store_dwordx4 v[16:17], v[4:7]2119; VI-NEXT:    flat_store_dwordx4 v[12:13], v[0:3]2120; VI-NEXT:    s_endpgm2121;2122; GFX11-TRUE16-LABEL: global_extload_v8f16_to_v8f64:2123; GFX11-TRUE16:       ; %bb.0:2124; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02125; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v16, 02126; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2127; GFX11-TRUE16-NEXT:    global_load_b128 v[0:3], v16, s[2:3]2128; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)2129; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v4, v0.l2130; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v5, 16, v02131; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v6, v1.l2132; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v9, 16, v32133; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v8, v2.l2134; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v22135; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v7, 16, v12136; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v3, v3.l2137; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v42138; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v17, v5.l2139; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[4:5], v62140; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v6, v9.l2141; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v2, v2.l2142; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v7, v7.l2143; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[12:13], v32144; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[8:9], v82145; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[14:15], v62146; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[10:11], v22147; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[6:7], v72148; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v172149; GFX11-TRUE16-NEXT:    s_clause 0x32150; GFX11-TRUE16-NEXT:    global_store_b128 v16, v[12:15], s[0:1] offset:482151; GFX11-TRUE16-NEXT:    global_store_b128 v16, v[8:11], s[0:1] offset:322152; GFX11-TRUE16-NEXT:    global_store_b128 v16, v[4:7], s[0:1] offset:162153; GFX11-TRUE16-NEXT:    global_store_b128 v16, v[0:3], s[0:1]2154; GFX11-TRUE16-NEXT:    s_endpgm2155;2156; GFX11-FAKE16-LABEL: global_extload_v8f16_to_v8f64:2157; GFX11-FAKE16:       ; %bb.0:2158; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02159; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v16, 02160; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2161; GFX11-FAKE16-NEXT:    global_load_b128 v[0:3], v16, s[2:3]2162; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)2163; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v4, v02164; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v5, 16, v02165; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v6, v12166; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v9, 16, v32167; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v8, v22168; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v22169; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v7, 16, v12170; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v3, v32171; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v42172; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v17, v52173; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[4:5], v62174; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v6, v92175; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v2, v22176; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v7, v72177; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[12:13], v32178; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[8:9], v82179; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[14:15], v62180; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[10:11], v22181; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[6:7], v72182; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v172183; GFX11-FAKE16-NEXT:    s_clause 0x32184; GFX11-FAKE16-NEXT:    global_store_b128 v16, v[12:15], s[0:1] offset:482185; GFX11-FAKE16-NEXT:    global_store_b128 v16, v[8:11], s[0:1] offset:322186; GFX11-FAKE16-NEXT:    global_store_b128 v16, v[4:7], s[0:1] offset:162187; GFX11-FAKE16-NEXT:    global_store_b128 v16, v[0:3], s[0:1]2188; GFX11-FAKE16-NEXT:    s_endpgm2189  %val = load <8 x half>, ptr addrspace(1) %in2190  %cvt = fpext <8 x half> %val to <8 x double>2191  store <8 x double> %cvt, ptr addrspace(1) %out2192  ret void2193}2194 2195define amdgpu_kernel void @global_extload_v16f16_to_v16f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2196; CI-LABEL: global_extload_v16f16_to_v16f64:2197; CI:       ; %bb.0:2198; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02199; CI-NEXT:    s_add_i32 s12, s12, s172200; CI-NEXT:    s_mov_b32 flat_scratch_lo, s132201; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82202; CI-NEXT:    s_waitcnt lgkmcnt(0)2203; CI-NEXT:    v_mov_b32_e32 v0, s22204; CI-NEXT:    v_mov_b32_e32 v1, s32205; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2206; CI-NEXT:    s_add_u32 s2, s2, 162207; CI-NEXT:    s_addc_u32 s3, s3, 02208; CI-NEXT:    v_mov_b32_e32 v5, s32209; CI-NEXT:    v_mov_b32_e32 v4, s22210; CI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]2211; CI-NEXT:    s_add_u32 s2, s0, 482212; CI-NEXT:    s_addc_u32 s3, s1, 02213; CI-NEXT:    v_mov_b32_e32 v15, s32214; CI-NEXT:    v_mov_b32_e32 v14, s22215; CI-NEXT:    s_add_u32 s2, s0, 322216; CI-NEXT:    s_addc_u32 s3, s1, 02217; CI-NEXT:    v_mov_b32_e32 v17, s32218; CI-NEXT:    v_mov_b32_e32 v16, s22219; CI-NEXT:    s_add_u32 s2, s0, 162220; CI-NEXT:    s_addc_u32 s3, s1, 02221; CI-NEXT:    v_mov_b32_e32 v19, s32222; CI-NEXT:    v_mov_b32_e32 v18, s22223; CI-NEXT:    s_add_u32 s2, s0, 0x702224; CI-NEXT:    s_addc_u32 s3, s1, 02225; CI-NEXT:    v_mov_b32_e32 v13, s12226; CI-NEXT:    v_mov_b32_e32 v12, s02227; CI-NEXT:    s_waitcnt vmcnt(1)2228; CI-NEXT:    v_lshrrev_b32_e32 v8, 16, v32229; CI-NEXT:    v_cvt_f32_f16_e32 v3, v32230; CI-NEXT:    v_cvt_f32_f16_e32 v10, v82231; CI-NEXT:    s_waitcnt vmcnt(0)2232; CI-NEXT:    v_lshrrev_b32_e32 v20, 16, v52233; CI-NEXT:    v_cvt_f64_f32_e32 v[8:9], v32234; CI-NEXT:    v_lshrrev_b32_e32 v3, 16, v22235; CI-NEXT:    v_cvt_f64_f32_e32 v[10:11], v102236; CI-NEXT:    v_cvt_f32_f16_e32 v2, v22237; CI-NEXT:    v_cvt_f32_f16_e32 v3, v32238; CI-NEXT:    v_cvt_f32_f16_e32 v21, v52239; CI-NEXT:    flat_store_dwordx4 v[14:15], v[8:11]2240; CI-NEXT:    v_mov_b32_e32 v15, s32241; CI-NEXT:    v_cvt_f64_f32_e32 v[8:9], v22242; CI-NEXT:    v_cvt_f64_f32_e32 v[10:11], v32243; CI-NEXT:    v_lshrrev_b32_e32 v2, 16, v12244; CI-NEXT:    v_cvt_f32_f16_e32 v1, v12245; CI-NEXT:    v_cvt_f32_f16_e32 v2, v22246; CI-NEXT:    flat_store_dwordx4 v[16:17], v[8:11]2247; CI-NEXT:    v_mov_b32_e32 v14, s22248; CI-NEXT:    v_lshrrev_b32_e32 v8, 16, v02249; CI-NEXT:    v_cvt_f32_f16_e32 v9, v02250; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v12251; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v22252; CI-NEXT:    v_cvt_f32_f16_e32 v8, v82253; CI-NEXT:    v_lshrrev_b32_e32 v10, 16, v72254; CI-NEXT:    v_cvt_f32_f16_e32 v7, v72255; CI-NEXT:    flat_store_dwordx4 v[18:19], v[0:3]2256; CI-NEXT:    v_lshrrev_b32_e32 v11, 16, v62257; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v92258; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v82259; CI-NEXT:    v_cvt_f32_f16_e32 v8, v102260; CI-NEXT:    s_add_u32 s2, s0, 0x602261; CI-NEXT:    v_cvt_f32_f16_e32 v6, v62262; CI-NEXT:    v_cvt_f32_f16_e32 v10, v112263; CI-NEXT:    s_addc_u32 s3, s1, 02264; CI-NEXT:    v_lshrrev_b32_e32 v5, 16, v42265; CI-NEXT:    flat_store_dwordx4 v[12:13], v[0:3]2266; CI-NEXT:    v_mov_b32_e32 v17, s32267; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v72268; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v82269; CI-NEXT:    v_cvt_f32_f16_e32 v7, v202270; CI-NEXT:    v_cvt_f32_f16_e32 v4, v42271; CI-NEXT:    v_cvt_f32_f16_e32 v12, v52272; CI-NEXT:    v_mov_b32_e32 v16, s22273; CI-NEXT:    s_add_u32 s2, s0, 0x502274; CI-NEXT:    s_addc_u32 s3, s1, 02275; CI-NEXT:    v_cvt_f64_f32_e32 v[8:9], v62276; CI-NEXT:    v_cvt_f64_f32_e32 v[10:11], v102277; CI-NEXT:    s_add_u32 s0, s0, 642278; CI-NEXT:    flat_store_dwordx4 v[14:15], v[0:3]2279; CI-NEXT:    s_addc_u32 s1, s1, 02280; CI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v212281; CI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v72282; CI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v42283; CI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v122284; CI-NEXT:    v_mov_b32_e32 v19, s32285; CI-NEXT:    v_mov_b32_e32 v13, s12286; CI-NEXT:    v_mov_b32_e32 v18, s22287; CI-NEXT:    v_mov_b32_e32 v12, s02288; CI-NEXT:    flat_store_dwordx4 v[16:17], v[8:11]2289; CI-NEXT:    flat_store_dwordx4 v[18:19], v[0:3]2290; CI-NEXT:    flat_store_dwordx4 v[12:13], v[4:7]2291; CI-NEXT:    s_endpgm2292;2293; VI-LABEL: global_extload_v16f16_to_v16f64:2294; VI:       ; %bb.0:2295; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02296; VI-NEXT:    s_add_i32 s12, s12, s172297; VI-NEXT:    s_mov_b32 flat_scratch_lo, s132298; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82299; VI-NEXT:    s_waitcnt lgkmcnt(0)2300; VI-NEXT:    v_mov_b32_e32 v0, s22301; VI-NEXT:    v_mov_b32_e32 v1, s32302; VI-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]2303; VI-NEXT:    s_add_u32 s2, s2, 162304; VI-NEXT:    s_addc_u32 s3, s3, 02305; VI-NEXT:    v_mov_b32_e32 v0, s22306; VI-NEXT:    v_mov_b32_e32 v1, s32307; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2308; VI-NEXT:    s_add_u32 s2, s0, 482309; VI-NEXT:    s_addc_u32 s3, s1, 02310; VI-NEXT:    v_mov_b32_e32 v14, s32311; VI-NEXT:    v_mov_b32_e32 v13, s22312; VI-NEXT:    s_add_u32 s2, s0, 322313; VI-NEXT:    s_addc_u32 s3, s1, 02314; VI-NEXT:    v_mov_b32_e32 v16, s32315; VI-NEXT:    v_mov_b32_e32 v15, s22316; VI-NEXT:    s_add_u32 s2, s0, 162317; VI-NEXT:    s_addc_u32 s3, s1, 02318; VI-NEXT:    v_mov_b32_e32 v18, s32319; VI-NEXT:    v_mov_b32_e32 v17, s22320; VI-NEXT:    s_add_u32 s2, s0, 0x502321; VI-NEXT:    v_mov_b32_e32 v12, s12322; VI-NEXT:    s_addc_u32 s3, s1, 02323; VI-NEXT:    v_mov_b32_e32 v11, s02324; VI-NEXT:    s_waitcnt vmcnt(1)2325; VI-NEXT:    v_cvt_f32_f16_e32 v8, v72326; VI-NEXT:    v_cvt_f32_f16_sdwa v9, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12327; VI-NEXT:    v_cvt_f64_f32_e32 v[7:8], v82328; VI-NEXT:    v_cvt_f64_f32_e32 v[9:10], v92329; VI-NEXT:    flat_store_dwordx4 v[13:14], v[7:10]2330; VI-NEXT:    s_nop 02331; VI-NEXT:    v_cvt_f32_f16_e32 v7, v62332; VI-NEXT:    v_cvt_f32_f16_sdwa v8, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12333; VI-NEXT:    s_waitcnt vmcnt(1)2334; VI-NEXT:    v_cvt_f32_f16_e32 v10, v22335; VI-NEXT:    v_mov_b32_e32 v14, s32336; VI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v72337; VI-NEXT:    v_cvt_f64_f32_e32 v[8:9], v82338; VI-NEXT:    v_mov_b32_e32 v13, s22339; VI-NEXT:    s_add_u32 s2, s0, 642340; VI-NEXT:    s_addc_u32 s3, s1, 02341; VI-NEXT:    flat_store_dwordx4 v[15:16], v[6:9]2342; VI-NEXT:    v_mov_b32_e32 v16, s32343; VI-NEXT:    v_cvt_f32_f16_e32 v6, v52344; VI-NEXT:    v_cvt_f32_f16_sdwa v7, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12345; VI-NEXT:    v_cvt_f32_f16_e32 v8, v42346; VI-NEXT:    v_cvt_f32_f16_sdwa v9, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12347; VI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v62348; VI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v72349; VI-NEXT:    v_mov_b32_e32 v15, s22350; VI-NEXT:    s_add_u32 s2, s0, 0x702351; VI-NEXT:    s_addc_u32 s3, s1, 02352; VI-NEXT:    flat_store_dwordx4 v[17:18], v[4:7]2353; VI-NEXT:    v_cvt_f32_f16_sdwa v17, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12354; VI-NEXT:    v_cvt_f64_f32_e32 v[4:5], v82355; VI-NEXT:    v_cvt_f64_f32_e32 v[6:7], v92356; VI-NEXT:    v_cvt_f32_f16_sdwa v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12357; VI-NEXT:    v_cvt_f32_f16_sdwa v8, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12358; VI-NEXT:    v_cvt_f32_f16_e32 v2, v12359; VI-NEXT:    flat_store_dwordx4 v[11:12], v[4:7]2360; VI-NEXT:    v_cvt_f32_f16_sdwa v11, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_12361; VI-NEXT:    v_cvt_f32_f16_e32 v7, v32362; VI-NEXT:    v_cvt_f64_f32_e32 v[3:4], v92363; VI-NEXT:    v_cvt_f32_f16_e32 v9, v02364; VI-NEXT:    v_cvt_f64_f32_e32 v[1:2], v22365; VI-NEXT:    v_cvt_f64_f32_e32 v[5:6], v102366; VI-NEXT:    v_cvt_f64_f32_e32 v[11:12], v112367; VI-NEXT:    v_cvt_f64_f32_e32 v[9:10], v92368; VI-NEXT:    s_add_u32 s0, s0, 0x602369; VI-NEXT:    flat_store_dwordx4 v[13:14], v[1:4]2370; VI-NEXT:    s_addc_u32 s1, s1, 02371; VI-NEXT:    v_cvt_f64_f32_e32 v[0:1], v72372; VI-NEXT:    v_cvt_f64_f32_e32 v[2:3], v172373; VI-NEXT:    v_cvt_f64_f32_e32 v[7:8], v82374; VI-NEXT:    v_mov_b32_e32 v20, s32375; VI-NEXT:    v_mov_b32_e32 v14, s12376; VI-NEXT:    v_mov_b32_e32 v19, s22377; VI-NEXT:    v_mov_b32_e32 v13, s02378; VI-NEXT:    flat_store_dwordx4 v[15:16], v[9:12]2379; VI-NEXT:    flat_store_dwordx4 v[19:20], v[0:3]2380; VI-NEXT:    flat_store_dwordx4 v[13:14], v[5:8]2381; VI-NEXT:    s_endpgm2382;2383; GFX11-TRUE16-LABEL: global_extload_v16f16_to_v16f64:2384; GFX11-TRUE16:       ; %bb.0:2385; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02386; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v32, 02387; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2388; GFX11-TRUE16-NEXT:    s_clause 0x12389; GFX11-TRUE16-NEXT:    global_load_b128 v[0:3], v32, s[2:3]2390; GFX11-TRUE16-NEXT:    global_load_b128 v[4:7], v32, s[2:3] offset:162391; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(1)2392; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v10, v1.l2393; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)2394; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v23, 16, v52395; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v11, 16, v12396; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v19, 16, v42397; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v15, v7.l2398; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v7, 16, v72399; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v14, v6.l2400; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v6, 16, v62401; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v13, v3.l2402; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v32403; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v12, v2.l2404; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v22405; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v18, v4.l2406; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v22, v5.l2407; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[4:5], v102408; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v10, v23.l2409; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v34, v11.l2410; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v11, v19.l2411; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v9, 16, v02412; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v7, v7.l2413; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v6, v6.l2414; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v8, v0.l2415; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v3, v3.l2416; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v2, v2.l2417; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[28:29], v222418; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[30:31], v102419; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[24:25], v182420; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[26:27], v112421; GFX11-TRUE16-NEXT:    v_cvt_f32_f16_e32 v33, v9.l2422; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[20:21], v152423; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[22:23], v72424; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[16:17], v142425; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[18:19], v62426; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v82427; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[8:9], v122428; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[12:13], v132429; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[14:15], v32430; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[10:11], v22431; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[6:7], v342432; GFX11-TRUE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v332433; GFX11-TRUE16-NEXT:    s_clause 0x72434; GFX11-TRUE16-NEXT:    global_store_b128 v32, v[28:31], s[0:1] offset:802435; GFX11-TRUE16-NEXT:    global_store_b128 v32, v[24:27], s[0:1] offset:642436; GFX11-TRUE16-NEXT:    global_store_b128 v32, v[20:23], s[0:1] offset:1122437; GFX11-TRUE16-NEXT:    global_store_b128 v32, v[16:19], s[0:1] offset:962438; GFX11-TRUE16-NEXT:    global_store_b128 v32, v[12:15], s[0:1] offset:482439; GFX11-TRUE16-NEXT:    global_store_b128 v32, v[8:11], s[0:1] offset:322440; GFX11-TRUE16-NEXT:    global_store_b128 v32, v[4:7], s[0:1] offset:162441; GFX11-TRUE16-NEXT:    global_store_b128 v32, v[0:3], s[0:1]2442; GFX11-TRUE16-NEXT:    s_endpgm2443;2444; GFX11-FAKE16-LABEL: global_extload_v16f16_to_v16f64:2445; GFX11-FAKE16:       ; %bb.0:2446; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02447; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v32, 02448; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2449; GFX11-FAKE16-NEXT:    s_clause 0x12450; GFX11-FAKE16-NEXT:    global_load_b128 v[0:3], v32, s[2:3]2451; GFX11-FAKE16-NEXT:    global_load_b128 v[4:7], v32, s[2:3] offset:162452; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(1)2453; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v10, v12454; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)2455; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v23, 16, v52456; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v11, 16, v12457; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v19, 16, v42458; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v15, v72459; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v7, 16, v72460; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v14, v62461; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v6, 16, v62462; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v13, v32463; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v3, 16, v32464; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v12, v22465; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v22466; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v18, v42467; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v22, v52468; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[4:5], v102469; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v10, v232470; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v34, v112471; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v11, v192472; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v9, 16, v02473; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v7, v72474; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v6, v62475; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v8, v02476; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v3, v32477; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v2, v22478; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[28:29], v222479; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[30:31], v102480; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[24:25], v182481; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[26:27], v112482; GFX11-FAKE16-NEXT:    v_cvt_f32_f16_e32 v33, v92483; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[20:21], v152484; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[22:23], v72485; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[16:17], v142486; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[18:19], v62487; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[0:1], v82488; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[8:9], v122489; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[12:13], v132490; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[14:15], v32491; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[10:11], v22492; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[6:7], v342493; GFX11-FAKE16-NEXT:    v_cvt_f64_f32_e32 v[2:3], v332494; GFX11-FAKE16-NEXT:    s_clause 0x72495; GFX11-FAKE16-NEXT:    global_store_b128 v32, v[28:31], s[0:1] offset:802496; GFX11-FAKE16-NEXT:    global_store_b128 v32, v[24:27], s[0:1] offset:642497; GFX11-FAKE16-NEXT:    global_store_b128 v32, v[20:23], s[0:1] offset:1122498; GFX11-FAKE16-NEXT:    global_store_b128 v32, v[16:19], s[0:1] offset:962499; GFX11-FAKE16-NEXT:    global_store_b128 v32, v[12:15], s[0:1] offset:482500; GFX11-FAKE16-NEXT:    global_store_b128 v32, v[8:11], s[0:1] offset:322501; GFX11-FAKE16-NEXT:    global_store_b128 v32, v[4:7], s[0:1] offset:162502; GFX11-FAKE16-NEXT:    global_store_b128 v32, v[0:3], s[0:1]2503; GFX11-FAKE16-NEXT:    s_endpgm2504  %val = load <16 x half>, ptr addrspace(1) %in2505  %cvt = fpext <16 x half> %val to <16 x double>2506  store <16 x double> %cvt, ptr addrspace(1) %out2507  ret void2508}2509 2510define amdgpu_kernel void @global_truncstore_f32_to_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2511; CIVI-LABEL: global_truncstore_f32_to_f16:2512; CIVI:       ; %bb.0:2513; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02514; CIVI-NEXT:    s_add_i32 s12, s12, s172515; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s132516; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82517; CIVI-NEXT:    s_waitcnt lgkmcnt(0)2518; CIVI-NEXT:    v_mov_b32_e32 v0, s22519; CIVI-NEXT:    v_mov_b32_e32 v1, s32520; CIVI-NEXT:    flat_load_dword v0, v[0:1]2521; CIVI-NEXT:    v_mov_b32_e32 v1, s12522; CIVI-NEXT:    s_waitcnt vmcnt(0)2523; CIVI-NEXT:    v_cvt_f16_f32_e32 v2, v02524; CIVI-NEXT:    v_mov_b32_e32 v0, s02525; CIVI-NEXT:    flat_store_short v[0:1], v22526; CIVI-NEXT:    s_endpgm2527;2528; GFX11-TRUE16-LABEL: global_truncstore_f32_to_f16:2529; GFX11-TRUE16:       ; %bb.0:2530; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02531; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 02532; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2533; GFX11-TRUE16-NEXT:    global_load_b32 v0, v1, s[2:3]2534; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)2535; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.l, v02536; GFX11-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]2537; GFX11-TRUE16-NEXT:    s_endpgm2538;2539; GFX11-FAKE16-LABEL: global_truncstore_f32_to_f16:2540; GFX11-FAKE16:       ; %bb.0:2541; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02542; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 02543; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2544; GFX11-FAKE16-NEXT:    global_load_b32 v1, v0, s[2:3]2545; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)2546; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v1, v12547; GFX11-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2548; GFX11-FAKE16-NEXT:    s_endpgm2549  %val = load float, ptr addrspace(1) %in2550  %cvt = fptrunc float %val to half2551  store half %cvt, ptr addrspace(1) %out2552  ret void2553}2554 2555define amdgpu_kernel void @global_truncstore_v2f32_to_v2f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2556; CI-LABEL: global_truncstore_v2f32_to_v2f16:2557; CI:       ; %bb.0:2558; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02559; CI-NEXT:    s_add_i32 s12, s12, s172560; CI-NEXT:    s_mov_b32 flat_scratch_lo, s132561; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82562; CI-NEXT:    s_waitcnt lgkmcnt(0)2563; CI-NEXT:    v_mov_b32_e32 v0, s22564; CI-NEXT:    v_mov_b32_e32 v1, s32565; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]2566; CI-NEXT:    s_waitcnt vmcnt(0)2567; CI-NEXT:    v_cvt_f16_f32_e32 v2, v12568; CI-NEXT:    v_cvt_f16_f32_e32 v3, v02569; CI-NEXT:    v_mov_b32_e32 v0, s02570; CI-NEXT:    v_mov_b32_e32 v1, s12571; CI-NEXT:    v_lshlrev_b32_e32 v2, 16, v22572; CI-NEXT:    v_or_b32_e32 v2, v3, v22573; CI-NEXT:    flat_store_dword v[0:1], v22574; CI-NEXT:    s_endpgm2575;2576; VI-LABEL: global_truncstore_v2f32_to_v2f16:2577; VI:       ; %bb.0:2578; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02579; VI-NEXT:    s_add_i32 s12, s12, s172580; VI-NEXT:    s_mov_b32 flat_scratch_lo, s132581; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82582; VI-NEXT:    s_waitcnt lgkmcnt(0)2583; VI-NEXT:    v_mov_b32_e32 v0, s22584; VI-NEXT:    v_mov_b32_e32 v1, s32585; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]2586; VI-NEXT:    s_waitcnt vmcnt(0)2587; VI-NEXT:    v_cvt_f16_f32_sdwa v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD2588; VI-NEXT:    v_cvt_f16_f32_e32 v3, v02589; VI-NEXT:    v_mov_b32_e32 v0, s02590; VI-NEXT:    v_mov_b32_e32 v1, s12591; VI-NEXT:    v_or_b32_e32 v2, v3, v22592; VI-NEXT:    flat_store_dword v[0:1], v22593; VI-NEXT:    s_endpgm2594;2595; GFX11-TRUE16-LABEL: global_truncstore_v2f32_to_v2f16:2596; GFX11-TRUE16:       ; %bb.0:2597; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02598; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v3, 02599; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2600; GFX11-TRUE16-NEXT:    global_load_b64 v[1:2], v3, s[2:3]2601; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)2602; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.l, v22603; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.h, v12604; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2605; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.h, v0.l2606; GFX11-TRUE16-NEXT:    global_store_b32 v3, v0, s[0:1]2607; GFX11-TRUE16-NEXT:    s_endpgm2608;2609; GFX11-FAKE16-LABEL: global_truncstore_v2f32_to_v2f16:2610; GFX11-FAKE16:       ; %bb.0:2611; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02612; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v2, 02613; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2614; GFX11-FAKE16-NEXT:    global_load_b64 v[0:1], v2, s[2:3]2615; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)2616; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v1, v12617; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v0, v02618; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2619; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v12620; GFX11-FAKE16-NEXT:    global_store_b32 v2, v0, s[0:1]2621; GFX11-FAKE16-NEXT:    s_endpgm2622  %val = load <2 x float>, ptr addrspace(1) %in2623  %cvt = fptrunc <2 x float> %val to <2 x half>2624  store <2 x half> %cvt, ptr addrspace(1) %out2625  ret void2626}2627 2628define amdgpu_kernel void @global_truncstore_v3f32_to_v3f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2629; CI-LABEL: global_truncstore_v3f32_to_v3f16:2630; CI:       ; %bb.0:2631; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02632; CI-NEXT:    s_add_i32 s12, s12, s172633; CI-NEXT:    s_mov_b32 flat_scratch_lo, s132634; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82635; CI-NEXT:    s_waitcnt lgkmcnt(0)2636; CI-NEXT:    v_mov_b32_e32 v0, s22637; CI-NEXT:    v_mov_b32_e32 v1, s32638; CI-NEXT:    flat_load_dwordx3 v[0:2], v[0:1]2639; CI-NEXT:    s_add_u32 s2, s0, 42640; CI-NEXT:    s_addc_u32 s3, s1, 02641; CI-NEXT:    s_waitcnt vmcnt(0)2642; CI-NEXT:    v_cvt_f16_f32_e32 v3, v12643; CI-NEXT:    v_cvt_f16_f32_e32 v2, v22644; CI-NEXT:    v_cvt_f16_f32_e32 v4, v02645; CI-NEXT:    v_mov_b32_e32 v0, s22646; CI-NEXT:    v_mov_b32_e32 v1, s32647; CI-NEXT:    v_lshlrev_b32_e32 v3, 16, v32648; CI-NEXT:    flat_store_short v[0:1], v22649; CI-NEXT:    v_mov_b32_e32 v0, s02650; CI-NEXT:    v_or_b32_e32 v2, v4, v32651; CI-NEXT:    v_mov_b32_e32 v1, s12652; CI-NEXT:    flat_store_dword v[0:1], v22653; CI-NEXT:    s_endpgm2654;2655; VI-LABEL: global_truncstore_v3f32_to_v3f16:2656; VI:       ; %bb.0:2657; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02658; VI-NEXT:    s_add_i32 s12, s12, s172659; VI-NEXT:    s_mov_b32 flat_scratch_lo, s132660; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82661; VI-NEXT:    s_waitcnt lgkmcnt(0)2662; VI-NEXT:    v_mov_b32_e32 v0, s22663; VI-NEXT:    v_mov_b32_e32 v1, s32664; VI-NEXT:    flat_load_dwordx3 v[0:2], v[0:1]2665; VI-NEXT:    s_add_u32 s2, s0, 42666; VI-NEXT:    s_addc_u32 s3, s1, 02667; VI-NEXT:    s_waitcnt vmcnt(0)2668; VI-NEXT:    v_cvt_f16_f32_e32 v2, v22669; VI-NEXT:    v_cvt_f16_f32_sdwa v3, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD2670; VI-NEXT:    v_cvt_f16_f32_e32 v4, v02671; VI-NEXT:    v_mov_b32_e32 v0, s22672; VI-NEXT:    v_mov_b32_e32 v1, s32673; VI-NEXT:    flat_store_short v[0:1], v22674; VI-NEXT:    v_mov_b32_e32 v0, s02675; VI-NEXT:    v_or_b32_e32 v3, v4, v32676; VI-NEXT:    v_mov_b32_e32 v1, s12677; VI-NEXT:    flat_store_dword v[0:1], v32678; VI-NEXT:    s_endpgm2679;2680; GFX11-TRUE16-LABEL: global_truncstore_v3f32_to_v3f16:2681; GFX11-TRUE16:       ; %bb.0:2682; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02683; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v3, 02684; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2685; GFX11-TRUE16-NEXT:    global_load_b96 v[0:2], v3, s[2:3]2686; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)2687; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v1.l, v12688; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.l, v02689; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.h, v22690; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)2691; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v1, v0.l, v1.l2692; GFX11-TRUE16-NEXT:    s_clause 0x12693; GFX11-TRUE16-NEXT:    global_store_d16_hi_b16 v3, v0, s[0:1] offset:42694; GFX11-TRUE16-NEXT:    global_store_b32 v3, v1, s[0:1]2695; GFX11-TRUE16-NEXT:    s_endpgm2696;2697; GFX11-FAKE16-LABEL: global_truncstore_v3f32_to_v3f16:2698; GFX11-FAKE16:       ; %bb.0:2699; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02700; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v3, 02701; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2702; GFX11-FAKE16-NEXT:    global_load_b96 v[0:2], v3, s[2:3]2703; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)2704; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v1, v12705; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v0, v02706; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v2, v22707; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)2708; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v12709; GFX11-FAKE16-NEXT:    s_clause 0x12710; GFX11-FAKE16-NEXT:    global_store_b16 v3, v2, s[0:1] offset:42711; GFX11-FAKE16-NEXT:    global_store_b32 v3, v0, s[0:1]2712; GFX11-FAKE16-NEXT:    s_endpgm2713  %val = load <3 x float>, ptr addrspace(1) %in2714  %cvt = fptrunc <3 x float> %val to <3 x half>2715  store <3 x half> %cvt, ptr addrspace(1) %out2716  ret void2717}2718 2719define amdgpu_kernel void @global_truncstore_v4f32_to_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2720; CI-LABEL: global_truncstore_v4f32_to_v4f16:2721; CI:       ; %bb.0:2722; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02723; CI-NEXT:    s_add_i32 s12, s12, s172724; CI-NEXT:    s_mov_b32 flat_scratch_lo, s132725; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82726; CI-NEXT:    s_waitcnt lgkmcnt(0)2727; CI-NEXT:    v_mov_b32_e32 v0, s22728; CI-NEXT:    v_mov_b32_e32 v1, s32729; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2730; CI-NEXT:    v_mov_b32_e32 v4, s02731; CI-NEXT:    v_mov_b32_e32 v5, s12732; CI-NEXT:    s_waitcnt vmcnt(0)2733; CI-NEXT:    v_cvt_f16_f32_e32 v3, v32734; CI-NEXT:    v_cvt_f16_f32_e32 v1, v12735; CI-NEXT:    v_cvt_f16_f32_e32 v2, v22736; CI-NEXT:    v_cvt_f16_f32_e32 v0, v02737; CI-NEXT:    v_lshlrev_b32_e32 v3, 16, v32738; CI-NEXT:    v_lshlrev_b32_e32 v6, 16, v12739; CI-NEXT:    v_or_b32_e32 v1, v2, v32740; CI-NEXT:    v_or_b32_e32 v0, v0, v62741; CI-NEXT:    flat_store_dwordx2 v[4:5], v[0:1]2742; CI-NEXT:    s_endpgm2743;2744; VI-LABEL: global_truncstore_v4f32_to_v4f16:2745; VI:       ; %bb.0:2746; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02747; VI-NEXT:    s_add_i32 s12, s12, s172748; VI-NEXT:    s_mov_b32 flat_scratch_lo, s132749; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82750; VI-NEXT:    s_waitcnt lgkmcnt(0)2751; VI-NEXT:    v_mov_b32_e32 v0, s22752; VI-NEXT:    v_mov_b32_e32 v1, s32753; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2754; VI-NEXT:    s_waitcnt vmcnt(0)2755; VI-NEXT:    v_cvt_f16_f32_sdwa v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD2756; VI-NEXT:    v_cvt_f16_f32_e32 v2, v22757; VI-NEXT:    v_cvt_f16_f32_sdwa v4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD2758; VI-NEXT:    v_cvt_f16_f32_e32 v5, v02759; VI-NEXT:    v_mov_b32_e32 v0, s02760; VI-NEXT:    v_mov_b32_e32 v1, s12761; VI-NEXT:    v_or_b32_e32 v3, v2, v32762; VI-NEXT:    v_or_b32_e32 v2, v5, v42763; VI-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]2764; VI-NEXT:    s_endpgm2765;2766; GFX11-TRUE16-LABEL: global_truncstore_v4f32_to_v4f16:2767; GFX11-TRUE16:       ; %bb.0:2768; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02769; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v4, 02770; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2771; GFX11-TRUE16-NEXT:    global_load_b128 v[0:3], v4, s[2:3]2772; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)2773; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v3.l, v32774; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v2.l, v22775; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v1.l, v12776; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.l, v02777; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)2778; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v2, v2.l, v3.l2779; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v1, v0.l, v1.l2780; GFX11-TRUE16-NEXT:    global_store_b64 v4, v[1:2], s[0:1]2781; GFX11-TRUE16-NEXT:    s_endpgm2782;2783; GFX11-FAKE16-LABEL: global_truncstore_v4f32_to_v4f16:2784; GFX11-FAKE16:       ; %bb.0:2785; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02786; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v4, 02787; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2788; GFX11-FAKE16-NEXT:    global_load_b128 v[0:3], v4, s[2:3]2789; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)2790; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v3, v32791; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v2, v22792; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v5, v12793; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v0, v02794; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)2795; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v1, v2, v32796; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v52797; GFX11-FAKE16-NEXT:    global_store_b64 v4, v[0:1], s[0:1]2798; GFX11-FAKE16-NEXT:    s_endpgm2799  %val = load <4 x float>, ptr addrspace(1) %in2800  %cvt = fptrunc <4 x float> %val to <4 x half>2801  store <4 x half> %cvt, ptr addrspace(1) %out2802  ret void2803}2804 2805define amdgpu_kernel void @global_truncstore_v8f32_to_v8f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2806; CI-LABEL: global_truncstore_v8f32_to_v8f16:2807; CI:       ; %bb.0:2808; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02809; CI-NEXT:    s_add_i32 s12, s12, s172810; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82811; CI-NEXT:    s_mov_b32 flat_scratch_lo, s132812; CI-NEXT:    s_waitcnt lgkmcnt(0)2813; CI-NEXT:    v_mov_b32_e32 v0, s22814; CI-NEXT:    v_mov_b32_e32 v1, s32815; CI-NEXT:    s_add_u32 s2, s2, 162816; CI-NEXT:    s_addc_u32 s3, s3, 02817; CI-NEXT:    v_mov_b32_e32 v5, s32818; CI-NEXT:    v_mov_b32_e32 v4, s22819; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2820; CI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]2821; CI-NEXT:    v_mov_b32_e32 v8, s02822; CI-NEXT:    v_mov_b32_e32 v9, s12823; CI-NEXT:    s_waitcnt vmcnt(1)2824; CI-NEXT:    v_cvt_f16_f32_e32 v3, v32825; CI-NEXT:    v_cvt_f16_f32_e32 v1, v12826; CI-NEXT:    s_waitcnt vmcnt(0)2827; CI-NEXT:    v_cvt_f16_f32_e32 v7, v72828; CI-NEXT:    v_cvt_f16_f32_e32 v5, v52829; CI-NEXT:    v_cvt_f16_f32_e32 v2, v22830; CI-NEXT:    v_cvt_f16_f32_e32 v0, v02831; CI-NEXT:    v_cvt_f16_f32_e32 v6, v62832; CI-NEXT:    v_cvt_f16_f32_e32 v4, v42833; CI-NEXT:    v_lshlrev_b32_e32 v3, 16, v32834; CI-NEXT:    v_lshlrev_b32_e32 v10, 16, v12835; CI-NEXT:    v_lshlrev_b32_e32 v7, 16, v72836; CI-NEXT:    v_lshlrev_b32_e32 v5, 16, v52837; CI-NEXT:    v_or_b32_e32 v1, v2, v32838; CI-NEXT:    v_or_b32_e32 v0, v0, v102839; CI-NEXT:    v_or_b32_e32 v3, v6, v72840; CI-NEXT:    v_or_b32_e32 v2, v4, v52841; CI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]2842; CI-NEXT:    s_endpgm2843;2844; VI-LABEL: global_truncstore_v8f32_to_v8f16:2845; VI:       ; %bb.0:2846; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02847; VI-NEXT:    s_add_i32 s12, s12, s172848; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82849; VI-NEXT:    s_mov_b32 flat_scratch_lo, s132850; VI-NEXT:    s_waitcnt lgkmcnt(0)2851; VI-NEXT:    v_mov_b32_e32 v0, s22852; VI-NEXT:    v_mov_b32_e32 v1, s32853; VI-NEXT:    s_add_u32 s2, s2, 162854; VI-NEXT:    s_addc_u32 s3, s3, 02855; VI-NEXT:    v_mov_b32_e32 v5, s32856; VI-NEXT:    v_mov_b32_e32 v4, s22857; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2858; VI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]2859; VI-NEXT:    v_mov_b32_e32 v8, s02860; VI-NEXT:    v_mov_b32_e32 v9, s12861; VI-NEXT:    s_waitcnt vmcnt(1)2862; VI-NEXT:    v_cvt_f16_f32_sdwa v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD2863; VI-NEXT:    v_cvt_f16_f32_e32 v2, v22864; VI-NEXT:    v_cvt_f16_f32_sdwa v10, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD2865; VI-NEXT:    v_cvt_f16_f32_e32 v0, v02866; VI-NEXT:    s_waitcnt vmcnt(0)2867; VI-NEXT:    v_cvt_f16_f32_sdwa v7, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD2868; VI-NEXT:    v_cvt_f16_f32_e32 v6, v62869; VI-NEXT:    v_cvt_f16_f32_sdwa v5, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD2870; VI-NEXT:    v_cvt_f16_f32_e32 v4, v42871; VI-NEXT:    v_or_b32_e32 v1, v2, v32872; VI-NEXT:    v_or_b32_e32 v0, v0, v102873; VI-NEXT:    v_or_b32_e32 v3, v6, v72874; VI-NEXT:    v_or_b32_e32 v2, v4, v52875; VI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]2876; VI-NEXT:    s_endpgm2877;2878; GFX11-TRUE16-LABEL: global_truncstore_v8f32_to_v8f16:2879; GFX11-TRUE16:       ; %bb.0:2880; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02881; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v8, 02882; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2883; GFX11-TRUE16-NEXT:    s_clause 0x12884; GFX11-TRUE16-NEXT:    global_load_b128 v[0:3], v8, s[2:3] offset:162885; GFX11-TRUE16-NEXT:    global_load_b128 v[4:7], v8, s[2:3]2886; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(1)2887; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v3.l, v32888; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v2.l, v22889; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v1.l, v12890; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.l, v02891; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)2892; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.h, v72893; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v1.h, v62894; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v5.l, v52895; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v4.l, v42896; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v3, v2.l, v3.l2897; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v2, v0.l, v1.l2898; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v1, v1.h, v0.h2899; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_4)2900; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v0, v4.l, v5.l2901; GFX11-TRUE16-NEXT:    global_store_b128 v8, v[0:3], s[0:1]2902; GFX11-TRUE16-NEXT:    s_endpgm2903;2904; GFX11-FAKE16-LABEL: global_truncstore_v8f32_to_v8f16:2905; GFX11-FAKE16:       ; %bb.0:2906; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02907; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v8, 02908; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2909; GFX11-FAKE16-NEXT:    s_clause 0x12910; GFX11-FAKE16-NEXT:    global_load_b128 v[0:3], v8, s[2:3] offset:162911; GFX11-FAKE16-NEXT:    global_load_b128 v[4:7], v8, s[2:3]2912; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(1)2913; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v3, v32914; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v2, v22915; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v1, v12916; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v0, v02917; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)2918; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v7, v72919; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v6, v62920; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v5, v52921; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v4, v42922; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v3, v2, v32923; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v2, v0, v12924; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v1, v6, v72925; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_4)2926; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v0, v4, v52927; GFX11-FAKE16-NEXT:    global_store_b128 v8, v[0:3], s[0:1]2928; GFX11-FAKE16-NEXT:    s_endpgm2929  %val = load <8 x float>, ptr addrspace(1) %in2930  %cvt = fptrunc <8 x float> %val to <8 x half>2931  store <8 x half> %cvt, ptr addrspace(1) %out2932  ret void2933}2934 2935define amdgpu_kernel void @global_truncstore_v16f32_to_v16f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2936; CI-LABEL: global_truncstore_v16f32_to_v16f16:2937; CI:       ; %bb.0:2938; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02939; CI-NEXT:    s_add_i32 s12, s12, s172940; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82941; CI-NEXT:    s_mov_b32 flat_scratch_lo, s132942; CI-NEXT:    s_waitcnt lgkmcnt(0)2943; CI-NEXT:    s_add_u32 s4, s2, 322944; CI-NEXT:    s_addc_u32 s5, s3, 02945; CI-NEXT:    v_mov_b32_e32 v0, s42946; CI-NEXT:    v_mov_b32_e32 v1, s52947; CI-NEXT:    s_add_u32 s4, s2, 482948; CI-NEXT:    s_addc_u32 s5, s3, 02949; CI-NEXT:    v_mov_b32_e32 v9, s32950; CI-NEXT:    v_mov_b32_e32 v4, s42951; CI-NEXT:    v_mov_b32_e32 v8, s22952; CI-NEXT:    s_add_u32 s2, s2, 162953; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]2954; CI-NEXT:    v_mov_b32_e32 v5, s52955; CI-NEXT:    s_addc_u32 s3, s3, 02956; CI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]2957; CI-NEXT:    v_mov_b32_e32 v13, s32958; CI-NEXT:    v_mov_b32_e32 v12, s22959; CI-NEXT:    flat_load_dwordx4 v[8:11], v[8:9]2960; CI-NEXT:    flat_load_dwordx4 v[12:15], v[12:13]2961; CI-NEXT:    s_add_u32 s2, s0, 162962; CI-NEXT:    s_addc_u32 s3, s1, 02963; CI-NEXT:    s_waitcnt vmcnt(3)2964; CI-NEXT:    v_cvt_f16_f32_e32 v3, v32965; CI-NEXT:    v_cvt_f16_f32_e32 v2, v22966; CI-NEXT:    v_cvt_f16_f32_e32 v1, v12967; CI-NEXT:    s_waitcnt vmcnt(2)2968; CI-NEXT:    v_cvt_f16_f32_e32 v7, v72969; CI-NEXT:    v_cvt_f16_f32_e32 v16, v52970; CI-NEXT:    v_cvt_f16_f32_e32 v0, v02971; CI-NEXT:    v_cvt_f16_f32_e32 v6, v62972; CI-NEXT:    v_cvt_f16_f32_e32 v17, v42973; CI-NEXT:    s_waitcnt vmcnt(1)2974; CI-NEXT:    v_cvt_f16_f32_e32 v11, v112975; CI-NEXT:    v_cvt_f16_f32_e32 v9, v92976; CI-NEXT:    s_waitcnt vmcnt(0)2977; CI-NEXT:    v_cvt_f16_f32_e32 v15, v152978; CI-NEXT:    v_cvt_f16_f32_e32 v13, v132979; CI-NEXT:    v_cvt_f16_f32_e32 v10, v102980; CI-NEXT:    v_cvt_f16_f32_e32 v8, v82981; CI-NEXT:    v_cvt_f16_f32_e32 v14, v142982; CI-NEXT:    v_cvt_f16_f32_e32 v12, v122983; CI-NEXT:    v_lshlrev_b32_e32 v3, 16, v32984; CI-NEXT:    v_mov_b32_e32 v5, s32985; CI-NEXT:    v_lshlrev_b32_e32 v18, 16, v12986; CI-NEXT:    v_or_b32_e32 v1, v2, v32987; CI-NEXT:    v_lshlrev_b32_e32 v2, 16, v72988; CI-NEXT:    v_lshlrev_b32_e32 v7, 16, v162989; CI-NEXT:    v_mov_b32_e32 v4, s22990; CI-NEXT:    v_or_b32_e32 v0, v0, v182991; CI-NEXT:    v_or_b32_e32 v3, v6, v22992; CI-NEXT:    v_or_b32_e32 v2, v17, v72993; CI-NEXT:    v_lshlrev_b32_e32 v6, 16, v112994; CI-NEXT:    v_lshlrev_b32_e32 v7, 16, v92995; CI-NEXT:    v_lshlrev_b32_e32 v9, 16, v152996; CI-NEXT:    v_lshlrev_b32_e32 v11, 16, v132997; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]2998; CI-NEXT:    v_mov_b32_e32 v5, s12999; CI-NEXT:    v_or_b32_e32 v1, v10, v63000; CI-NEXT:    v_or_b32_e32 v0, v8, v73001; CI-NEXT:    v_or_b32_e32 v3, v14, v93002; CI-NEXT:    v_or_b32_e32 v2, v12, v113003; CI-NEXT:    v_mov_b32_e32 v4, s03004; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]3005; CI-NEXT:    s_endpgm3006;3007; VI-LABEL: global_truncstore_v16f32_to_v16f16:3008; VI:       ; %bb.0:3009; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x03010; VI-NEXT:    s_add_i32 s12, s12, s173011; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83012; VI-NEXT:    s_mov_b32 flat_scratch_lo, s133013; VI-NEXT:    s_waitcnt lgkmcnt(0)3014; VI-NEXT:    s_add_u32 s4, s2, 323015; VI-NEXT:    s_addc_u32 s5, s3, 03016; VI-NEXT:    v_mov_b32_e32 v0, s43017; VI-NEXT:    v_mov_b32_e32 v1, s53018; VI-NEXT:    s_add_u32 s4, s2, 483019; VI-NEXT:    s_addc_u32 s5, s3, 03020; VI-NEXT:    v_mov_b32_e32 v9, s33021; VI-NEXT:    v_mov_b32_e32 v4, s43022; VI-NEXT:    v_mov_b32_e32 v8, s23023; VI-NEXT:    s_add_u32 s2, s2, 163024; VI-NEXT:    v_mov_b32_e32 v5, s53025; VI-NEXT:    s_addc_u32 s3, s3, 03026; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]3027; VI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]3028; VI-NEXT:    v_mov_b32_e32 v13, s33029; VI-NEXT:    v_mov_b32_e32 v12, s23030; VI-NEXT:    flat_load_dwordx4 v[8:11], v[8:9]3031; VI-NEXT:    flat_load_dwordx4 v[12:15], v[12:13]3032; VI-NEXT:    s_add_u32 s2, s0, 163033; VI-NEXT:    s_addc_u32 s3, s1, 03034; VI-NEXT:    s_waitcnt vmcnt(3)3035; VI-NEXT:    v_cvt_f16_f32_sdwa v3, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3036; VI-NEXT:    v_cvt_f16_f32_e32 v2, v23037; VI-NEXT:    v_cvt_f16_f32_sdwa v16, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3038; VI-NEXT:    v_cvt_f16_f32_e32 v0, v03039; VI-NEXT:    s_waitcnt vmcnt(2)3040; VI-NEXT:    v_cvt_f16_f32_sdwa v7, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3041; VI-NEXT:    v_cvt_f16_f32_e32 v6, v63042; VI-NEXT:    v_cvt_f16_f32_sdwa v17, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3043; VI-NEXT:    v_cvt_f16_f32_e32 v18, v43044; VI-NEXT:    s_waitcnt vmcnt(1)3045; VI-NEXT:    v_cvt_f16_f32_sdwa v11, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3046; VI-NEXT:    v_cvt_f16_f32_e32 v10, v103047; VI-NEXT:    v_cvt_f16_f32_sdwa v9, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3048; VI-NEXT:    v_cvt_f16_f32_e32 v8, v83049; VI-NEXT:    s_waitcnt vmcnt(0)3050; VI-NEXT:    v_cvt_f16_f32_sdwa v15, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3051; VI-NEXT:    v_cvt_f16_f32_e32 v14, v143052; VI-NEXT:    v_cvt_f16_f32_sdwa v13, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD3053; VI-NEXT:    v_cvt_f16_f32_e32 v12, v123054; VI-NEXT:    v_mov_b32_e32 v5, s33055; VI-NEXT:    v_mov_b32_e32 v4, s23056; VI-NEXT:    v_or_b32_e32 v1, v2, v33057; VI-NEXT:    v_or_b32_e32 v0, v0, v163058; VI-NEXT:    v_or_b32_e32 v3, v6, v73059; VI-NEXT:    v_or_b32_e32 v2, v18, v173060; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]3061; VI-NEXT:    v_mov_b32_e32 v5, s13062; VI-NEXT:    v_or_b32_e32 v1, v10, v113063; VI-NEXT:    v_or_b32_e32 v0, v8, v93064; VI-NEXT:    v_or_b32_e32 v3, v14, v153065; VI-NEXT:    v_or_b32_e32 v2, v12, v133066; VI-NEXT:    v_mov_b32_e32 v4, s03067; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]3068; VI-NEXT:    s_endpgm3069;3070; GFX11-TRUE16-LABEL: global_truncstore_v16f32_to_v16f16:3071; GFX11-TRUE16:       ; %bb.0:3072; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x03073; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v17, 03074; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3075; GFX11-TRUE16-NEXT:    s_clause 0x33076; GFX11-TRUE16-NEXT:    global_load_b128 v[0:3], v17, s[2:3] offset:163077; GFX11-TRUE16-NEXT:    global_load_b128 v[4:7], v17, s[2:3]3078; GFX11-TRUE16-NEXT:    global_load_b128 v[8:11], v17, s[2:3] offset:483079; GFX11-TRUE16-NEXT:    global_load_b128 v[12:15], v17, s[2:3] offset:323080; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(3)3081; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v3.l, v33082; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(2)3083; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v16.l, v53084; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v16.h, v43085; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(1)3086; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v4.l, v113087; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v4.h, v103088; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v5.l, v93089; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v5.h, v83090; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)3091; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v8.l, v153092; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v8.h, v143093; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v9.l, v133094; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v9.h, v123095; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v2.l, v23096; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v1.l, v13097; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.l, v03098; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v0.h, v73099; GFX11-TRUE16-NEXT:    v_cvt_f16_f32_e32 v1.h, v63100; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v7, v4.h, v4.l3101; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v6, v5.h, v5.l3102; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v5, v8.h, v8.l3103; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v4, v9.h, v9.l3104; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v3, v2.l, v3.l3105; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v2, v0.l, v1.l3106; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v1, v1.h, v0.h3107; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v0, v16.h, v16.l3108; GFX11-TRUE16-NEXT:    s_clause 0x13109; GFX11-TRUE16-NEXT:    global_store_b128 v17, v[4:7], s[0:1] offset:163110; GFX11-TRUE16-NEXT:    global_store_b128 v17, v[0:3], s[0:1]3111; GFX11-TRUE16-NEXT:    s_endpgm3112;3113; GFX11-FAKE16-LABEL: global_truncstore_v16f32_to_v16f16:3114; GFX11-FAKE16:       ; %bb.0:3115; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x03116; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v16, 03117; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3118; GFX11-FAKE16-NEXT:    s_clause 0x33119; GFX11-FAKE16-NEXT:    global_load_b128 v[0:3], v16, s[2:3] offset:163120; GFX11-FAKE16-NEXT:    global_load_b128 v[4:7], v16, s[2:3]3121; GFX11-FAKE16-NEXT:    global_load_b128 v[8:11], v16, s[2:3] offset:483122; GFX11-FAKE16-NEXT:    global_load_b128 v[12:15], v16, s[2:3] offset:323123; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(3)3124; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v3, v33125; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v2, v23126; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v1, v13127; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v0, v03128; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(2)3129; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v7, v73130; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v6, v63131; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v17, v53132; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v18, v43133; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(1)3134; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v4, v113135; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v5, v103136; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v9, v93137; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v8, v83138; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)3139; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v10, v153140; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v11, v143141; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v13, v133142; GFX11-FAKE16-NEXT:    v_cvt_f16_f32_e32 v12, v123143; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v3, v2, v33144; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v2, v0, v13145; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v1, v6, v73146; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v7, v5, v43147; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v6, v8, v93148; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v5, v11, v103149; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v4, v12, v133150; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v0, v18, v173151; GFX11-FAKE16-NEXT:    s_clause 0x13152; GFX11-FAKE16-NEXT:    global_store_b128 v16, v[4:7], s[0:1] offset:163153; GFX11-FAKE16-NEXT:    global_store_b128 v16, v[0:3], s[0:1]3154; GFX11-FAKE16-NEXT:    s_endpgm3155  %val = load <16 x float>, ptr addrspace(1) %in3156  %cvt = fptrunc <16 x float> %val to <16 x half>3157  store <16 x half> %cvt, ptr addrspace(1) %out3158  ret void3159}3160 3161; FIXME: Unsafe math should fold conversions away3162define amdgpu_kernel void @fadd_f16(ptr addrspace(1) %out, half %a, half %b) #0 {3163; CI-LABEL: fadd_f16:3164; CI:       ; %bb.0:3165; CI-NEXT:    s_load_dword s0, s[8:9], 0x23166; CI-NEXT:    s_add_i32 s12, s12, s173167; CI-NEXT:    s_mov_b32 flat_scratch_lo, s133168; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83169; CI-NEXT:    s_waitcnt lgkmcnt(0)3170; CI-NEXT:    v_cvt_f32_f16_e32 v0, s03171; CI-NEXT:    s_lshr_b32 s0, s0, 163172; CI-NEXT:    v_cvt_f32_f16_e32 v1, s03173; CI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x03174; CI-NEXT:    v_add_f32_e32 v0, v0, v13175; CI-NEXT:    v_cvt_f16_f32_e32 v2, v03176; CI-NEXT:    s_waitcnt lgkmcnt(0)3177; CI-NEXT:    v_mov_b32_e32 v0, s03178; CI-NEXT:    v_mov_b32_e32 v1, s13179; CI-NEXT:    flat_store_short v[0:1], v23180; CI-NEXT:    s_endpgm3181;3182; VI-LABEL: fadd_f16:3183; VI:       ; %bb.0:3184; VI-NEXT:    s_load_dword s2, s[8:9], 0x83185; VI-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x03186; VI-NEXT:    s_add_i32 s12, s12, s173187; VI-NEXT:    s_mov_b32 flat_scratch_lo, s133188; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83189; VI-NEXT:    s_waitcnt lgkmcnt(0)3190; VI-NEXT:    s_lshr_b32 s3, s2, 163191; VI-NEXT:    v_mov_b32_e32 v0, s33192; VI-NEXT:    v_add_f16_e32 v2, s2, v03193; VI-NEXT:    v_mov_b32_e32 v0, s03194; VI-NEXT:    v_mov_b32_e32 v1, s13195; VI-NEXT:    flat_store_short v[0:1], v23196; VI-NEXT:    s_endpgm3197;3198; GFX11-TRUE16-LABEL: fadd_f16:3199; GFX11-TRUE16:       ; %bb.0:3200; GFX11-TRUE16-NEXT:    s_clause 0x13201; GFX11-TRUE16-NEXT:    s_load_b32 s2, s[4:5], 0x83202; GFX11-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03203; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 03204; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3205; GFX11-TRUE16-NEXT:    s_lshr_b32 s3, s2, 163206; GFX11-TRUE16-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)3207; GFX11-TRUE16-NEXT:    v_add_f16_e64 v0.l, s2, s33208; GFX11-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]3209; GFX11-TRUE16-NEXT:    s_endpgm3210;3211; GFX11-FAKE16-LABEL: fadd_f16:3212; GFX11-FAKE16:       ; %bb.0:3213; GFX11-FAKE16-NEXT:    s_clause 0x13214; GFX11-FAKE16-NEXT:    s_load_b32 s2, s[4:5], 0x83215; GFX11-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03216; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 03217; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3218; GFX11-FAKE16-NEXT:    s_lshr_b32 s3, s2, 163219; GFX11-FAKE16-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)3220; GFX11-FAKE16-NEXT:    v_add_f16_e64 v1, s2, s33221; GFX11-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3222; GFX11-FAKE16-NEXT:    s_endpgm3223   %add = fadd half %a, %b3224   store half %add, ptr addrspace(1) %out, align 43225   ret void3226}3227 3228define amdgpu_kernel void @fadd_v2f16(ptr addrspace(1) %out, <2 x half> %a, <2 x half> %b) #0 {3229; CI-LABEL: fadd_v2f16:3230; CI:       ; %bb.0:3231; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x03232; CI-NEXT:    s_add_i32 s12, s12, s173233; CI-NEXT:    s_mov_b32 flat_scratch_lo, s133234; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83235; CI-NEXT:    s_waitcnt lgkmcnt(0)3236; CI-NEXT:    s_lshr_b32 s4, s2, 163237; CI-NEXT:    v_cvt_f32_f16_e32 v0, s23238; CI-NEXT:    s_lshr_b32 s2, s3, 163239; CI-NEXT:    v_cvt_f32_f16_e32 v1, s33240; CI-NEXT:    v_cvt_f32_f16_e32 v2, s43241; CI-NEXT:    v_cvt_f32_f16_e32 v3, s23242; CI-NEXT:    v_add_f32_e32 v0, v0, v13243; CI-NEXT:    v_cvt_f16_f32_e32 v0, v03244; CI-NEXT:    v_add_f32_e32 v1, v2, v33245; CI-NEXT:    v_cvt_f16_f32_e32 v1, v13246; CI-NEXT:    v_lshlrev_b32_e32 v1, 16, v13247; CI-NEXT:    v_or_b32_e32 v2, v0, v13248; CI-NEXT:    v_mov_b32_e32 v0, s03249; CI-NEXT:    v_mov_b32_e32 v1, s13250; CI-NEXT:    flat_store_dword v[0:1], v23251; CI-NEXT:    s_endpgm3252;3253; VI-LABEL: fadd_v2f16:3254; VI:       ; %bb.0:3255; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x03256; VI-NEXT:    s_add_i32 s12, s12, s173257; VI-NEXT:    s_mov_b32 flat_scratch_lo, s133258; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83259; VI-NEXT:    s_waitcnt lgkmcnt(0)3260; VI-NEXT:    s_lshr_b32 s4, s3, 163261; VI-NEXT:    s_lshr_b32 s5, s2, 163262; VI-NEXT:    v_mov_b32_e32 v0, s33263; VI-NEXT:    v_mov_b32_e32 v1, s43264; VI-NEXT:    v_mov_b32_e32 v2, s53265; VI-NEXT:    v_add_f16_e32 v0, s2, v03266; VI-NEXT:    v_add_f16_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD3267; VI-NEXT:    v_or_b32_e32 v2, v0, v13268; VI-NEXT:    v_mov_b32_e32 v0, s03269; VI-NEXT:    v_mov_b32_e32 v1, s13270; VI-NEXT:    flat_store_dword v[0:1], v23271; VI-NEXT:    s_endpgm3272;3273; GFX11-LABEL: fadd_v2f16:3274; GFX11:       ; %bb.0:3275; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x03276; GFX11-NEXT:    v_mov_b32_e32 v0, 03277; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3278; GFX11-NEXT:    v_pk_add_f16 v1, s2, s33279; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]3280; GFX11-NEXT:    s_endpgm3281  %add = fadd <2 x half> %a, %b3282  store <2 x half> %add, ptr addrspace(1) %out, align 83283  ret void3284}3285 3286define amdgpu_kernel void @fadd_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3287; CI-LABEL: fadd_v4f16:3288; CI:       ; %bb.0:3289; CI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x03290; CI-NEXT:    s_add_i32 s12, s12, s173291; CI-NEXT:    s_mov_b32 flat_scratch_lo, s133292; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83293; CI-NEXT:    s_waitcnt lgkmcnt(0)3294; CI-NEXT:    v_mov_b32_e32 v0, s23295; CI-NEXT:    v_mov_b32_e32 v1, s33296; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]3297; CI-NEXT:    v_mov_b32_e32 v4, s03298; CI-NEXT:    v_mov_b32_e32 v5, s13299; CI-NEXT:    s_waitcnt vmcnt(0)3300; CI-NEXT:    v_cvt_f32_f16_e32 v6, v03301; CI-NEXT:    v_lshrrev_b32_e32 v0, 16, v03302; CI-NEXT:    v_cvt_f32_f16_e32 v7, v13303; CI-NEXT:    v_lshrrev_b32_e32 v1, 16, v13304; CI-NEXT:    v_cvt_f32_f16_e32 v8, v23305; CI-NEXT:    v_lshrrev_b32_e32 v2, 16, v23306; CI-NEXT:    v_cvt_f32_f16_e32 v9, v33307; CI-NEXT:    v_lshrrev_b32_e32 v3, 16, v33308; CI-NEXT:    v_cvt_f32_f16_e32 v0, v03309; CI-NEXT:    v_cvt_f32_f16_e32 v1, v13310; CI-NEXT:    v_cvt_f32_f16_e32 v3, v33311; CI-NEXT:    v_cvt_f32_f16_e32 v2, v23312; CI-NEXT:    v_add_f32_e32 v7, v7, v93313; CI-NEXT:    v_add_f32_e32 v6, v6, v83314; CI-NEXT:    v_add_f32_e32 v1, v1, v33315; CI-NEXT:    v_add_f32_e32 v0, v0, v23316; CI-NEXT:    v_cvt_f16_f32_e32 v1, v13317; CI-NEXT:    v_cvt_f16_f32_e32 v0, v03318; CI-NEXT:    v_cvt_f16_f32_e32 v2, v73319; CI-NEXT:    v_cvt_f16_f32_e32 v3, v63320; CI-NEXT:    v_lshlrev_b32_e32 v1, 16, v13321; CI-NEXT:    v_lshlrev_b32_e32 v0, 16, v03322; CI-NEXT:    v_or_b32_e32 v1, v2, v13323; CI-NEXT:    v_or_b32_e32 v0, v3, v03324; CI-NEXT:    flat_store_dwordx2 v[4:5], v[0:1]3325; CI-NEXT:    s_endpgm3326;3327; VI-LABEL: fadd_v4f16:3328; VI:       ; %bb.0:3329; VI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x03330; VI-NEXT:    s_add_i32 s12, s12, s173331; VI-NEXT:    s_mov_b32 flat_scratch_lo, s133332; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83333; VI-NEXT:    s_waitcnt lgkmcnt(0)3334; VI-NEXT:    v_mov_b32_e32 v0, s23335; VI-NEXT:    v_mov_b32_e32 v1, s33336; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]3337; VI-NEXT:    v_mov_b32_e32 v4, s03338; VI-NEXT:    v_mov_b32_e32 v5, s13339; VI-NEXT:    s_waitcnt vmcnt(0)3340; VI-NEXT:    v_add_f16_sdwa v6, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13341; VI-NEXT:    v_add_f16_e32 v1, v1, v33342; VI-NEXT:    v_add_f16_sdwa v3, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_13343; VI-NEXT:    v_add_f16_e32 v0, v0, v23344; VI-NEXT:    v_or_b32_e32 v1, v1, v63345; VI-NEXT:    v_or_b32_e32 v0, v0, v33346; VI-NEXT:    flat_store_dwordx2 v[4:5], v[0:1]3347; VI-NEXT:    s_endpgm3348;3349; GFX11-LABEL: fadd_v4f16:3350; GFX11:       ; %bb.0:3351; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x03352; GFX11-NEXT:    v_mov_b32_e32 v4, 03353; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3354; GFX11-NEXT:    global_load_b128 v[0:3], v4, s[2:3]3355; GFX11-NEXT:    s_waitcnt vmcnt(0)3356; GFX11-NEXT:    v_pk_add_f16 v1, v1, v33357; GFX11-NEXT:    v_pk_add_f16 v0, v0, v23358; GFX11-NEXT:    global_store_b64 v4, v[0:1], s[0:1]3359; GFX11-NEXT:    s_endpgm3360  %b_ptr = getelementptr <4 x half>, ptr addrspace(1) %in, i32 13361  %a = load <4 x half>, ptr addrspace(1) %in, align 163362  %b = load <4 x half>, ptr addrspace(1) %b_ptr, align 163363  %result = fadd <4 x half> %a, %b3364  store <4 x half> %result, ptr addrspace(1) %out, align 163365  ret void3366}3367 3368define amdgpu_kernel void @fadd_v8f16(ptr addrspace(1) %out, <8 x half> %a, <8 x half> %b) #0 {3369; CI-LABEL: fadd_v8f16:3370; CI:       ; %bb.0:3371; CI-NEXT:    s_load_dwordx8 s[0:7], s[8:9], 0x43372; CI-NEXT:    s_load_dwordx2 s[8:9], s[8:9], 0x03373; CI-NEXT:    s_add_i32 s12, s12, s173374; CI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83375; CI-NEXT:    s_mov_b32 flat_scratch_lo, s133376; CI-NEXT:    s_waitcnt lgkmcnt(0)3377; CI-NEXT:    s_lshr_b32 s10, s0, 163378; CI-NEXT:    v_cvt_f32_f16_e32 v4, s03379; CI-NEXT:    s_lshr_b32 s0, s4, 163380; CI-NEXT:    v_cvt_f32_f16_e32 v8, s03381; CI-NEXT:    s_lshr_b32 s0, s5, 163382; CI-NEXT:    s_lshr_b32 s11, s1, 163383; CI-NEXT:    v_cvt_f32_f16_e32 v9, s03384; CI-NEXT:    s_lshr_b32 s0, s6, 163385; CI-NEXT:    s_lshr_b32 s12, s2, 163386; CI-NEXT:    v_cvt_f32_f16_e32 v0, s103387; CI-NEXT:    v_cvt_f32_f16_e32 v1, s113388; CI-NEXT:    s_lshr_b32 s10, s3, 163389; CI-NEXT:    v_cvt_f32_f16_e32 v10, s03390; CI-NEXT:    s_lshr_b32 s0, s7, 163391; CI-NEXT:    v_cvt_f32_f16_e32 v2, s123392; CI-NEXT:    v_cvt_f32_f16_e32 v3, s103393; CI-NEXT:    v_cvt_f32_f16_e32 v5, s13394; CI-NEXT:    v_cvt_f32_f16_e32 v11, s03395; CI-NEXT:    v_cvt_f32_f16_e32 v12, s43396; CI-NEXT:    v_cvt_f32_f16_e32 v13, s53397; CI-NEXT:    v_cvt_f32_f16_e32 v6, s23398; CI-NEXT:    v_cvt_f32_f16_e32 v7, s33399; CI-NEXT:    v_cvt_f32_f16_e32 v14, s73400; CI-NEXT:    v_cvt_f32_f16_e32 v15, s63401; CI-NEXT:    v_add_f32_e32 v1, v1, v93402; CI-NEXT:    v_add_f32_e32 v0, v0, v83403; CI-NEXT:    v_add_f32_e32 v3, v3, v113404; CI-NEXT:    v_add_f32_e32 v2, v2, v103405; CI-NEXT:    v_cvt_f16_f32_e32 v1, v13406; CI-NEXT:    v_add_f32_e32 v5, v5, v133407; CI-NEXT:    v_cvt_f16_f32_e32 v0, v03408; CI-NEXT:    v_add_f32_e32 v4, v4, v123409; CI-NEXT:    v_cvt_f16_f32_e32 v3, v33410; CI-NEXT:    v_add_f32_e32 v7, v7, v143411; CI-NEXT:    v_cvt_f16_f32_e32 v2, v23412; CI-NEXT:    v_add_f32_e32 v6, v6, v153413; CI-NEXT:    v_cvt_f16_f32_e32 v5, v53414; CI-NEXT:    v_cvt_f16_f32_e32 v4, v43415; CI-NEXT:    v_cvt_f16_f32_e32 v7, v73416; CI-NEXT:    v_cvt_f16_f32_e32 v6, v63417; CI-NEXT:    v_lshlrev_b32_e32 v1, 16, v13418; CI-NEXT:    v_lshlrev_b32_e32 v0, 16, v03419; CI-NEXT:    v_lshlrev_b32_e32 v3, 16, v33420; CI-NEXT:    v_lshlrev_b32_e32 v2, 16, v23421; CI-NEXT:    v_or_b32_e32 v1, v5, v13422; CI-NEXT:    v_or_b32_e32 v0, v4, v03423; CI-NEXT:    v_mov_b32_e32 v4, s83424; CI-NEXT:    v_or_b32_e32 v3, v7, v33425; CI-NEXT:    v_or_b32_e32 v2, v6, v23426; CI-NEXT:    v_mov_b32_e32 v5, s93427; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]3428; CI-NEXT:    s_endpgm3429;3430; VI-LABEL: fadd_v8f16:3431; VI:       ; %bb.0:3432; VI-NEXT:    s_load_dwordx8 s[0:7], s[8:9], 0x103433; VI-NEXT:    s_load_dwordx2 s[8:9], s[8:9], 0x03434; VI-NEXT:    s_add_i32 s12, s12, s173435; VI-NEXT:    s_mov_b32 flat_scratch_lo, s133436; VI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83437; VI-NEXT:    s_waitcnt lgkmcnt(0)3438; VI-NEXT:    s_lshr_b32 s10, s7, 163439; VI-NEXT:    s_lshr_b32 s11, s3, 163440; VI-NEXT:    v_mov_b32_e32 v0, s73441; VI-NEXT:    v_mov_b32_e32 v1, s103442; VI-NEXT:    v_mov_b32_e32 v2, s113443; VI-NEXT:    v_add_f16_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD3444; VI-NEXT:    v_add_f16_e32 v0, s3, v03445; VI-NEXT:    s_lshr_b32 s3, s6, 163446; VI-NEXT:    s_lshr_b32 s7, s2, 163447; VI-NEXT:    v_or_b32_e32 v3, v0, v13448; VI-NEXT:    v_mov_b32_e32 v0, s33449; VI-NEXT:    v_mov_b32_e32 v1, s73450; VI-NEXT:    v_add_f16_sdwa v0, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD3451; VI-NEXT:    v_mov_b32_e32 v1, s63452; VI-NEXT:    v_add_f16_e32 v1, s2, v13453; VI-NEXT:    s_lshr_b32 s2, s5, 163454; VI-NEXT:    s_lshr_b32 s3, s1, 163455; VI-NEXT:    v_or_b32_e32 v2, v1, v03456; VI-NEXT:    v_mov_b32_e32 v0, s23457; VI-NEXT:    v_mov_b32_e32 v1, s33458; VI-NEXT:    v_add_f16_sdwa v0, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD3459; VI-NEXT:    v_mov_b32_e32 v1, s53460; VI-NEXT:    v_add_f16_e32 v1, s1, v13461; VI-NEXT:    s_lshr_b32 s1, s4, 163462; VI-NEXT:    s_lshr_b32 s2, s0, 163463; VI-NEXT:    v_or_b32_e32 v1, v1, v03464; VI-NEXT:    v_mov_b32_e32 v0, s13465; VI-NEXT:    v_mov_b32_e32 v4, s23466; VI-NEXT:    v_add_f16_sdwa v0, v4, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD3467; VI-NEXT:    v_mov_b32_e32 v4, s43468; VI-NEXT:    v_add_f16_e32 v4, s0, v43469; VI-NEXT:    v_or_b32_e32 v0, v4, v03470; VI-NEXT:    v_mov_b32_e32 v4, s83471; VI-NEXT:    v_mov_b32_e32 v5, s93472; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]3473; VI-NEXT:    s_endpgm3474;3475; GFX11-LABEL: fadd_v8f16:3476; GFX11:       ; %bb.0:3477; GFX11-NEXT:    s_clause 0x13478; GFX11-NEXT:    s_load_b256 s[8:15], s[4:5], 0x103479; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03480; GFX11-NEXT:    v_mov_b32_e32 v4, 03481; GFX11-NEXT:    s_waitcnt lgkmcnt(0)3482; GFX11-NEXT:    v_pk_add_f16 v3, s11, s153483; GFX11-NEXT:    v_pk_add_f16 v2, s10, s143484; GFX11-NEXT:    v_pk_add_f16 v1, s9, s133485; GFX11-NEXT:    v_pk_add_f16 v0, s8, s123486; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[0:1]3487; GFX11-NEXT:    s_endpgm3488  %add = fadd <8 x half> %a, %b3489  store <8 x half> %add, ptr addrspace(1) %out, align 323490  ret void3491}3492 3493define amdgpu_kernel void @test_bitcast_from_half(ptr addrspace(1) %in, ptr addrspace(1) %out) #0 {3494; CIVI-LABEL: test_bitcast_from_half:3495; CIVI:       ; %bb.0:3496; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x03497; CIVI-NEXT:    s_add_i32 s12, s12, s173498; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s133499; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83500; CIVI-NEXT:    s_waitcnt lgkmcnt(0)3501; CIVI-NEXT:    v_mov_b32_e32 v0, s03502; CIVI-NEXT:    v_mov_b32_e32 v1, s13503; CIVI-NEXT:    flat_load_ushort v2, v[0:1]3504; CIVI-NEXT:    v_mov_b32_e32 v0, s23505; CIVI-NEXT:    v_mov_b32_e32 v1, s33506; CIVI-NEXT:    s_waitcnt vmcnt(0)3507; CIVI-NEXT:    flat_store_short v[0:1], v23508; CIVI-NEXT:    s_endpgm3509;3510; GFX11-TRUE16-LABEL: test_bitcast_from_half:3511; GFX11-TRUE16:       ; %bb.0:3512; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x03513; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 03514; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3515; GFX11-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1]3516; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)3517; GFX11-TRUE16-NEXT:    global_store_b16 v1, v0, s[2:3]3518; GFX11-TRUE16-NEXT:    s_endpgm3519;3520; GFX11-FAKE16-LABEL: test_bitcast_from_half:3521; GFX11-FAKE16:       ; %bb.0:3522; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x03523; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 03524; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3525; GFX11-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1]3526; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)3527; GFX11-FAKE16-NEXT:    global_store_b16 v0, v1, s[2:3]3528; GFX11-FAKE16-NEXT:    s_endpgm3529  %val = load half, ptr addrspace(1) %in3530  %val_int = bitcast half %val to i163531  store i16 %val_int, ptr addrspace(1) %out3532  ret void3533}3534 3535define amdgpu_kernel void @test_bitcast_to_half(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {3536; CIVI-LABEL: test_bitcast_to_half:3537; CIVI:       ; %bb.0:3538; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x03539; CIVI-NEXT:    s_add_i32 s12, s12, s173540; CIVI-NEXT:    s_mov_b32 flat_scratch_lo, s133541; CIVI-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83542; CIVI-NEXT:    s_waitcnt lgkmcnt(0)3543; CIVI-NEXT:    v_mov_b32_e32 v0, s23544; CIVI-NEXT:    v_mov_b32_e32 v1, s33545; CIVI-NEXT:    flat_load_ushort v2, v[0:1]3546; CIVI-NEXT:    v_mov_b32_e32 v0, s03547; CIVI-NEXT:    v_mov_b32_e32 v1, s13548; CIVI-NEXT:    s_waitcnt vmcnt(0)3549; CIVI-NEXT:    flat_store_short v[0:1], v23550; CIVI-NEXT:    s_endpgm3551;3552; GFX11-TRUE16-LABEL: test_bitcast_to_half:3553; GFX11-TRUE16:       ; %bb.0:3554; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x03555; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 03556; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3557; GFX11-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3]3558; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)3559; GFX11-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]3560; GFX11-TRUE16-NEXT:    s_endpgm3561;3562; GFX11-FAKE16-LABEL: test_bitcast_to_half:3563; GFX11-FAKE16:       ; %bb.0:3564; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x03565; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 03566; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3567; GFX11-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]3568; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)3569; GFX11-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3570; GFX11-FAKE16-NEXT:    s_endpgm3571  %val = load i16, ptr addrspace(1) %in3572  %val_fp = bitcast i16 %val to half3573  store half %val_fp, ptr addrspace(1) %out3574  ret void3575}3576 3577attributes #0 = { nounwind }3578