3722 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefixes=CIVI,VI %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii < %s | FileCheck -check-prefixes=CIVI,CI %s5; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s6; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s7 8define amdgpu_kernel void @s_insertelement_v2i16_0(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr) #0 {9; GFX9-LABEL: s_insertelement_v2i16_0:10; GFX9: ; %bb.0:11; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x012; GFX9-NEXT: v_mov_b32_e32 v0, 013; GFX9-NEXT: s_waitcnt lgkmcnt(0)14; GFX9-NEXT: s_load_dword s2, s[2:3], 0x015; GFX9-NEXT: s_waitcnt lgkmcnt(0)16; GFX9-NEXT: s_pack_lh_b32_b16 s2, 0x3e7, s217; GFX9-NEXT: v_mov_b32_e32 v1, s218; GFX9-NEXT: global_store_dword v0, v1, s[0:1]19; GFX9-NEXT: s_endpgm20;21; CIVI-LABEL: s_insertelement_v2i16_0:22; CIVI: ; %bb.0:23; CIVI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x024; CIVI-NEXT: s_add_i32 s12, s12, s1725; CIVI-NEXT: s_mov_b32 flat_scratch_lo, s1326; CIVI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 827; CIVI-NEXT: s_waitcnt lgkmcnt(0)28; CIVI-NEXT: s_load_dword s2, s[2:3], 0x029; CIVI-NEXT: v_mov_b32_e32 v0, s030; CIVI-NEXT: v_mov_b32_e32 v1, s131; CIVI-NEXT: s_waitcnt lgkmcnt(0)32; CIVI-NEXT: s_and_b32 s0, s2, 0xffff000033; CIVI-NEXT: s_or_b32 s0, s0, 0x3e734; CIVI-NEXT: v_mov_b32_e32 v2, s035; CIVI-NEXT: flat_store_dword v[0:1], v236; CIVI-NEXT: s_endpgm37;38; GFX11-LABEL: s_insertelement_v2i16_0:39; GFX11: ; %bb.0:40; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x041; GFX11-NEXT: s_waitcnt lgkmcnt(0)42; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x043; GFX11-NEXT: s_waitcnt lgkmcnt(0)44; GFX11-NEXT: s_pack_lh_b32_b16 s2, 0x3e7, s245; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)46; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s247; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]48; GFX11-NEXT: s_endpgm49 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr50 %vecins = insertelement <2 x i16> %vec, i16 999, i32 051 store <2 x i16> %vecins, ptr addrspace(1) %out52 ret void53}54 55 56define amdgpu_kernel void @s_insertelement_v2i16_0_reg(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, [8 x i32], i16 %elt) #0 {57; GFX9-LABEL: s_insertelement_v2i16_0_reg:58; GFX9: ; %bb.0:59; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x060; GFX9-NEXT: s_load_dword s4, s[8:9], 0x3061; GFX9-NEXT: v_mov_b32_e32 v0, 062; GFX9-NEXT: s_waitcnt lgkmcnt(0)63; GFX9-NEXT: s_load_dword s2, s[2:3], 0x064; GFX9-NEXT: s_waitcnt lgkmcnt(0)65; GFX9-NEXT: s_pack_lh_b32_b16 s2, s4, s266; GFX9-NEXT: v_mov_b32_e32 v1, s267; GFX9-NEXT: global_store_dword v0, v1, s[0:1]68; GFX9-NEXT: s_endpgm69;70; VI-LABEL: s_insertelement_v2i16_0_reg:71; VI: ; %bb.0:72; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x073; VI-NEXT: s_load_dword s4, s[8:9], 0x3074; VI-NEXT: s_add_i32 s12, s12, s1775; VI-NEXT: s_mov_b32 flat_scratch_lo, s1376; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 877; VI-NEXT: s_waitcnt lgkmcnt(0)78; VI-NEXT: s_load_dword s2, s[2:3], 0x079; VI-NEXT: v_mov_b32_e32 v0, s080; VI-NEXT: v_mov_b32_e32 v1, s181; VI-NEXT: s_and_b32 s0, s4, 0xffff82; VI-NEXT: s_waitcnt lgkmcnt(0)83; VI-NEXT: s_and_b32 s1, s2, 0xffff000084; VI-NEXT: s_or_b32 s0, s0, s185; VI-NEXT: v_mov_b32_e32 v2, s086; VI-NEXT: flat_store_dword v[0:1], v287; VI-NEXT: s_endpgm88;89; CI-LABEL: s_insertelement_v2i16_0_reg:90; CI: ; %bb.0:91; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x092; CI-NEXT: s_load_dword s4, s[8:9], 0xc93; CI-NEXT: s_add_i32 s12, s12, s1794; CI-NEXT: s_mov_b32 flat_scratch_lo, s1395; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 896; CI-NEXT: s_waitcnt lgkmcnt(0)97; CI-NEXT: s_load_dword s2, s[2:3], 0x098; CI-NEXT: v_mov_b32_e32 v0, s099; CI-NEXT: v_mov_b32_e32 v1, s1100; CI-NEXT: s_and_b32 s1, s4, 0xffff101; CI-NEXT: s_waitcnt lgkmcnt(0)102; CI-NEXT: s_and_b32 s0, s2, 0xffff0000103; CI-NEXT: s_or_b32 s0, s1, s0104; CI-NEXT: v_mov_b32_e32 v2, s0105; CI-NEXT: flat_store_dword v[0:1], v2106; CI-NEXT: s_endpgm107;108; GFX11-LABEL: s_insertelement_v2i16_0_reg:109; GFX11: ; %bb.0:110; GFX11-NEXT: s_clause 0x1111; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0112; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x30113; GFX11-NEXT: s_waitcnt lgkmcnt(0)114; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0115; GFX11-NEXT: s_waitcnt lgkmcnt(0)116; GFX11-NEXT: s_pack_lh_b32_b16 s2, s4, s2117; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)118; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2119; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]120; GFX11-NEXT: s_endpgm121 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr122 %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0123 store <2 x i16> %vecins, ptr addrspace(1) %out124 ret void125}126 127define amdgpu_kernel void @s_insertelement_v2i16_0_multi_use_hi_reg(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, [8 x i32], i16 %elt) #0 {128; GFX9-LABEL: s_insertelement_v2i16_0_multi_use_hi_reg:129; GFX9: ; %bb.0:130; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0131; GFX9-NEXT: s_load_dword s4, s[8:9], 0x30132; GFX9-NEXT: v_mov_b32_e32 v0, 0133; GFX9-NEXT: s_waitcnt lgkmcnt(0)134; GFX9-NEXT: s_load_dword s2, s[2:3], 0x0135; GFX9-NEXT: s_waitcnt lgkmcnt(0)136; GFX9-NEXT: s_lshr_b32 s2, s2, 16137; GFX9-NEXT: s_pack_ll_b32_b16 s3, s4, s2138; GFX9-NEXT: v_mov_b32_e32 v1, s3139; GFX9-NEXT: global_store_dword v0, v1, s[0:1]140; GFX9-NEXT: ;;#ASMSTART141; GFX9-NEXT: ; use s2142; GFX9-NEXT: ;;#ASMEND143; GFX9-NEXT: s_endpgm144;145; VI-LABEL: s_insertelement_v2i16_0_multi_use_hi_reg:146; VI: ; %bb.0:147; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0148; VI-NEXT: s_load_dword s4, s[8:9], 0x30149; VI-NEXT: s_add_i32 s12, s12, s17150; VI-NEXT: s_mov_b32 flat_scratch_lo, s13151; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8152; VI-NEXT: s_waitcnt lgkmcnt(0)153; VI-NEXT: s_load_dword s2, s[2:3], 0x0154; VI-NEXT: v_mov_b32_e32 v0, s0155; VI-NEXT: v_mov_b32_e32 v1, s1156; VI-NEXT: s_and_b32 s0, s4, 0xffff157; VI-NEXT: s_waitcnt lgkmcnt(0)158; VI-NEXT: s_lshr_b32 s1, s2, 16159; VI-NEXT: s_and_b32 s2, s2, 0xffff0000160; VI-NEXT: s_or_b32 s0, s0, s2161; VI-NEXT: v_mov_b32_e32 v2, s0162; VI-NEXT: flat_store_dword v[0:1], v2163; VI-NEXT: ;;#ASMSTART164; VI-NEXT: ; use s1165; VI-NEXT: ;;#ASMEND166; VI-NEXT: s_endpgm167;168; CI-LABEL: s_insertelement_v2i16_0_multi_use_hi_reg:169; CI: ; %bb.0:170; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0171; CI-NEXT: s_load_dword s4, s[8:9], 0xc172; CI-NEXT: s_add_i32 s12, s12, s17173; CI-NEXT: s_mov_b32 flat_scratch_lo, s13174; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8175; CI-NEXT: s_waitcnt lgkmcnt(0)176; CI-NEXT: s_load_dword s2, s[2:3], 0x0177; CI-NEXT: v_mov_b32_e32 v0, s0178; CI-NEXT: v_mov_b32_e32 v1, s1179; CI-NEXT: s_and_b32 s0, s4, 0xffff180; CI-NEXT: s_waitcnt lgkmcnt(0)181; CI-NEXT: s_and_b32 s1, s2, 0xffff0000182; CI-NEXT: s_or_b32 s0, s0, s1183; CI-NEXT: v_mov_b32_e32 v2, s0184; CI-NEXT: s_lshr_b32 s2, s2, 16185; CI-NEXT: flat_store_dword v[0:1], v2186; CI-NEXT: ;;#ASMSTART187; CI-NEXT: ; use s2188; CI-NEXT: ;;#ASMEND189; CI-NEXT: s_endpgm190;191; GFX11-LABEL: s_insertelement_v2i16_0_multi_use_hi_reg:192; GFX11: ; %bb.0:193; GFX11-NEXT: s_clause 0x1194; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0195; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x30196; GFX11-NEXT: s_waitcnt lgkmcnt(0)197; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0198; GFX11-NEXT: s_waitcnt lgkmcnt(0)199; GFX11-NEXT: s_lshr_b32 s2, s2, 16200; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)201; GFX11-NEXT: s_pack_ll_b32_b16 s3, s4, s2202; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s3203; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]204; GFX11-NEXT: ;;#ASMSTART205; GFX11-NEXT: ; use s2206; GFX11-NEXT: ;;#ASMEND207; GFX11-NEXT: s_endpgm208 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr209 %elt1 = extractelement <2 x i16> %vec, i32 1210 %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0211 store <2 x i16> %vecins, ptr addrspace(1) %out212 %use1 = zext i16 %elt1 to i32213 call void asm sideeffect "; use $0", "s"(i32 %use1) #0214 ret void215}216 217define amdgpu_kernel void @s_insertelement_v2i16_0_reghi(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, [8 x i32], i32 %elt.arg) #0 {218; GFX9-LABEL: s_insertelement_v2i16_0_reghi:219; GFX9: ; %bb.0:220; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0221; GFX9-NEXT: s_load_dword s4, s[8:9], 0x30222; GFX9-NEXT: v_mov_b32_e32 v0, 0223; GFX9-NEXT: s_waitcnt lgkmcnt(0)224; GFX9-NEXT: s_load_dword s2, s[2:3], 0x0225; GFX9-NEXT: s_waitcnt lgkmcnt(0)226; GFX9-NEXT: s_pack_hh_b32_b16 s2, s4, s2227; GFX9-NEXT: v_mov_b32_e32 v1, s2228; GFX9-NEXT: global_store_dword v0, v1, s[0:1]229; GFX9-NEXT: s_endpgm230;231; VI-LABEL: s_insertelement_v2i16_0_reghi:232; VI: ; %bb.0:233; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0234; VI-NEXT: s_load_dword s4, s[8:9], 0x30235; VI-NEXT: s_add_i32 s12, s12, s17236; VI-NEXT: s_mov_b32 flat_scratch_lo, s13237; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8238; VI-NEXT: s_waitcnt lgkmcnt(0)239; VI-NEXT: s_load_dword s2, s[2:3], 0x0240; VI-NEXT: v_mov_b32_e32 v0, s0241; VI-NEXT: v_mov_b32_e32 v1, s1242; VI-NEXT: s_waitcnt lgkmcnt(0)243; VI-NEXT: s_lshr_b32 s5, s2, 16244; VI-NEXT: s_lshr_b64 s[0:1], s[4:5], 16245; VI-NEXT: v_mov_b32_e32 v2, s0246; VI-NEXT: flat_store_dword v[0:1], v2247; VI-NEXT: s_endpgm248;249; CI-LABEL: s_insertelement_v2i16_0_reghi:250; CI: ; %bb.0:251; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0252; CI-NEXT: s_load_dword s4, s[8:9], 0xc253; CI-NEXT: s_add_i32 s12, s12, s17254; CI-NEXT: s_mov_b32 flat_scratch_lo, s13255; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8256; CI-NEXT: s_waitcnt lgkmcnt(0)257; CI-NEXT: s_load_dword s2, s[2:3], 0x0258; CI-NEXT: v_mov_b32_e32 v0, s0259; CI-NEXT: v_mov_b32_e32 v1, s1260; CI-NEXT: s_waitcnt lgkmcnt(0)261; CI-NEXT: s_lshr_b32 s5, s2, 16262; CI-NEXT: s_lshr_b64 s[0:1], s[4:5], 16263; CI-NEXT: v_mov_b32_e32 v2, s0264; CI-NEXT: flat_store_dword v[0:1], v2265; CI-NEXT: s_endpgm266;267; GFX11-LABEL: s_insertelement_v2i16_0_reghi:268; GFX11: ; %bb.0:269; GFX11-NEXT: s_clause 0x1270; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0271; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x30272; GFX11-NEXT: s_waitcnt lgkmcnt(0)273; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0274; GFX11-NEXT: s_waitcnt lgkmcnt(0)275; GFX11-NEXT: s_pack_hh_b32_b16 s2, s4, s2276; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)277; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2278; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]279; GFX11-NEXT: s_endpgm280 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr281 %elt.hi = lshr i32 %elt.arg, 16282 %elt = trunc i32 %elt.hi to i16283 %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0284 store <2 x i16> %vecins, ptr addrspace(1) %out285 ret void286}287 288define amdgpu_kernel void @s_insertelement_v2i16_0_reghi_multi_use_1(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, i32 %elt.arg) #0 {289; GFX9-LABEL: s_insertelement_v2i16_0_reghi_multi_use_1:290; GFX9: ; %bb.0:291; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0292; GFX9-NEXT: s_load_dword s4, s[8:9], 0x10293; GFX9-NEXT: v_mov_b32_e32 v0, 0294; GFX9-NEXT: s_waitcnt lgkmcnt(0)295; GFX9-NEXT: s_load_dword s2, s[2:3], 0x0296; GFX9-NEXT: s_lshr_b32 s3, s4, 16297; GFX9-NEXT: s_waitcnt lgkmcnt(0)298; GFX9-NEXT: s_pack_lh_b32_b16 s2, s3, s2299; GFX9-NEXT: v_mov_b32_e32 v1, s2300; GFX9-NEXT: global_store_dword v0, v1, s[0:1]301; GFX9-NEXT: ;;#ASMSTART302; GFX9-NEXT: ; use s3303; GFX9-NEXT: ;;#ASMEND304; GFX9-NEXT: s_endpgm305;306; VI-LABEL: s_insertelement_v2i16_0_reghi_multi_use_1:307; VI: ; %bb.0:308; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0309; VI-NEXT: s_load_dword s4, s[8:9], 0x10310; VI-NEXT: s_add_i32 s12, s12, s17311; VI-NEXT: s_mov_b32 flat_scratch_lo, s13312; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8313; VI-NEXT: s_waitcnt lgkmcnt(0)314; VI-NEXT: s_load_dword s2, s[2:3], 0x0315; VI-NEXT: v_mov_b32_e32 v0, s0316; VI-NEXT: v_mov_b32_e32 v1, s1317; VI-NEXT: s_lshr_b32 s3, s4, 16318; VI-NEXT: s_waitcnt lgkmcnt(0)319; VI-NEXT: s_lshr_b32 s5, s2, 16320; VI-NEXT: s_lshr_b64 s[0:1], s[4:5], 16321; VI-NEXT: v_mov_b32_e32 v2, s0322; VI-NEXT: flat_store_dword v[0:1], v2323; VI-NEXT: ;;#ASMSTART324; VI-NEXT: ; use s3325; VI-NEXT: ;;#ASMEND326; VI-NEXT: s_endpgm327;328; CI-LABEL: s_insertelement_v2i16_0_reghi_multi_use_1:329; CI: ; %bb.0:330; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0331; CI-NEXT: s_load_dword s4, s[8:9], 0x4332; CI-NEXT: s_add_i32 s12, s12, s17333; CI-NEXT: s_mov_b32 flat_scratch_lo, s13334; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8335; CI-NEXT: s_waitcnt lgkmcnt(0)336; CI-NEXT: s_load_dword s2, s[2:3], 0x0337; CI-NEXT: v_mov_b32_e32 v0, s0338; CI-NEXT: v_mov_b32_e32 v1, s1339; CI-NEXT: s_lshr_b32 s3, s4, 16340; CI-NEXT: s_waitcnt lgkmcnt(0)341; CI-NEXT: s_lshr_b32 s5, s2, 16342; CI-NEXT: s_lshr_b64 s[0:1], s[4:5], 16343; CI-NEXT: v_mov_b32_e32 v2, s0344; CI-NEXT: flat_store_dword v[0:1], v2345; CI-NEXT: ;;#ASMSTART346; CI-NEXT: ; use s3347; CI-NEXT: ;;#ASMEND348; CI-NEXT: s_endpgm349;350; GFX11-LABEL: s_insertelement_v2i16_0_reghi_multi_use_1:351; GFX11: ; %bb.0:352; GFX11-NEXT: s_clause 0x1353; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0354; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x10355; GFX11-NEXT: s_waitcnt lgkmcnt(0)356; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0357; GFX11-NEXT: s_lshr_b32 s3, s4, 16358; GFX11-NEXT: s_waitcnt lgkmcnt(0)359; GFX11-NEXT: s_pack_lh_b32_b16 s2, s3, s2360; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)361; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2362; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]363; GFX11-NEXT: ;;#ASMSTART364; GFX11-NEXT: ; use s3365; GFX11-NEXT: ;;#ASMEND366; GFX11-NEXT: s_endpgm367 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr368 %elt.hi = lshr i32 %elt.arg, 16369 %elt = trunc i32 %elt.hi to i16370 %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0371 store <2 x i16> %vecins, ptr addrspace(1) %out372 %use1 = zext i16 %elt to i32373 call void asm sideeffect "; use $0", "s"(i32 %use1) #0374 ret void375}376 377define amdgpu_kernel void @s_insertelement_v2i16_0_reghi_both_multi_use_1(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, i32 %elt.arg) #0 {378; GFX9-LABEL: s_insertelement_v2i16_0_reghi_both_multi_use_1:379; GFX9: ; %bb.0:380; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0381; GFX9-NEXT: s_load_dword s4, s[8:9], 0x10382; GFX9-NEXT: v_mov_b32_e32 v0, 0383; GFX9-NEXT: s_waitcnt lgkmcnt(0)384; GFX9-NEXT: s_load_dword s2, s[2:3], 0x0385; GFX9-NEXT: s_lshr_b32 s3, s4, 16386; GFX9-NEXT: s_waitcnt lgkmcnt(0)387; GFX9-NEXT: s_lshr_b32 s2, s2, 16388; GFX9-NEXT: s_pack_ll_b32_b16 s4, s3, s2389; GFX9-NEXT: v_mov_b32_e32 v1, s4390; GFX9-NEXT: global_store_dword v0, v1, s[0:1]391; GFX9-NEXT: ;;#ASMSTART392; GFX9-NEXT: ; use s3393; GFX9-NEXT: ;;#ASMEND394; GFX9-NEXT: ;;#ASMSTART395; GFX9-NEXT: ; use s2396; GFX9-NEXT: ;;#ASMEND397; GFX9-NEXT: s_endpgm398;399; VI-LABEL: s_insertelement_v2i16_0_reghi_both_multi_use_1:400; VI: ; %bb.0:401; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0402; VI-NEXT: s_load_dword s4, s[8:9], 0x10403; VI-NEXT: s_add_i32 s12, s12, s17404; VI-NEXT: s_mov_b32 flat_scratch_lo, s13405; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8406; VI-NEXT: s_waitcnt lgkmcnt(0)407; VI-NEXT: s_load_dword s2, s[2:3], 0x0408; VI-NEXT: v_mov_b32_e32 v0, s0409; VI-NEXT: v_mov_b32_e32 v1, s1410; VI-NEXT: s_lshr_b32 s3, s4, 16411; VI-NEXT: s_waitcnt lgkmcnt(0)412; VI-NEXT: s_lshr_b32 s5, s2, 16413; VI-NEXT: s_lshr_b64 s[0:1], s[4:5], 16414; VI-NEXT: v_mov_b32_e32 v2, s0415; VI-NEXT: flat_store_dword v[0:1], v2416; VI-NEXT: ;;#ASMSTART417; VI-NEXT: ; use s3418; VI-NEXT: ;;#ASMEND419; VI-NEXT: ;;#ASMSTART420; VI-NEXT: ; use s5421; VI-NEXT: ;;#ASMEND422; VI-NEXT: s_endpgm423;424; CI-LABEL: s_insertelement_v2i16_0_reghi_both_multi_use_1:425; CI: ; %bb.0:426; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0427; CI-NEXT: s_load_dword s4, s[8:9], 0x4428; CI-NEXT: s_add_i32 s12, s12, s17429; CI-NEXT: s_mov_b32 flat_scratch_lo, s13430; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8431; CI-NEXT: s_waitcnt lgkmcnt(0)432; CI-NEXT: s_load_dword s2, s[2:3], 0x0433; CI-NEXT: v_mov_b32_e32 v0, s0434; CI-NEXT: v_mov_b32_e32 v1, s1435; CI-NEXT: s_lshr_b32 s3, s4, 16436; CI-NEXT: s_waitcnt lgkmcnt(0)437; CI-NEXT: s_lshr_b32 s5, s2, 16438; CI-NEXT: s_lshr_b64 s[0:1], s[4:5], 16439; CI-NEXT: v_mov_b32_e32 v2, s0440; CI-NEXT: flat_store_dword v[0:1], v2441; CI-NEXT: ;;#ASMSTART442; CI-NEXT: ; use s3443; CI-NEXT: ;;#ASMEND444; CI-NEXT: ;;#ASMSTART445; CI-NEXT: ; use s5446; CI-NEXT: ;;#ASMEND447; CI-NEXT: s_endpgm448;449; GFX11-LABEL: s_insertelement_v2i16_0_reghi_both_multi_use_1:450; GFX11: ; %bb.0:451; GFX11-NEXT: s_clause 0x1452; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0453; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x10454; GFX11-NEXT: s_waitcnt lgkmcnt(0)455; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0456; GFX11-NEXT: s_lshr_b32 s3, s4, 16457; GFX11-NEXT: s_waitcnt lgkmcnt(0)458; GFX11-NEXT: s_lshr_b32 s2, s2, 16459; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)460; GFX11-NEXT: s_pack_ll_b32_b16 s4, s3, s2461; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s4462; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]463; GFX11-NEXT: ;;#ASMSTART464; GFX11-NEXT: ; use s3465; GFX11-NEXT: ;;#ASMEND466; GFX11-NEXT: ;;#ASMSTART467; GFX11-NEXT: ; use s2468; GFX11-NEXT: ;;#ASMEND469; GFX11-NEXT: s_endpgm470 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr471 %elt.hi = lshr i32 %elt.arg, 16472 %elt = trunc i32 %elt.hi to i16473 %vec.hi = extractelement <2 x i16> %vec, i32 1474 %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0475 store <2 x i16> %vecins, ptr addrspace(1) %out476 %use1 = zext i16 %elt to i32477 %vec.hi.use1 = zext i16 %vec.hi to i32478 479 call void asm sideeffect "; use $0", "s"(i32 %use1) #0480 call void asm sideeffect "; use $0", "s"(i32 %vec.hi.use1) #0481 ret void482}483 484define amdgpu_kernel void @s_insertelement_v2i16_1(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr) #0 {485; GFX9-LABEL: s_insertelement_v2i16_1:486; GFX9: ; %bb.0:487; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0488; GFX9-NEXT: v_mov_b32_e32 v0, 0489; GFX9-NEXT: s_waitcnt lgkmcnt(0)490; GFX9-NEXT: s_load_dword s2, s[2:3], 0x0491; GFX9-NEXT: s_waitcnt lgkmcnt(0)492; GFX9-NEXT: s_pack_ll_b32_b16 s2, s2, 0x3e7493; GFX9-NEXT: v_mov_b32_e32 v1, s2494; GFX9-NEXT: global_store_dword v0, v1, s[0:1]495; GFX9-NEXT: s_endpgm496;497; CIVI-LABEL: s_insertelement_v2i16_1:498; CIVI: ; %bb.0:499; CIVI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0500; CIVI-NEXT: s_add_i32 s12, s12, s17501; CIVI-NEXT: s_mov_b32 flat_scratch_lo, s13502; CIVI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8503; CIVI-NEXT: s_waitcnt lgkmcnt(0)504; CIVI-NEXT: s_load_dword s2, s[2:3], 0x0505; CIVI-NEXT: v_mov_b32_e32 v0, s0506; CIVI-NEXT: v_mov_b32_e32 v1, s1507; CIVI-NEXT: s_waitcnt lgkmcnt(0)508; CIVI-NEXT: s_and_b32 s0, s2, 0xffff509; CIVI-NEXT: s_or_b32 s0, s0, 0x3e70000510; CIVI-NEXT: v_mov_b32_e32 v2, s0511; CIVI-NEXT: flat_store_dword v[0:1], v2512; CIVI-NEXT: s_endpgm513;514; GFX11-LABEL: s_insertelement_v2i16_1:515; GFX11: ; %bb.0:516; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0517; GFX11-NEXT: s_waitcnt lgkmcnt(0)518; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0519; GFX11-NEXT: s_waitcnt lgkmcnt(0)520; GFX11-NEXT: s_pack_ll_b32_b16 s2, s2, 0x3e7521; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)522; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2523; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]524; GFX11-NEXT: s_endpgm525 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr526 %vecins = insertelement <2 x i16> %vec, i16 999, i32 1527 store <2 x i16> %vecins, ptr addrspace(1) %out528 ret void529}530 531define amdgpu_kernel void @s_insertelement_v2i16_1_reg(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, [8 x i32], i16 %elt) #0 {532; GFX9-LABEL: s_insertelement_v2i16_1_reg:533; GFX9: ; %bb.0:534; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0535; GFX9-NEXT: s_load_dword s4, s[8:9], 0x30536; GFX9-NEXT: v_mov_b32_e32 v0, 0537; GFX9-NEXT: s_waitcnt lgkmcnt(0)538; GFX9-NEXT: s_load_dword s2, s[2:3], 0x0539; GFX9-NEXT: s_waitcnt lgkmcnt(0)540; GFX9-NEXT: s_pack_ll_b32_b16 s2, s2, s4541; GFX9-NEXT: v_mov_b32_e32 v1, s2542; GFX9-NEXT: global_store_dword v0, v1, s[0:1]543; GFX9-NEXT: s_endpgm544;545; VI-LABEL: s_insertelement_v2i16_1_reg:546; VI: ; %bb.0:547; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0548; VI-NEXT: s_load_dword s4, s[8:9], 0x30549; VI-NEXT: s_add_i32 s12, s12, s17550; VI-NEXT: s_mov_b32 flat_scratch_lo, s13551; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8552; VI-NEXT: s_waitcnt lgkmcnt(0)553; VI-NEXT: s_load_dword s2, s[2:3], 0x0554; VI-NEXT: v_mov_b32_e32 v0, s0555; VI-NEXT: v_mov_b32_e32 v1, s1556; VI-NEXT: s_lshl_b32 s0, s4, 16557; VI-NEXT: s_waitcnt lgkmcnt(0)558; VI-NEXT: s_and_b32 s1, s2, 0xffff559; VI-NEXT: s_or_b32 s0, s1, s0560; VI-NEXT: v_mov_b32_e32 v2, s0561; VI-NEXT: flat_store_dword v[0:1], v2562; VI-NEXT: s_endpgm563;564; CI-LABEL: s_insertelement_v2i16_1_reg:565; CI: ; %bb.0:566; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0567; CI-NEXT: s_load_dword s4, s[8:9], 0xc568; CI-NEXT: s_add_i32 s12, s12, s17569; CI-NEXT: s_mov_b32 flat_scratch_lo, s13570; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8571; CI-NEXT: s_waitcnt lgkmcnt(0)572; CI-NEXT: s_load_dword s2, s[2:3], 0x0573; CI-NEXT: v_mov_b32_e32 v0, s0574; CI-NEXT: v_mov_b32_e32 v1, s1575; CI-NEXT: s_lshl_b32 s1, s4, 16576; CI-NEXT: s_waitcnt lgkmcnt(0)577; CI-NEXT: s_and_b32 s0, s2, 0xffff578; CI-NEXT: s_or_b32 s0, s0, s1579; CI-NEXT: v_mov_b32_e32 v2, s0580; CI-NEXT: flat_store_dword v[0:1], v2581; CI-NEXT: s_endpgm582;583; GFX11-LABEL: s_insertelement_v2i16_1_reg:584; GFX11: ; %bb.0:585; GFX11-NEXT: s_clause 0x1586; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0587; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x30588; GFX11-NEXT: s_waitcnt lgkmcnt(0)589; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0590; GFX11-NEXT: s_waitcnt lgkmcnt(0)591; GFX11-NEXT: s_pack_ll_b32_b16 s2, s2, s4592; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)593; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2594; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]595; GFX11-NEXT: s_endpgm596 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr597 %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 1598 store <2 x i16> %vecins, ptr addrspace(1) %out599 ret void600}601 602define amdgpu_kernel void @s_insertelement_v2f16_0(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr) #0 {603; GFX9-LABEL: s_insertelement_v2f16_0:604; GFX9: ; %bb.0:605; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0606; GFX9-NEXT: v_mov_b32_e32 v0, 0607; GFX9-NEXT: s_waitcnt lgkmcnt(0)608; GFX9-NEXT: s_load_dword s2, s[2:3], 0x0609; GFX9-NEXT: s_waitcnt lgkmcnt(0)610; GFX9-NEXT: s_lshr_b32 s2, s2, 16611; GFX9-NEXT: s_pack_ll_b32_b16 s2, 0x4500, s2612; GFX9-NEXT: v_mov_b32_e32 v1, s2613; GFX9-NEXT: global_store_dword v0, v1, s[0:1]614; GFX9-NEXT: s_endpgm615;616; CIVI-LABEL: s_insertelement_v2f16_0:617; CIVI: ; %bb.0:618; CIVI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0619; CIVI-NEXT: s_add_i32 s12, s12, s17620; CIVI-NEXT: s_mov_b32 flat_scratch_lo, s13621; CIVI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8622; CIVI-NEXT: s_waitcnt lgkmcnt(0)623; CIVI-NEXT: s_load_dword s2, s[2:3], 0x0624; CIVI-NEXT: v_mov_b32_e32 v0, s0625; CIVI-NEXT: v_mov_b32_e32 v1, s1626; CIVI-NEXT: s_waitcnt lgkmcnt(0)627; CIVI-NEXT: s_and_b32 s0, s2, 0xffff0000628; CIVI-NEXT: s_or_b32 s0, s0, 0x4500629; CIVI-NEXT: v_mov_b32_e32 v2, s0630; CIVI-NEXT: flat_store_dword v[0:1], v2631; CIVI-NEXT: s_endpgm632;633; GFX11-LABEL: s_insertelement_v2f16_0:634; GFX11: ; %bb.0:635; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0636; GFX11-NEXT: s_waitcnt lgkmcnt(0)637; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0638; GFX11-NEXT: s_waitcnt lgkmcnt(0)639; GFX11-NEXT: s_lshr_b32 s2, s2, 16640; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)641; GFX11-NEXT: s_pack_ll_b32_b16 s2, 0x4500, s2642; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2643; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]644; GFX11-NEXT: s_endpgm645 %vec = load <2 x half>, ptr addrspace(4) %vec.ptr646 %vecins = insertelement <2 x half> %vec, half 5.000000e+00, i32 0647 store <2 x half> %vecins, ptr addrspace(1) %out648 ret void649}650 651define amdgpu_kernel void @s_insertelement_v2f16_1(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr) #0 {652; GFX9-LABEL: s_insertelement_v2f16_1:653; GFX9: ; %bb.0:654; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0655; GFX9-NEXT: v_mov_b32_e32 v0, 0656; GFX9-NEXT: s_waitcnt lgkmcnt(0)657; GFX9-NEXT: s_load_dword s2, s[2:3], 0x0658; GFX9-NEXT: s_waitcnt lgkmcnt(0)659; GFX9-NEXT: s_pack_ll_b32_b16 s2, s2, 0x4500660; GFX9-NEXT: v_mov_b32_e32 v1, s2661; GFX9-NEXT: global_store_dword v0, v1, s[0:1]662; GFX9-NEXT: s_endpgm663;664; CIVI-LABEL: s_insertelement_v2f16_1:665; CIVI: ; %bb.0:666; CIVI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0667; CIVI-NEXT: s_add_i32 s12, s12, s17668; CIVI-NEXT: s_mov_b32 flat_scratch_lo, s13669; CIVI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8670; CIVI-NEXT: s_waitcnt lgkmcnt(0)671; CIVI-NEXT: s_load_dword s2, s[2:3], 0x0672; CIVI-NEXT: v_mov_b32_e32 v0, s0673; CIVI-NEXT: v_mov_b32_e32 v1, s1674; CIVI-NEXT: s_waitcnt lgkmcnt(0)675; CIVI-NEXT: s_and_b32 s0, s2, 0xffff676; CIVI-NEXT: s_or_b32 s0, s0, 0x45000000677; CIVI-NEXT: v_mov_b32_e32 v2, s0678; CIVI-NEXT: flat_store_dword v[0:1], v2679; CIVI-NEXT: s_endpgm680;681; GFX11-LABEL: s_insertelement_v2f16_1:682; GFX11: ; %bb.0:683; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x0684; GFX11-NEXT: s_waitcnt lgkmcnt(0)685; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x0686; GFX11-NEXT: s_waitcnt lgkmcnt(0)687; GFX11-NEXT: s_pack_ll_b32_b16 s2, s2, 0x4500688; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)689; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2690; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]691; GFX11-NEXT: s_endpgm692 %vec = load <2 x half>, ptr addrspace(4) %vec.ptr693 %vecins = insertelement <2 x half> %vec, half 5.000000e+00, i32 1694 store <2 x half> %vecins, ptr addrspace(1) %out695 ret void696}697 698define amdgpu_kernel void @v_insertelement_v2i16_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {699; GFX9-LABEL: v_insertelement_v2i16_0:700; GFX9: ; %bb.0:701; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0702; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0703; GFX9-NEXT: v_mov_b32_e32 v2, 0x3e7704; GFX9-NEXT: s_waitcnt lgkmcnt(0)705; GFX9-NEXT: global_load_dword v1, v0, s[2:3]706; GFX9-NEXT: s_mov_b32 s2, 0xffff707; GFX9-NEXT: s_waitcnt vmcnt(0)708; GFX9-NEXT: v_bfi_b32 v1, s2, v2, v1709; GFX9-NEXT: global_store_dword v0, v1, s[0:1]710; GFX9-NEXT: s_endpgm711;712; VI-LABEL: v_insertelement_v2i16_0:713; VI: ; %bb.0:714; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0715; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0716; VI-NEXT: s_add_i32 s12, s12, s17717; VI-NEXT: s_mov_b32 flat_scratch_lo, s13718; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8719; VI-NEXT: s_waitcnt lgkmcnt(0)720; VI-NEXT: v_mov_b32_e32 v1, s3721; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2722; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc723; VI-NEXT: flat_load_dword v3, v[0:1]724; VI-NEXT: v_mov_b32_e32 v1, s1725; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v2726; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc727; VI-NEXT: s_waitcnt vmcnt(0)728; VI-NEXT: v_and_b32_e32 v2, 0xffff0000, v3729; VI-NEXT: v_or_b32_e32 v2, 0x3e7, v2730; VI-NEXT: flat_store_dword v[0:1], v2731; VI-NEXT: s_endpgm732;733; CI-LABEL: v_insertelement_v2i16_0:734; CI: ; %bb.0:735; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0736; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v0737; CI-NEXT: s_add_i32 s12, s12, s17738; CI-NEXT: s_mov_b32 flat_scratch_lo, s13739; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8740; CI-NEXT: s_waitcnt lgkmcnt(0)741; CI-NEXT: v_mov_b32_e32 v1, s3742; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v2743; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc744; CI-NEXT: flat_load_dword v3, v[0:1]745; CI-NEXT: v_mov_b32_e32 v1, s1746; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v2747; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc748; CI-NEXT: s_waitcnt vmcnt(0)749; CI-NEXT: v_and_b32_e32 v2, 0xffff0000, v3750; CI-NEXT: v_or_b32_e32 v2, 0x3e7, v2751; CI-NEXT: flat_store_dword v[0:1], v2752; CI-NEXT: s_endpgm753;754; GFX11-TRUE16-LABEL: v_insertelement_v2i16_0:755; GFX11-TRUE16: ; %bb.0:756; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x0757; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0758; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)759; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v0760; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)761; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]762; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)763; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, 0x3e7764; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]765; GFX11-TRUE16-NEXT: s_endpgm766;767; GFX11-FAKE16-LABEL: v_insertelement_v2i16_0:768; GFX11-FAKE16: ; %bb.0:769; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x0770; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0771; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)772; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v0773; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)774; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]775; GFX11-FAKE16-NEXT: s_movk_i32 s2, 0x3e7776; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)777; GFX11-FAKE16-NEXT: v_bfi_b32 v1, 0xffff, s2, v1778; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]779; GFX11-FAKE16-NEXT: s_endpgm780 %tid = call i32 @llvm.amdgcn.workitem.id.x() #1781 %tid.ext = sext i32 %tid to i64782 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext783 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext784 %vec = load <2 x i16>, ptr addrspace(1) %in.gep785 %vecins = insertelement <2 x i16> %vec, i16 999, i32 0786 store <2 x i16> %vecins, ptr addrspace(1) %out.gep787 ret void788}789 790define amdgpu_kernel void @v_insertelement_v2i16_0_reghi(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %elt.arg) #0 {791; GFX9-LABEL: v_insertelement_v2i16_0_reghi:792; GFX9: ; %bb.0:793; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0794; GFX9-NEXT: s_load_dword s4, s[8:9], 0x10795; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0796; GFX9-NEXT: v_mov_b32_e32 v2, 0x7060302797; GFX9-NEXT: s_waitcnt lgkmcnt(0)798; GFX9-NEXT: global_load_dword v1, v0, s[2:3]799; GFX9-NEXT: s_waitcnt vmcnt(0)800; GFX9-NEXT: v_perm_b32 v1, v1, s4, v2801; GFX9-NEXT: global_store_dword v0, v1, s[0:1]802; GFX9-NEXT: s_endpgm803;804; VI-LABEL: v_insertelement_v2i16_0_reghi:805; VI: ; %bb.0:806; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0807; VI-NEXT: s_load_dword s4, s[8:9], 0x10808; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0809; VI-NEXT: s_add_i32 s12, s12, s17810; VI-NEXT: s_mov_b32 flat_scratch_lo, s13811; VI-NEXT: s_waitcnt lgkmcnt(0)812; VI-NEXT: v_mov_b32_e32 v1, s3813; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2814; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8815; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc816; VI-NEXT: flat_load_dword v3, v[0:1]817; VI-NEXT: v_mov_b32_e32 v1, s1818; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v2819; VI-NEXT: v_mov_b32_e32 v2, 0x3020706820; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc821; VI-NEXT: s_waitcnt vmcnt(0)822; VI-NEXT: v_perm_b32 v2, s4, v3, v2823; VI-NEXT: flat_store_dword v[0:1], v2824; VI-NEXT: s_endpgm825;826; CI-LABEL: v_insertelement_v2i16_0_reghi:827; CI: ; %bb.0:828; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0829; CI-NEXT: s_load_dword s4, s[8:9], 0x4830; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v0831; CI-NEXT: s_add_i32 s12, s12, s17832; CI-NEXT: s_mov_b32 flat_scratch_lo, s13833; CI-NEXT: s_waitcnt lgkmcnt(0)834; CI-NEXT: v_mov_b32_e32 v1, s3835; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v2836; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8837; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc838; CI-NEXT: flat_load_dword v3, v[0:1]839; CI-NEXT: v_mov_b32_e32 v1, s1840; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v2841; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc842; CI-NEXT: s_waitcnt vmcnt(0)843; CI-NEXT: v_lshrrev_b32_e32 v2, 16, v3844; CI-NEXT: v_alignbit_b32 v2, v2, s4, 16845; CI-NEXT: flat_store_dword v[0:1], v2846; CI-NEXT: s_endpgm847;848; GFX11-TRUE16-LABEL: v_insertelement_v2i16_0_reghi:849; GFX11-TRUE16: ; %bb.0:850; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x0851; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0852; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x10853; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)854; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v0855; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)856; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]857; GFX11-TRUE16-NEXT: v_mov_b32_e32 v2, s4858; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)859; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.h860; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]861; GFX11-TRUE16-NEXT: s_endpgm862;863; GFX11-FAKE16-LABEL: v_insertelement_v2i16_0_reghi:864; GFX11-FAKE16: ; %bb.0:865; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x0866; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0867; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x10868; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)869; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v0870; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)871; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]872; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)873; GFX11-FAKE16-NEXT: v_perm_b32 v1, v1, s4, 0x7060302874; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]875; GFX11-FAKE16-NEXT: s_endpgm876 %tid = call i32 @llvm.amdgcn.workitem.id.x() #1877 %tid.ext = sext i32 %tid to i64878 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext879 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext880 %vec = load <2 x i16>, ptr addrspace(1) %in.gep881 %elt.hi = lshr i32 %elt.arg, 16882 %elt = trunc i32 %elt.hi to i16883 %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0884 store <2 x i16> %vecins, ptr addrspace(1) %out.gep885 ret void886}887 888define amdgpu_kernel void @v_insertelement_v2i16_0_inlineimm(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {889; GFX9-LABEL: v_insertelement_v2i16_0_inlineimm:890; GFX9: ; %bb.0:891; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0892; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0893; GFX9-NEXT: s_waitcnt lgkmcnt(0)894; GFX9-NEXT: global_load_dword v1, v0, s[2:3]895; GFX9-NEXT: s_mov_b32 s2, 0xffff896; GFX9-NEXT: s_waitcnt vmcnt(0)897; GFX9-NEXT: v_bfi_b32 v1, s2, 53, v1898; GFX9-NEXT: global_store_dword v0, v1, s[0:1]899; GFX9-NEXT: s_endpgm900;901; VI-LABEL: v_insertelement_v2i16_0_inlineimm:902; VI: ; %bb.0:903; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0904; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0905; VI-NEXT: s_add_i32 s12, s12, s17906; VI-NEXT: s_mov_b32 flat_scratch_lo, s13907; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8908; VI-NEXT: s_waitcnt lgkmcnt(0)909; VI-NEXT: v_mov_b32_e32 v1, s3910; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2911; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc912; VI-NEXT: flat_load_dword v3, v[0:1]913; VI-NEXT: v_mov_b32_e32 v1, s1914; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v2915; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc916; VI-NEXT: s_waitcnt vmcnt(0)917; VI-NEXT: v_and_b32_e32 v2, 0xffff0000, v3918; VI-NEXT: v_or_b32_e32 v2, 53, v2919; VI-NEXT: flat_store_dword v[0:1], v2920; VI-NEXT: s_endpgm921;922; CI-LABEL: v_insertelement_v2i16_0_inlineimm:923; CI: ; %bb.0:924; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0925; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v0926; CI-NEXT: s_add_i32 s12, s12, s17927; CI-NEXT: s_mov_b32 flat_scratch_lo, s13928; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8929; CI-NEXT: s_waitcnt lgkmcnt(0)930; CI-NEXT: v_mov_b32_e32 v1, s3931; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v2932; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc933; CI-NEXT: flat_load_dword v3, v[0:1]934; CI-NEXT: v_mov_b32_e32 v1, s1935; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v2936; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc937; CI-NEXT: s_waitcnt vmcnt(0)938; CI-NEXT: v_and_b32_e32 v2, 0xffff0000, v3939; CI-NEXT: v_or_b32_e32 v2, 53, v2940; CI-NEXT: flat_store_dword v[0:1], v2941; CI-NEXT: s_endpgm942;943; GFX11-TRUE16-LABEL: v_insertelement_v2i16_0_inlineimm:944; GFX11-TRUE16: ; %bb.0:945; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x0946; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0947; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)948; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v0949; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)950; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]951; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)952; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, 53953; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]954; GFX11-TRUE16-NEXT: s_endpgm955;956; GFX11-FAKE16-LABEL: v_insertelement_v2i16_0_inlineimm:957; GFX11-FAKE16: ; %bb.0:958; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x0959; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0960; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)961; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v0962; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)963; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]964; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)965; GFX11-FAKE16-NEXT: v_bfi_b32 v1, 0xffff, 53, v1966; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]967; GFX11-FAKE16-NEXT: s_endpgm968 %tid = call i32 @llvm.amdgcn.workitem.id.x() #1969 %tid.ext = sext i32 %tid to i64970 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext971 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext972 %vec = load <2 x i16>, ptr addrspace(1) %in.gep973 %vecins = insertelement <2 x i16> %vec, i16 53, i32 0974 store <2 x i16> %vecins, ptr addrspace(1) %out.gep975 ret void976}977 978; FIXME: fold lshl_or c0, c1, v0 -> or (c0 << c1), v0979define amdgpu_kernel void @v_insertelement_v2i16_1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {980; GFX9-LABEL: v_insertelement_v2i16_1:981; GFX9: ; %bb.0:982; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0983; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0984; GFX9-NEXT: v_mov_b32_e32 v2, 0x5040100985; GFX9-NEXT: s_waitcnt lgkmcnt(0)986; GFX9-NEXT: global_load_dword v1, v0, s[2:3]987; GFX9-NEXT: s_movk_i32 s2, 0x3e7988; GFX9-NEXT: s_waitcnt vmcnt(0)989; GFX9-NEXT: v_perm_b32 v1, s2, v1, v2990; GFX9-NEXT: global_store_dword v0, v1, s[0:1]991; GFX9-NEXT: s_endpgm992;993; VI-LABEL: v_insertelement_v2i16_1:994; VI: ; %bb.0:995; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x0996; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0997; VI-NEXT: s_add_i32 s12, s12, s17998; VI-NEXT: s_mov_b32 flat_scratch_lo, s13999; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81000; VI-NEXT: s_waitcnt lgkmcnt(0)1001; VI-NEXT: v_mov_b32_e32 v1, s31002; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21003; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1004; VI-NEXT: flat_load_dword v3, v[0:1]1005; VI-NEXT: v_mov_b32_e32 v1, s11006; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v21007; VI-NEXT: v_mov_b32_e32 v2, 0x3e700001008; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1009; VI-NEXT: s_waitcnt vmcnt(0)1010; VI-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1011; VI-NEXT: flat_store_dword v[0:1], v21012; VI-NEXT: s_endpgm1013;1014; CI-LABEL: v_insertelement_v2i16_1:1015; CI: ; %bb.0:1016; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01017; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v01018; CI-NEXT: s_add_i32 s12, s12, s171019; CI-NEXT: s_mov_b32 flat_scratch_lo, s131020; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81021; CI-NEXT: s_waitcnt lgkmcnt(0)1022; CI-NEXT: v_mov_b32_e32 v1, s31023; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21024; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1025; CI-NEXT: flat_load_dword v3, v[0:1]1026; CI-NEXT: v_mov_b32_e32 v1, s11027; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v21028; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1029; CI-NEXT: s_waitcnt vmcnt(0)1030; CI-NEXT: v_and_b32_e32 v2, 0xffff, v31031; CI-NEXT: v_or_b32_e32 v2, 0x3e70000, v21032; CI-NEXT: flat_store_dword v[0:1], v21033; CI-NEXT: s_endpgm1034;1035; GFX11-TRUE16-LABEL: v_insertelement_v2i16_1:1036; GFX11-TRUE16: ; %bb.0:1037; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01038; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01039; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1040; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01041; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1042; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]1043; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1044; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, 0x3e71045; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]1046; GFX11-TRUE16-NEXT: s_endpgm1047;1048; GFX11-FAKE16-LABEL: v_insertelement_v2i16_1:1049; GFX11-FAKE16: ; %bb.0:1050; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01051; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01052; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1053; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01054; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1055; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]1056; GFX11-FAKE16-NEXT: s_movk_i32 s2, 0x3e71057; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1058; GFX11-FAKE16-NEXT: v_perm_b32 v1, s2, v1, 0x50401001059; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]1060; GFX11-FAKE16-NEXT: s_endpgm1061 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11062 %tid.ext = sext i32 %tid to i641063 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext1064 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext1065 %vec = load <2 x i16>, ptr addrspace(1) %in.gep1066 %vecins = insertelement <2 x i16> %vec, i16 999, i32 11067 store <2 x i16> %vecins, ptr addrspace(1) %out.gep1068 ret void1069}1070 1071define amdgpu_kernel void @v_insertelement_v2i16_1_inlineimm(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1072; GFX9-LABEL: v_insertelement_v2i16_1_inlineimm:1073; GFX9: ; %bb.0:1074; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01075; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01076; GFX9-NEXT: v_mov_b32_e32 v2, 0x50401001077; GFX9-NEXT: s_waitcnt lgkmcnt(0)1078; GFX9-NEXT: global_load_dword v1, v0, s[2:3]1079; GFX9-NEXT: s_waitcnt vmcnt(0)1080; GFX9-NEXT: v_perm_b32 v1, -15, v1, v21081; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1082; GFX9-NEXT: s_endpgm1083;1084; VI-LABEL: v_insertelement_v2i16_1_inlineimm:1085; VI: ; %bb.0:1086; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01087; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v01088; VI-NEXT: s_add_i32 s12, s12, s171089; VI-NEXT: s_mov_b32 flat_scratch_lo, s131090; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81091; VI-NEXT: s_waitcnt lgkmcnt(0)1092; VI-NEXT: v_mov_b32_e32 v1, s31093; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21094; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1095; VI-NEXT: flat_load_dword v3, v[0:1]1096; VI-NEXT: v_mov_b32_e32 v1, s11097; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v21098; VI-NEXT: v_mov_b32_e32 v2, 0xfff100001099; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1100; VI-NEXT: s_waitcnt vmcnt(0)1101; VI-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1102; VI-NEXT: flat_store_dword v[0:1], v21103; VI-NEXT: s_endpgm1104;1105; CI-LABEL: v_insertelement_v2i16_1_inlineimm:1106; CI: ; %bb.0:1107; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01108; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v01109; CI-NEXT: s_add_i32 s12, s12, s171110; CI-NEXT: s_mov_b32 flat_scratch_lo, s131111; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81112; CI-NEXT: s_waitcnt lgkmcnt(0)1113; CI-NEXT: v_mov_b32_e32 v1, s31114; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21115; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1116; CI-NEXT: flat_load_dword v3, v[0:1]1117; CI-NEXT: v_mov_b32_e32 v1, s11118; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v21119; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1120; CI-NEXT: s_waitcnt vmcnt(0)1121; CI-NEXT: v_and_b32_e32 v2, 0xffff, v31122; CI-NEXT: v_or_b32_e32 v2, 0xfff10000, v21123; CI-NEXT: flat_store_dword v[0:1], v21124; CI-NEXT: s_endpgm1125;1126; GFX11-TRUE16-LABEL: v_insertelement_v2i16_1_inlineimm:1127; GFX11-TRUE16: ; %bb.0:1128; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01129; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01130; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1131; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01132; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1133; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]1134; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1135; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, -151136; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]1137; GFX11-TRUE16-NEXT: s_endpgm1138;1139; GFX11-FAKE16-LABEL: v_insertelement_v2i16_1_inlineimm:1140; GFX11-FAKE16: ; %bb.0:1141; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01142; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01143; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1144; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01145; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1146; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]1147; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1148; GFX11-FAKE16-NEXT: v_perm_b32 v1, -15, v1, 0x50401001149; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]1150; GFX11-FAKE16-NEXT: s_endpgm1151 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11152 %tid.ext = sext i32 %tid to i641153 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext1154 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext1155 %vec = load <2 x i16>, ptr addrspace(1) %in.gep1156 %vecins = insertelement <2 x i16> %vec, i16 -15, i32 11157 store <2 x i16> %vecins, ptr addrspace(1) %out.gep1158 ret void1159}1160 1161define amdgpu_kernel void @v_insertelement_v2f16_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1162; GFX9-LABEL: v_insertelement_v2f16_0:1163; GFX9: ; %bb.0:1164; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01165; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01166; GFX9-NEXT: v_mov_b32_e32 v2, 0x45001167; GFX9-NEXT: s_waitcnt lgkmcnt(0)1168; GFX9-NEXT: global_load_dword v1, v0, s[2:3]1169; GFX9-NEXT: s_mov_b32 s2, 0xffff1170; GFX9-NEXT: s_waitcnt vmcnt(0)1171; GFX9-NEXT: v_bfi_b32 v1, s2, v2, v11172; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1173; GFX9-NEXT: s_endpgm1174;1175; VI-LABEL: v_insertelement_v2f16_0:1176; VI: ; %bb.0:1177; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01178; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v01179; VI-NEXT: s_add_i32 s12, s12, s171180; VI-NEXT: s_mov_b32 flat_scratch_lo, s131181; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81182; VI-NEXT: s_waitcnt lgkmcnt(0)1183; VI-NEXT: v_mov_b32_e32 v1, s31184; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21185; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1186; VI-NEXT: flat_load_dword v3, v[0:1]1187; VI-NEXT: v_mov_b32_e32 v1, s11188; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v21189; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1190; VI-NEXT: s_waitcnt vmcnt(0)1191; VI-NEXT: v_and_b32_e32 v2, 0xffff0000, v31192; VI-NEXT: v_or_b32_e32 v2, 0x4500, v21193; VI-NEXT: flat_store_dword v[0:1], v21194; VI-NEXT: s_endpgm1195;1196; CI-LABEL: v_insertelement_v2f16_0:1197; CI: ; %bb.0:1198; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01199; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v01200; CI-NEXT: s_add_i32 s12, s12, s171201; CI-NEXT: s_mov_b32 flat_scratch_lo, s131202; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81203; CI-NEXT: s_waitcnt lgkmcnt(0)1204; CI-NEXT: v_mov_b32_e32 v1, s31205; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21206; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1207; CI-NEXT: flat_load_dword v3, v[0:1]1208; CI-NEXT: v_mov_b32_e32 v1, s11209; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v21210; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1211; CI-NEXT: s_waitcnt vmcnt(0)1212; CI-NEXT: v_and_b32_e32 v2, 0xffff0000, v31213; CI-NEXT: v_or_b32_e32 v2, 0x4500, v21214; CI-NEXT: flat_store_dword v[0:1], v21215; CI-NEXT: s_endpgm1216;1217; GFX11-TRUE16-LABEL: v_insertelement_v2f16_0:1218; GFX11-TRUE16: ; %bb.0:1219; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01220; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01221; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1222; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01223; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1224; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]1225; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1226; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, 0x45001227; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]1228; GFX11-TRUE16-NEXT: s_endpgm1229;1230; GFX11-FAKE16-LABEL: v_insertelement_v2f16_0:1231; GFX11-FAKE16: ; %bb.0:1232; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01233; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01234; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1235; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01236; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1237; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]1238; GFX11-FAKE16-NEXT: s_movk_i32 s2, 0x45001239; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1240; GFX11-FAKE16-NEXT: v_bfi_b32 v1, 0xffff, s2, v11241; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]1242; GFX11-FAKE16-NEXT: s_endpgm1243 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11244 %tid.ext = sext i32 %tid to i641245 %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext1246 %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext1247 %vec = load <2 x half>, ptr addrspace(1) %in.gep1248 %vecins = insertelement <2 x half> %vec, half 5.000000e+00, i32 01249 store <2 x half> %vecins, ptr addrspace(1) %out.gep1250 ret void1251}1252 1253define amdgpu_kernel void @v_insertelement_v2f16_0_inlineimm(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1254; GFX9-LABEL: v_insertelement_v2f16_0_inlineimm:1255; GFX9: ; %bb.0:1256; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01257; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01258; GFX9-NEXT: s_waitcnt lgkmcnt(0)1259; GFX9-NEXT: global_load_dword v1, v0, s[2:3]1260; GFX9-NEXT: s_mov_b32 s2, 0xffff1261; GFX9-NEXT: s_waitcnt vmcnt(0)1262; GFX9-NEXT: v_bfi_b32 v1, s2, 53, v11263; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1264; GFX9-NEXT: s_endpgm1265;1266; VI-LABEL: v_insertelement_v2f16_0_inlineimm:1267; VI: ; %bb.0:1268; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01269; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v01270; VI-NEXT: s_add_i32 s12, s12, s171271; VI-NEXT: s_mov_b32 flat_scratch_lo, s131272; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81273; VI-NEXT: s_waitcnt lgkmcnt(0)1274; VI-NEXT: v_mov_b32_e32 v1, s31275; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21276; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1277; VI-NEXT: flat_load_dword v3, v[0:1]1278; VI-NEXT: v_mov_b32_e32 v1, s11279; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v21280; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1281; VI-NEXT: s_waitcnt vmcnt(0)1282; VI-NEXT: v_and_b32_e32 v2, 0xffff0000, v31283; VI-NEXT: v_or_b32_e32 v2, 53, v21284; VI-NEXT: flat_store_dword v[0:1], v21285; VI-NEXT: s_endpgm1286;1287; CI-LABEL: v_insertelement_v2f16_0_inlineimm:1288; CI: ; %bb.0:1289; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01290; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v01291; CI-NEXT: s_add_i32 s12, s12, s171292; CI-NEXT: s_mov_b32 flat_scratch_lo, s131293; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81294; CI-NEXT: s_waitcnt lgkmcnt(0)1295; CI-NEXT: v_mov_b32_e32 v1, s31296; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21297; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1298; CI-NEXT: flat_load_dword v3, v[0:1]1299; CI-NEXT: v_mov_b32_e32 v1, s11300; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v21301; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1302; CI-NEXT: s_waitcnt vmcnt(0)1303; CI-NEXT: v_and_b32_e32 v2, 0xffff0000, v31304; CI-NEXT: v_or_b32_e32 v2, 53, v21305; CI-NEXT: flat_store_dword v[0:1], v21306; CI-NEXT: s_endpgm1307;1308; GFX11-TRUE16-LABEL: v_insertelement_v2f16_0_inlineimm:1309; GFX11-TRUE16: ; %bb.0:1310; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01311; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01312; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1313; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01314; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1315; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]1316; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1317; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, 531318; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]1319; GFX11-TRUE16-NEXT: s_endpgm1320;1321; GFX11-FAKE16-LABEL: v_insertelement_v2f16_0_inlineimm:1322; GFX11-FAKE16: ; %bb.0:1323; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01324; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01325; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1326; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01327; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1328; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]1329; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1330; GFX11-FAKE16-NEXT: v_bfi_b32 v1, 0xffff, 53, v11331; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]1332; GFX11-FAKE16-NEXT: s_endpgm1333 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11334 %tid.ext = sext i32 %tid to i641335 %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext1336 %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext1337 %vec = load <2 x half>, ptr addrspace(1) %in.gep1338 %vecins = insertelement <2 x half> %vec, half 0xH0035, i32 01339 store <2 x half> %vecins, ptr addrspace(1) %out.gep1340 ret void1341}1342 1343define amdgpu_kernel void @v_insertelement_v2f16_1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1344; GFX9-LABEL: v_insertelement_v2f16_1:1345; GFX9: ; %bb.0:1346; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01347; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01348; GFX9-NEXT: v_mov_b32_e32 v2, 0x50401001349; GFX9-NEXT: s_waitcnt lgkmcnt(0)1350; GFX9-NEXT: global_load_dword v1, v0, s[2:3]1351; GFX9-NEXT: s_movk_i32 s2, 0x45001352; GFX9-NEXT: s_waitcnt vmcnt(0)1353; GFX9-NEXT: v_perm_b32 v1, s2, v1, v21354; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1355; GFX9-NEXT: s_endpgm1356;1357; VI-LABEL: v_insertelement_v2f16_1:1358; VI: ; %bb.0:1359; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01360; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v01361; VI-NEXT: s_add_i32 s12, s12, s171362; VI-NEXT: s_mov_b32 flat_scratch_lo, s131363; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81364; VI-NEXT: s_waitcnt lgkmcnt(0)1365; VI-NEXT: v_mov_b32_e32 v1, s31366; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21367; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1368; VI-NEXT: flat_load_dword v3, v[0:1]1369; VI-NEXT: v_mov_b32_e32 v1, s11370; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v21371; VI-NEXT: v_mov_b32_e32 v2, 0x450000001372; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1373; VI-NEXT: s_waitcnt vmcnt(0)1374; VI-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1375; VI-NEXT: flat_store_dword v[0:1], v21376; VI-NEXT: s_endpgm1377;1378; CI-LABEL: v_insertelement_v2f16_1:1379; CI: ; %bb.0:1380; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01381; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v01382; CI-NEXT: s_add_i32 s12, s12, s171383; CI-NEXT: s_mov_b32 flat_scratch_lo, s131384; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81385; CI-NEXT: s_waitcnt lgkmcnt(0)1386; CI-NEXT: v_mov_b32_e32 v1, s31387; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21388; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1389; CI-NEXT: flat_load_dword v3, v[0:1]1390; CI-NEXT: v_mov_b32_e32 v1, s11391; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v21392; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1393; CI-NEXT: s_waitcnt vmcnt(0)1394; CI-NEXT: v_and_b32_e32 v2, 0xffff, v31395; CI-NEXT: v_or_b32_e32 v2, 0x45000000, v21396; CI-NEXT: flat_store_dword v[0:1], v21397; CI-NEXT: s_endpgm1398;1399; GFX11-TRUE16-LABEL: v_insertelement_v2f16_1:1400; GFX11-TRUE16: ; %bb.0:1401; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01402; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01403; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1404; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01405; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1406; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]1407; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1408; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, 0x45001409; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]1410; GFX11-TRUE16-NEXT: s_endpgm1411;1412; GFX11-FAKE16-LABEL: v_insertelement_v2f16_1:1413; GFX11-FAKE16: ; %bb.0:1414; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01415; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01416; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1417; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01418; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1419; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]1420; GFX11-FAKE16-NEXT: s_movk_i32 s2, 0x45001421; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1422; GFX11-FAKE16-NEXT: v_perm_b32 v1, s2, v1, 0x50401001423; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]1424; GFX11-FAKE16-NEXT: s_endpgm1425 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11426 %tid.ext = sext i32 %tid to i641427 %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext1428 %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext1429 %vec = load <2 x half>, ptr addrspace(1) %in.gep1430 %vecins = insertelement <2 x half> %vec, half 5.000000e+00, i32 11431 store <2 x half> %vecins, ptr addrspace(1) %out.gep1432 ret void1433}1434 1435define amdgpu_kernel void @v_insertelement_v2f16_1_inlineimm(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1436; GFX9-LABEL: v_insertelement_v2f16_1_inlineimm:1437; GFX9: ; %bb.0:1438; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01439; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01440; GFX9-NEXT: v_mov_b32_e32 v2, 0x50401001441; GFX9-NEXT: s_waitcnt lgkmcnt(0)1442; GFX9-NEXT: global_load_dword v1, v0, s[2:3]1443; GFX9-NEXT: s_waitcnt vmcnt(0)1444; GFX9-NEXT: v_perm_b32 v1, 35, v1, v21445; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1446; GFX9-NEXT: s_endpgm1447;1448; VI-LABEL: v_insertelement_v2f16_1_inlineimm:1449; VI: ; %bb.0:1450; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01451; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v01452; VI-NEXT: s_add_i32 s12, s12, s171453; VI-NEXT: s_mov_b32 flat_scratch_lo, s131454; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81455; VI-NEXT: s_waitcnt lgkmcnt(0)1456; VI-NEXT: v_mov_b32_e32 v1, s31457; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21458; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1459; VI-NEXT: flat_load_dword v3, v[0:1]1460; VI-NEXT: v_mov_b32_e32 v1, s11461; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v21462; VI-NEXT: v_mov_b32_e32 v2, 0x2300001463; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1464; VI-NEXT: s_waitcnt vmcnt(0)1465; VI-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1466; VI-NEXT: flat_store_dword v[0:1], v21467; VI-NEXT: s_endpgm1468;1469; CI-LABEL: v_insertelement_v2f16_1_inlineimm:1470; CI: ; %bb.0:1471; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01472; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v01473; CI-NEXT: s_add_i32 s12, s12, s171474; CI-NEXT: s_mov_b32 flat_scratch_lo, s131475; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81476; CI-NEXT: s_waitcnt lgkmcnt(0)1477; CI-NEXT: v_mov_b32_e32 v1, s31478; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21479; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1480; CI-NEXT: flat_load_dword v3, v[0:1]1481; CI-NEXT: v_mov_b32_e32 v1, s11482; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v21483; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1484; CI-NEXT: s_waitcnt vmcnt(0)1485; CI-NEXT: v_and_b32_e32 v2, 0xffff, v31486; CI-NEXT: v_or_b32_e32 v2, 0x230000, v21487; CI-NEXT: flat_store_dword v[0:1], v21488; CI-NEXT: s_endpgm1489;1490; GFX11-TRUE16-LABEL: v_insertelement_v2f16_1_inlineimm:1491; GFX11-TRUE16: ; %bb.0:1492; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01493; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01494; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1495; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01496; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1497; GFX11-TRUE16-NEXT: global_load_b32 v1, v0, s[2:3]1498; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1499; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, 351500; GFX11-TRUE16-NEXT: global_store_b32 v0, v1, s[0:1]1501; GFX11-TRUE16-NEXT: s_endpgm1502;1503; GFX11-FAKE16-LABEL: v_insertelement_v2f16_1_inlineimm:1504; GFX11-FAKE16: ; %bb.0:1505; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01506; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01507; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1508; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 2, v01509; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1510; GFX11-FAKE16-NEXT: global_load_b32 v1, v0, s[2:3]1511; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1512; GFX11-FAKE16-NEXT: v_perm_b32 v1, 35, v1, 0x50401001513; GFX11-FAKE16-NEXT: global_store_b32 v0, v1, s[0:1]1514; GFX11-FAKE16-NEXT: s_endpgm1515 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11516 %tid.ext = sext i32 %tid to i641517 %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext1518 %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext1519 %vec = load <2 x half>, ptr addrspace(1) %in.gep1520 %vecins = insertelement <2 x half> %vec, half 0xH0023, i32 11521 store <2 x half> %vecins, ptr addrspace(1) %out.gep1522 ret void1523}1524 1525; FIXME: Enable for others when argument load not split1526define amdgpu_kernel void @s_insertelement_v2i16_dynamic(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, ptr addrspace(4) %idx.ptr) #0 {1527; GFX9-LABEL: s_insertelement_v2i16_dynamic:1528; GFX9: ; %bb.0:1529; GFX9-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x101530; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01531; GFX9-NEXT: v_mov_b32_e32 v0, 01532; GFX9-NEXT: s_waitcnt lgkmcnt(0)1533; GFX9-NEXT: s_load_dword s6, s[4:5], 0x01534; GFX9-NEXT: s_load_dword s7, s[2:3], 0x01535; GFX9-NEXT: s_waitcnt lgkmcnt(0)1536; GFX9-NEXT: s_lshl_b32 s3, s6, 41537; GFX9-NEXT: s_xor_b32 s2, s7, 0x3e703e71538; GFX9-NEXT: s_lshl_b32 s3, 0xffff, s31539; GFX9-NEXT: s_and_b32 s2, s2, s31540; GFX9-NEXT: s_xor_b32 s2, s2, s71541; GFX9-NEXT: v_mov_b32_e32 v1, s21542; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1543; GFX9-NEXT: s_endpgm1544;1545; VI-LABEL: s_insertelement_v2i16_dynamic:1546; VI: ; %bb.0:1547; VI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x101548; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01549; VI-NEXT: s_add_i32 s12, s12, s171550; VI-NEXT: s_mov_b32 flat_scratch_lo, s131551; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81552; VI-NEXT: s_waitcnt lgkmcnt(0)1553; VI-NEXT: s_load_dword s4, s[4:5], 0x01554; VI-NEXT: s_load_dword s2, s[2:3], 0x01555; VI-NEXT: v_mov_b32_e32 v1, s11556; VI-NEXT: v_mov_b32_e32 v0, s01557; VI-NEXT: s_waitcnt lgkmcnt(0)1558; VI-NEXT: s_lshl_b32 s1, s4, 41559; VI-NEXT: s_xor_b32 s0, s2, 0x3e703e71560; VI-NEXT: s_lshl_b32 s1, 0xffff, s11561; VI-NEXT: s_and_b32 s0, s0, s11562; VI-NEXT: s_xor_b32 s0, s0, s21563; VI-NEXT: v_mov_b32_e32 v2, s01564; VI-NEXT: flat_store_dword v[0:1], v21565; VI-NEXT: s_endpgm1566;1567; CI-LABEL: s_insertelement_v2i16_dynamic:1568; CI: ; %bb.0:1569; CI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x41570; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01571; CI-NEXT: s_add_i32 s12, s12, s171572; CI-NEXT: s_mov_b32 flat_scratch_lo, s131573; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81574; CI-NEXT: s_waitcnt lgkmcnt(0)1575; CI-NEXT: s_load_dword s4, s[4:5], 0x01576; CI-NEXT: s_load_dword s2, s[2:3], 0x01577; CI-NEXT: v_mov_b32_e32 v1, s11578; CI-NEXT: v_mov_b32_e32 v0, s01579; CI-NEXT: s_waitcnt lgkmcnt(0)1580; CI-NEXT: s_lshl_b32 s1, s4, 41581; CI-NEXT: s_xor_b32 s0, s2, 0x3e703e71582; CI-NEXT: s_lshl_b32 s1, 0xffff, s11583; CI-NEXT: s_and_b32 s0, s0, s11584; CI-NEXT: s_xor_b32 s0, s0, s21585; CI-NEXT: v_mov_b32_e32 v2, s01586; CI-NEXT: flat_store_dword v[0:1], v21587; CI-NEXT: s_endpgm1588;1589; GFX11-LABEL: s_insertelement_v2i16_dynamic:1590; GFX11: ; %bb.0:1591; GFX11-NEXT: s_clause 0x11592; GFX11-NEXT: s_load_b64 s[6:7], s[4:5], 0x101593; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x01594; GFX11-NEXT: s_waitcnt lgkmcnt(0)1595; GFX11-NEXT: s_load_b32 s4, s[6:7], 0x01596; GFX11-NEXT: s_load_b32 s2, s[2:3], 0x01597; GFX11-NEXT: s_waitcnt lgkmcnt(0)1598; GFX11-NEXT: s_lshl_b32 s3, s4, 41599; GFX11-NEXT: s_xor_b32 s4, s2, 0x3e703e71600; GFX11-NEXT: s_lshl_b32 s3, 0xffff, s31601; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1602; GFX11-NEXT: s_and_b32 s3, s4, s31603; GFX11-NEXT: s_xor_b32 s2, s3, s21604; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1605; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s21606; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1607; GFX11-NEXT: s_endpgm1608 %idx = load volatile i32, ptr addrspace(4) %idx.ptr1609 %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr1610 %vecins = insertelement <2 x i16> %vec, i16 999, i32 %idx1611 store <2 x i16> %vecins, ptr addrspace(1) %out1612 ret void1613}1614 1615define amdgpu_kernel void @v_insertelement_v2i16_dynamic_sgpr(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %idx) #0 {1616; GFX9-LABEL: v_insertelement_v2i16_dynamic_sgpr:1617; GFX9: ; %bb.0:1618; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01619; GFX9-NEXT: s_load_dword s4, s[8:9], 0x101620; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01621; GFX9-NEXT: v_mov_b32_e32 v2, 0x3e703e71622; GFX9-NEXT: s_waitcnt lgkmcnt(0)1623; GFX9-NEXT: global_load_dword v1, v0, s[2:3]1624; GFX9-NEXT: s_lshl_b32 s2, s4, 41625; GFX9-NEXT: s_lshl_b32 s2, 0xffff, s21626; GFX9-NEXT: s_waitcnt vmcnt(0)1627; GFX9-NEXT: v_bfi_b32 v1, s2, v2, v11628; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1629; GFX9-NEXT: s_endpgm1630;1631; VI-LABEL: v_insertelement_v2i16_dynamic_sgpr:1632; VI: ; %bb.0:1633; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01634; VI-NEXT: s_load_dword s4, s[8:9], 0x101635; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v01636; VI-NEXT: s_add_i32 s12, s12, s171637; VI-NEXT: s_mov_b32 flat_scratch_lo, s131638; VI-NEXT: s_waitcnt lgkmcnt(0)1639; VI-NEXT: v_mov_b32_e32 v1, s31640; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21641; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81642; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1643; VI-NEXT: flat_load_dword v3, v[0:1]1644; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v21645; VI-NEXT: s_lshl_b32 s0, s4, 41646; VI-NEXT: v_mov_b32_e32 v1, s11647; VI-NEXT: s_lshl_b32 s0, 0xffff, s01648; VI-NEXT: v_mov_b32_e32 v2, 0x3e703e71649; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1650; VI-NEXT: s_waitcnt vmcnt(0)1651; VI-NEXT: v_bfi_b32 v2, s0, v2, v31652; VI-NEXT: flat_store_dword v[0:1], v21653; VI-NEXT: s_endpgm1654;1655; CI-LABEL: v_insertelement_v2i16_dynamic_sgpr:1656; CI: ; %bb.0:1657; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01658; CI-NEXT: s_load_dword s4, s[8:9], 0x41659; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v01660; CI-NEXT: s_add_i32 s12, s12, s171661; CI-NEXT: s_mov_b32 flat_scratch_lo, s131662; CI-NEXT: s_waitcnt lgkmcnt(0)1663; CI-NEXT: v_mov_b32_e32 v1, s31664; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21665; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81666; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1667; CI-NEXT: flat_load_dword v3, v[0:1]1668; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v21669; CI-NEXT: s_lshl_b32 s0, s4, 41670; CI-NEXT: v_mov_b32_e32 v1, s11671; CI-NEXT: s_lshl_b32 s0, 0xffff, s01672; CI-NEXT: v_mov_b32_e32 v2, 0x3e703e71673; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1674; CI-NEXT: s_waitcnt vmcnt(0)1675; CI-NEXT: v_bfi_b32 v2, s0, v2, v31676; CI-NEXT: flat_store_dword v[0:1], v21677; CI-NEXT: s_endpgm1678;1679; GFX11-LABEL: v_insertelement_v2i16_dynamic_sgpr:1680; GFX11: ; %bb.0:1681; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x01682; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v01683; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x101684; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)1685; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v01686; GFX11-NEXT: s_waitcnt lgkmcnt(0)1687; GFX11-NEXT: global_load_b32 v1, v0, s[2:3]1688; GFX11-NEXT: s_lshl_b32 s2, s4, 41689; GFX11-NEXT: s_lshl_b32 s2, 0xffff, s21690; GFX11-NEXT: s_waitcnt vmcnt(0)1691; GFX11-NEXT: v_bfi_b32 v1, s2, 0x3e703e7, v11692; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1693; GFX11-NEXT: s_endpgm1694 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11695 %tid.ext = sext i32 %tid to i641696 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext1697 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext1698 %vec = load <2 x i16>, ptr addrspace(1) %in.gep1699 %vecins = insertelement <2 x i16> %vec, i16 999, i32 %idx1700 store <2 x i16> %vecins, ptr addrspace(1) %out.gep1701 ret void1702}1703 1704define amdgpu_kernel void @v_insertelement_v2f16_dynamic_vgpr(ptr addrspace(1) %out, ptr addrspace(1) %in, ptr addrspace(1) %idx.ptr) #0 {1705; GFX9-LABEL: v_insertelement_v2f16_dynamic_vgpr:1706; GFX9: ; %bb.0:1707; GFX9-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x101708; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01709; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01710; GFX9-NEXT: s_waitcnt lgkmcnt(0)1711; GFX9-NEXT: global_load_dword v1, v0, s[4:5]1712; GFX9-NEXT: global_load_dword v2, v0, s[2:3]1713; GFX9-NEXT: s_mov_b32 s2, 0xffff1714; GFX9-NEXT: s_waitcnt vmcnt(1)1715; GFX9-NEXT: v_lshlrev_b32_e32 v1, 4, v11716; GFX9-NEXT: v_lshlrev_b32_e64 v1, v1, s21717; GFX9-NEXT: s_mov_b32 s2, 0x123412341718; GFX9-NEXT: s_waitcnt vmcnt(0)1719; GFX9-NEXT: v_bfi_b32 v1, v1, s2, v21720; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1721; GFX9-NEXT: s_endpgm1722;1723; VI-LABEL: v_insertelement_v2f16_dynamic_vgpr:1724; VI: ; %bb.0:1725; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01726; VI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x101727; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v01728; VI-NEXT: s_add_i32 s12, s12, s171729; VI-NEXT: s_mov_b32 flat_scratch_lo, s131730; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81731; VI-NEXT: s_waitcnt lgkmcnt(0)1732; VI-NEXT: v_mov_b32_e32 v1, s51733; VI-NEXT: v_add_u32_e32 v0, vcc, s4, v21734; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1735; VI-NEXT: v_mov_b32_e32 v3, s31736; VI-NEXT: flat_load_dword v4, v[0:1]1737; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21738; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v3, vcc1739; VI-NEXT: flat_load_dword v3, v[0:1]1740; VI-NEXT: s_mov_b32 s2, 0xffff1741; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v21742; VI-NEXT: v_mov_b32_e32 v1, s11743; VI-NEXT: s_mov_b32 s0, 0x123412341744; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1745; VI-NEXT: s_waitcnt vmcnt(1)1746; VI-NEXT: v_lshlrev_b32_e32 v2, 4, v41747; VI-NEXT: v_lshlrev_b32_e64 v2, v2, s21748; VI-NEXT: s_waitcnt vmcnt(0)1749; VI-NEXT: v_bfi_b32 v2, v2, s0, v31750; VI-NEXT: flat_store_dword v[0:1], v21751; VI-NEXT: s_endpgm1752;1753; CI-LABEL: v_insertelement_v2f16_dynamic_vgpr:1754; CI: ; %bb.0:1755; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01756; CI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x41757; CI-NEXT: v_lshlrev_b32_e32 v2, 2, v01758; CI-NEXT: s_add_i32 s12, s12, s171759; CI-NEXT: s_mov_b32 flat_scratch_lo, s131760; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81761; CI-NEXT: s_waitcnt lgkmcnt(0)1762; CI-NEXT: v_mov_b32_e32 v1, s51763; CI-NEXT: v_add_i32_e32 v0, vcc, s4, v21764; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1765; CI-NEXT: v_mov_b32_e32 v3, s31766; CI-NEXT: flat_load_dword v4, v[0:1]1767; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21768; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v3, vcc1769; CI-NEXT: flat_load_dword v3, v[0:1]1770; CI-NEXT: v_add_i32_e32 v0, vcc, s0, v21771; CI-NEXT: v_mov_b32_e32 v1, s11772; CI-NEXT: s_mov_b32 s0, 0x123412341773; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1774; CI-NEXT: s_waitcnt vmcnt(1)1775; CI-NEXT: v_lshlrev_b32_e32 v2, 4, v41776; CI-NEXT: v_lshl_b32_e32 v2, 0xffff, v21777; CI-NEXT: s_waitcnt vmcnt(0)1778; CI-NEXT: v_bfi_b32 v2, v2, s0, v31779; CI-NEXT: flat_store_dword v[0:1], v21780; CI-NEXT: s_endpgm1781;1782; GFX11-LABEL: v_insertelement_v2f16_dynamic_vgpr:1783; GFX11: ; %bb.0:1784; GFX11-NEXT: s_clause 0x11785; GFX11-NEXT: s_load_b64 s[6:7], s[4:5], 0x101786; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x01787; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v01788; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1789; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v01790; GFX11-NEXT: s_waitcnt lgkmcnt(0)1791; GFX11-NEXT: s_clause 0x11792; GFX11-NEXT: global_load_b32 v1, v0, s[6:7]1793; GFX11-NEXT: global_load_b32 v2, v0, s[2:3]1794; GFX11-NEXT: s_waitcnt vmcnt(1)1795; GFX11-NEXT: v_lshlrev_b32_e32 v1, 4, v11796; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)1797; GFX11-NEXT: v_lshlrev_b32_e64 v1, v1, 0xffff1798; GFX11-NEXT: s_waitcnt vmcnt(0)1799; GFX11-NEXT: v_bfi_b32 v1, v1, 0x12341234, v21800; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]1801; GFX11-NEXT: s_endpgm1802 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11803 %tid.ext = sext i32 %tid to i641804 %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext1805 %idx.gep = getelementptr inbounds i32, ptr addrspace(1) %idx.ptr, i64 %tid.ext1806 %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext1807 %idx = load i32, ptr addrspace(1) %idx.gep1808 %vec = load <2 x half>, ptr addrspace(1) %in.gep1809 %vecins = insertelement <2 x half> %vec, half 0xH1234, i32 %idx1810 store <2 x half> %vecins, ptr addrspace(1) %out.gep1811 ret void1812}1813 1814define amdgpu_kernel void @v_insertelement_v4f16_0(ptr addrspace(1) %out, ptr addrspace(1) %in, [8 x i32], i32 %val) #0 {1815; GFX9-LABEL: v_insertelement_v4f16_0:1816; GFX9: ; %bb.0:1817; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01818; GFX9-NEXT: s_load_dword s4, s[8:9], 0x301819; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v01820; GFX9-NEXT: s_waitcnt lgkmcnt(0)1821; GFX9-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]1822; GFX9-NEXT: s_mov_b32 s2, 0xffff1823; GFX9-NEXT: v_mov_b32_e32 v3, s41824; GFX9-NEXT: s_waitcnt vmcnt(0)1825; GFX9-NEXT: v_bfi_b32 v0, s2, v3, v01826; GFX9-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1827; GFX9-NEXT: s_endpgm1828;1829; VI-LABEL: v_insertelement_v4f16_0:1830; VI: ; %bb.0:1831; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01832; VI-NEXT: s_load_dword s4, s[8:9], 0x301833; VI-NEXT: v_lshlrev_b32_e32 v2, 3, v01834; VI-NEXT: s_add_i32 s12, s12, s171835; VI-NEXT: s_mov_b32 flat_scratch_lo, s131836; VI-NEXT: s_waitcnt lgkmcnt(0)1837; VI-NEXT: v_mov_b32_e32 v1, s31838; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21839; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81840; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1841; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]1842; VI-NEXT: v_mov_b32_e32 v3, s11843; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v21844; VI-NEXT: v_mov_b32_e32 v4, 0x30205041845; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc1846; VI-NEXT: s_waitcnt vmcnt(0)1847; VI-NEXT: v_perm_b32 v0, s4, v0, v41848; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1849; VI-NEXT: s_endpgm1850;1851; CI-LABEL: v_insertelement_v4f16_0:1852; CI: ; %bb.0:1853; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01854; CI-NEXT: s_load_dword s4, s[8:9], 0xc1855; CI-NEXT: v_lshlrev_b32_e32 v2, 3, v01856; CI-NEXT: s_add_i32 s12, s12, s171857; CI-NEXT: s_mov_b32 flat_scratch_lo, s131858; CI-NEXT: s_waitcnt lgkmcnt(0)1859; CI-NEXT: v_mov_b32_e32 v1, s31860; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21861; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81862; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1863; CI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]1864; CI-NEXT: v_mov_b32_e32 v3, s11865; CI-NEXT: v_add_i32_e32 v2, vcc, s0, v21866; CI-NEXT: s_mov_b32 s0, 0xffff1867; CI-NEXT: v_mov_b32_e32 v4, s41868; CI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc1869; CI-NEXT: s_waitcnt vmcnt(0)1870; CI-NEXT: v_bfi_b32 v0, s0, v4, v01871; CI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1872; CI-NEXT: s_endpgm1873;1874; GFX11-TRUE16-LABEL: v_insertelement_v4f16_0:1875; GFX11-TRUE16: ; %bb.0:1876; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01877; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01878; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x301879; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1880; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v2, 3, v01881; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1882; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]1883; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1884; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, s41885; GFX11-TRUE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]1886; GFX11-TRUE16-NEXT: s_endpgm1887;1888; GFX11-FAKE16-LABEL: v_insertelement_v4f16_0:1889; GFX11-FAKE16: ; %bb.0:1890; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01891; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01892; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x301893; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1894; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v2, 3, v01895; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1896; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]1897; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1898; GFX11-FAKE16-NEXT: v_bfi_b32 v0, 0xffff, s4, v01899; GFX11-FAKE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]1900; GFX11-FAKE16-NEXT: s_endpgm1901 %tid = call i32 @llvm.amdgcn.workitem.id.x() #11902 %tid.ext = sext i32 %tid to i641903 %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext1904 %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext1905 %vec = load <4 x half>, ptr addrspace(1) %in.gep1906 %val.trunc = trunc i32 %val to i161907 %val.cvt = bitcast i16 %val.trunc to half1908 %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 01909 store <4 x half> %vecins, ptr addrspace(1) %out.gep1910 ret void1911}1912 1913define amdgpu_kernel void @v_insertelement_v4f16_1(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) #0 {1914; GFX9-LABEL: v_insertelement_v4f16_1:1915; GFX9: ; %bb.0:1916; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01917; GFX9-NEXT: s_load_dword s4, s[8:9], 0x101918; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v01919; GFX9-NEXT: v_mov_b32_e32 v3, 0x50401001920; GFX9-NEXT: s_waitcnt lgkmcnt(0)1921; GFX9-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]1922; GFX9-NEXT: s_waitcnt vmcnt(0)1923; GFX9-NEXT: v_perm_b32 v0, s4, v0, v31924; GFX9-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1925; GFX9-NEXT: s_endpgm1926;1927; VI-LABEL: v_insertelement_v4f16_1:1928; VI: ; %bb.0:1929; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01930; VI-NEXT: s_load_dword s4, s[8:9], 0x101931; VI-NEXT: v_lshlrev_b32_e32 v2, 3, v01932; VI-NEXT: s_add_i32 s12, s12, s171933; VI-NEXT: s_mov_b32 flat_scratch_lo, s131934; VI-NEXT: s_waitcnt lgkmcnt(0)1935; VI-NEXT: v_mov_b32_e32 v1, s31936; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v21937; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81938; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1939; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]1940; VI-NEXT: v_mov_b32_e32 v3, s11941; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v21942; VI-NEXT: v_mov_b32_e32 v4, 0x10005041943; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc1944; VI-NEXT: s_waitcnt vmcnt(0)1945; VI-NEXT: v_perm_b32 v0, v0, s4, v41946; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1947; VI-NEXT: s_endpgm1948;1949; CI-LABEL: v_insertelement_v4f16_1:1950; CI: ; %bb.0:1951; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x01952; CI-NEXT: s_load_dword s4, s[8:9], 0x41953; CI-NEXT: v_lshlrev_b32_e32 v2, 3, v01954; CI-NEXT: s_add_i32 s12, s12, s171955; CI-NEXT: s_mov_b32 flat_scratch_lo, s131956; CI-NEXT: s_waitcnt lgkmcnt(0)1957; CI-NEXT: v_mov_b32_e32 v1, s31958; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v21959; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81960; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1961; CI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]1962; CI-NEXT: v_mov_b32_e32 v3, s11963; CI-NEXT: v_add_i32_e32 v2, vcc, s0, v21964; CI-NEXT: s_lshl_b32 s0, s4, 161965; CI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc1966; CI-NEXT: s_waitcnt vmcnt(0)1967; CI-NEXT: v_and_b32_e32 v0, 0xffff, v01968; CI-NEXT: v_or_b32_e32 v0, s0, v01969; CI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1970; CI-NEXT: s_endpgm1971;1972; GFX11-TRUE16-LABEL: v_insertelement_v4f16_1:1973; GFX11-TRUE16: ; %bb.0:1974; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01975; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01976; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x101977; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1978; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v2, 3, v01979; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1980; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]1981; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1982; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, s41983; GFX11-TRUE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]1984; GFX11-TRUE16-NEXT: s_endpgm1985;1986; GFX11-FAKE16-LABEL: v_insertelement_v4f16_1:1987; GFX11-FAKE16: ; %bb.0:1988; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x01989; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01990; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x101991; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1992; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v2, 3, v01993; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1994; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]1995; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1996; GFX11-FAKE16-NEXT: v_perm_b32 v0, s4, v0, 0x50401001997; GFX11-FAKE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]1998; GFX11-FAKE16-NEXT: s_endpgm1999 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12000 %tid.ext = sext i32 %tid to i642001 %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext2002 %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext2003 %vec = load <4 x half>, ptr addrspace(1) %in.gep2004 %val.trunc = trunc i32 %val to i162005 %val.cvt = bitcast i16 %val.trunc to half2006 %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 12007 store <4 x half> %vecins, ptr addrspace(1) %out.gep2008 ret void2009}2010 2011define amdgpu_kernel void @v_insertelement_v4f16_2(ptr addrspace(1) %out, ptr addrspace(1) %in, [8 x i32], i32 %val) #0 {2012; GFX9-LABEL: v_insertelement_v4f16_2:2013; GFX9: ; %bb.0:2014; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02015; GFX9-NEXT: s_load_dword s4, s[8:9], 0x302016; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v02017; GFX9-NEXT: s_waitcnt lgkmcnt(0)2018; GFX9-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]2019; GFX9-NEXT: s_mov_b32 s2, 0xffff2020; GFX9-NEXT: v_mov_b32_e32 v3, s42021; GFX9-NEXT: s_waitcnt vmcnt(0)2022; GFX9-NEXT: v_bfi_b32 v1, s2, v3, v12023; GFX9-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2024; GFX9-NEXT: s_endpgm2025;2026; VI-LABEL: v_insertelement_v4f16_2:2027; VI: ; %bb.0:2028; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02029; VI-NEXT: s_load_dword s4, s[8:9], 0x302030; VI-NEXT: v_lshlrev_b32_e32 v2, 3, v02031; VI-NEXT: s_add_i32 s12, s12, s172032; VI-NEXT: s_mov_b32 flat_scratch_lo, s132033; VI-NEXT: s_waitcnt lgkmcnt(0)2034; VI-NEXT: v_mov_b32_e32 v1, s32035; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v22036; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82037; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2038; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2039; VI-NEXT: v_mov_b32_e32 v3, s12040; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v22041; VI-NEXT: v_mov_b32_e32 v4, 0x30205042042; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2043; VI-NEXT: s_waitcnt vmcnt(0)2044; VI-NEXT: v_perm_b32 v1, s4, v1, v42045; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2046; VI-NEXT: s_endpgm2047;2048; CI-LABEL: v_insertelement_v4f16_2:2049; CI: ; %bb.0:2050; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02051; CI-NEXT: s_load_dword s4, s[8:9], 0xc2052; CI-NEXT: v_lshlrev_b32_e32 v2, 3, v02053; CI-NEXT: s_add_i32 s12, s12, s172054; CI-NEXT: s_mov_b32 flat_scratch_lo, s132055; CI-NEXT: s_waitcnt lgkmcnt(0)2056; CI-NEXT: v_mov_b32_e32 v1, s32057; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v22058; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82059; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2060; CI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2061; CI-NEXT: v_mov_b32_e32 v3, s12062; CI-NEXT: v_add_i32_e32 v2, vcc, s0, v22063; CI-NEXT: s_mov_b32 s0, 0xffff2064; CI-NEXT: v_mov_b32_e32 v4, s42065; CI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2066; CI-NEXT: s_waitcnt vmcnt(0)2067; CI-NEXT: v_bfi_b32 v1, s0, v4, v12068; CI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2069; CI-NEXT: s_endpgm2070;2071; GFX11-TRUE16-LABEL: v_insertelement_v4f16_2:2072; GFX11-TRUE16: ; %bb.0:2073; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02074; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02075; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x302076; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2077; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v2, 3, v02078; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)2079; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]2080; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2081; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, s42082; GFX11-TRUE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]2083; GFX11-TRUE16-NEXT: s_endpgm2084;2085; GFX11-FAKE16-LABEL: v_insertelement_v4f16_2:2086; GFX11-FAKE16: ; %bb.0:2087; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02088; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02089; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x302090; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2091; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v2, 3, v02092; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)2093; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]2094; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2095; GFX11-FAKE16-NEXT: v_bfi_b32 v1, 0xffff, s4, v12096; GFX11-FAKE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]2097; GFX11-FAKE16-NEXT: s_endpgm2098 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12099 %tid.ext = sext i32 %tid to i642100 %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext2101 %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext2102 %vec = load <4 x half>, ptr addrspace(1) %in.gep2103 %val.trunc = trunc i32 %val to i162104 %val.cvt = bitcast i16 %val.trunc to half2105 %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 22106 store <4 x half> %vecins, ptr addrspace(1) %out.gep2107 ret void2108}2109 2110define amdgpu_kernel void @v_insertelement_v4f16_3(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) #0 {2111; GFX9-LABEL: v_insertelement_v4f16_3:2112; GFX9: ; %bb.0:2113; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02114; GFX9-NEXT: s_load_dword s4, s[8:9], 0x102115; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v02116; GFX9-NEXT: v_mov_b32_e32 v3, 0x50401002117; GFX9-NEXT: s_waitcnt lgkmcnt(0)2118; GFX9-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]2119; GFX9-NEXT: s_waitcnt vmcnt(0)2120; GFX9-NEXT: v_perm_b32 v1, s4, v1, v32121; GFX9-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2122; GFX9-NEXT: s_endpgm2123;2124; VI-LABEL: v_insertelement_v4f16_3:2125; VI: ; %bb.0:2126; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02127; VI-NEXT: s_load_dword s4, s[8:9], 0x102128; VI-NEXT: v_lshlrev_b32_e32 v2, 3, v02129; VI-NEXT: s_add_i32 s12, s12, s172130; VI-NEXT: s_mov_b32 flat_scratch_lo, s132131; VI-NEXT: s_waitcnt lgkmcnt(0)2132; VI-NEXT: v_mov_b32_e32 v1, s32133; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v22134; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82135; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2136; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2137; VI-NEXT: v_mov_b32_e32 v3, s12138; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v22139; VI-NEXT: v_mov_b32_e32 v4, 0x10005042140; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2141; VI-NEXT: s_waitcnt vmcnt(0)2142; VI-NEXT: v_perm_b32 v1, v1, s4, v42143; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2144; VI-NEXT: s_endpgm2145;2146; CI-LABEL: v_insertelement_v4f16_3:2147; CI: ; %bb.0:2148; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02149; CI-NEXT: s_load_dword s4, s[8:9], 0x42150; CI-NEXT: v_lshlrev_b32_e32 v2, 3, v02151; CI-NEXT: s_add_i32 s12, s12, s172152; CI-NEXT: s_mov_b32 flat_scratch_lo, s132153; CI-NEXT: s_waitcnt lgkmcnt(0)2154; CI-NEXT: v_mov_b32_e32 v1, s32155; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v22156; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82157; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2158; CI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2159; CI-NEXT: v_mov_b32_e32 v3, s12160; CI-NEXT: v_add_i32_e32 v2, vcc, s0, v22161; CI-NEXT: s_lshl_b32 s0, s4, 162162; CI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2163; CI-NEXT: s_waitcnt vmcnt(0)2164; CI-NEXT: v_and_b32_e32 v1, 0xffff, v12165; CI-NEXT: v_or_b32_e32 v1, s0, v12166; CI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2167; CI-NEXT: s_endpgm2168;2169; GFX11-TRUE16-LABEL: v_insertelement_v4f16_3:2170; GFX11-TRUE16: ; %bb.0:2171; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02172; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02173; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x102174; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2175; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v2, 3, v02176; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)2177; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]2178; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2179; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, s42180; GFX11-TRUE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]2181; GFX11-TRUE16-NEXT: s_endpgm2182;2183; GFX11-FAKE16-LABEL: v_insertelement_v4f16_3:2184; GFX11-FAKE16: ; %bb.0:2185; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02186; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02187; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x102188; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2189; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v2, 3, v02190; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)2191; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]2192; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2193; GFX11-FAKE16-NEXT: v_perm_b32 v1, s4, v1, 0x50401002194; GFX11-FAKE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]2195; GFX11-FAKE16-NEXT: s_endpgm2196 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12197 %tid.ext = sext i32 %tid to i642198 %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext2199 %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext2200 %vec = load <4 x half>, ptr addrspace(1) %in.gep2201 %val.trunc = trunc i32 %val to i162202 %val.cvt = bitcast i16 %val.trunc to half2203 %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 32204 store <4 x half> %vecins, ptr addrspace(1) %out.gep2205 ret void2206}2207 2208define amdgpu_kernel void @v_insertelement_v4i16_2(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) #0 {2209; GFX9-LABEL: v_insertelement_v4i16_2:2210; GFX9: ; %bb.0:2211; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02212; GFX9-NEXT: s_load_dword s4, s[8:9], 0x102213; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v02214; GFX9-NEXT: s_waitcnt lgkmcnt(0)2215; GFX9-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]2216; GFX9-NEXT: s_mov_b32 s2, 0xffff2217; GFX9-NEXT: v_mov_b32_e32 v3, s42218; GFX9-NEXT: s_waitcnt vmcnt(0)2219; GFX9-NEXT: v_bfi_b32 v1, s2, v3, v12220; GFX9-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2221; GFX9-NEXT: s_endpgm2222;2223; VI-LABEL: v_insertelement_v4i16_2:2224; VI: ; %bb.0:2225; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02226; VI-NEXT: s_load_dword s4, s[8:9], 0x102227; VI-NEXT: v_lshlrev_b32_e32 v2, 3, v02228; VI-NEXT: s_add_i32 s12, s12, s172229; VI-NEXT: s_mov_b32 flat_scratch_lo, s132230; VI-NEXT: s_waitcnt lgkmcnt(0)2231; VI-NEXT: v_mov_b32_e32 v1, s32232; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v22233; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82234; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2235; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2236; VI-NEXT: v_mov_b32_e32 v3, s12237; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v22238; VI-NEXT: v_mov_b32_e32 v4, 0x30205042239; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2240; VI-NEXT: s_waitcnt vmcnt(0)2241; VI-NEXT: v_perm_b32 v1, s4, v1, v42242; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2243; VI-NEXT: s_endpgm2244;2245; CI-LABEL: v_insertelement_v4i16_2:2246; CI: ; %bb.0:2247; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02248; CI-NEXT: s_load_dword s4, s[8:9], 0x42249; CI-NEXT: v_lshlrev_b32_e32 v2, 3, v02250; CI-NEXT: s_add_i32 s12, s12, s172251; CI-NEXT: s_mov_b32 flat_scratch_lo, s132252; CI-NEXT: s_waitcnt lgkmcnt(0)2253; CI-NEXT: v_mov_b32_e32 v1, s32254; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v22255; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82256; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2257; CI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2258; CI-NEXT: v_mov_b32_e32 v3, s12259; CI-NEXT: v_add_i32_e32 v2, vcc, s0, v22260; CI-NEXT: s_mov_b32 s0, 0xffff2261; CI-NEXT: v_mov_b32_e32 v4, s42262; CI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2263; CI-NEXT: s_waitcnt vmcnt(0)2264; CI-NEXT: v_bfi_b32 v1, s0, v4, v12265; CI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2266; CI-NEXT: s_endpgm2267;2268; GFX11-TRUE16-LABEL: v_insertelement_v4i16_2:2269; GFX11-TRUE16: ; %bb.0:2270; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02271; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02272; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x102273; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2274; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v2, 3, v02275; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)2276; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]2277; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2278; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, s42279; GFX11-TRUE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]2280; GFX11-TRUE16-NEXT: s_endpgm2281;2282; GFX11-FAKE16-LABEL: v_insertelement_v4i16_2:2283; GFX11-FAKE16: ; %bb.0:2284; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02285; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02286; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x102287; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2288; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v2, 3, v02289; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)2290; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v2, s[2:3]2291; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2292; GFX11-FAKE16-NEXT: v_bfi_b32 v1, 0xffff, s4, v12293; GFX11-FAKE16-NEXT: global_store_b64 v2, v[0:1], s[0:1]2294; GFX11-FAKE16-NEXT: s_endpgm2295 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12296 %tid.ext = sext i32 %tid to i642297 %in.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %in, i64 %tid.ext2298 %out.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %out, i64 %tid.ext2299 %vec = load <4 x i16>, ptr addrspace(1) %in.gep2300 %val.trunc = trunc i32 %val to i162301 %val.cvt = bitcast i16 %val.trunc to i162302 %vecins = insertelement <4 x i16> %vec, i16 %val.cvt, i32 22303 store <4 x i16> %vecins, ptr addrspace(1) %out.gep2304 ret void2305}2306 2307; FIXME: Better code on CI?2308define amdgpu_kernel void @v_insertelement_v4i16_dynamic_vgpr(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) #0 {2309; GFX9-LABEL: v_insertelement_v4i16_dynamic_vgpr:2310; GFX9: ; %bb.0:2311; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02312; GFX9-NEXT: s_load_dword s4, s[8:9], 0x102313; GFX9-NEXT: global_load_dword v2, v[0:1], off glc2314; GFX9-NEXT: s_waitcnt vmcnt(0)2315; GFX9-NEXT: v_lshlrev_b32_e32 v4, 3, v02316; GFX9-NEXT: s_waitcnt lgkmcnt(0)2317; GFX9-NEXT: global_load_dwordx2 v[0:1], v4, s[2:3]2318; GFX9-NEXT: s_mov_b64 s[2:3], 0xffff2319; GFX9-NEXT: v_lshlrev_b32_e32 v2, 4, v22320; GFX9-NEXT: v_lshlrev_b64 v[2:3], v2, s[2:3]2321; GFX9-NEXT: s_pack_ll_b32_b16 s2, s4, s42322; GFX9-NEXT: s_waitcnt vmcnt(0)2323; GFX9-NEXT: v_bfi_b32 v1, v3, s2, v12324; GFX9-NEXT: v_bfi_b32 v0, v2, s2, v02325; GFX9-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2326; GFX9-NEXT: s_endpgm2327;2328; VI-LABEL: v_insertelement_v4i16_dynamic_vgpr:2329; VI: ; %bb.0:2330; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02331; VI-NEXT: s_load_dword s4, s[8:9], 0x102332; VI-NEXT: s_add_i32 s12, s12, s172333; VI-NEXT: s_mov_b32 flat_scratch_lo, s132334; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82335; VI-NEXT: flat_load_dword v4, v[0:1] glc2336; VI-NEXT: s_waitcnt vmcnt(0)2337; VI-NEXT: v_lshlrev_b32_e32 v2, 3, v02338; VI-NEXT: s_waitcnt lgkmcnt(0)2339; VI-NEXT: v_mov_b32_e32 v1, s32340; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v22341; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2342; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2343; VI-NEXT: s_mov_b64 s[2:3], 0xffff2344; VI-NEXT: v_mov_b32_e32 v3, s12345; VI-NEXT: s_lshl_b32 s1, s4, 162346; VI-NEXT: s_and_b32 s4, s4, 0xffff2347; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v22348; VI-NEXT: s_or_b32 s0, s4, s12349; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2350; VI-NEXT: v_lshlrev_b32_e32 v4, 4, v42351; VI-NEXT: v_lshlrev_b64 v[4:5], v4, s[2:3]2352; VI-NEXT: s_waitcnt vmcnt(0)2353; VI-NEXT: v_bfi_b32 v1, v5, s0, v12354; VI-NEXT: v_bfi_b32 v0, v4, s0, v02355; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2356; VI-NEXT: s_endpgm2357;2358; CI-LABEL: v_insertelement_v4i16_dynamic_vgpr:2359; CI: ; %bb.0:2360; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02361; CI-NEXT: s_load_dword s4, s[8:9], 0x42362; CI-NEXT: s_add_i32 s12, s12, s172363; CI-NEXT: s_mov_b32 flat_scratch_lo, s132364; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82365; CI-NEXT: flat_load_dword v4, v[0:1] glc2366; CI-NEXT: s_waitcnt vmcnt(0)2367; CI-NEXT: v_lshlrev_b32_e32 v2, 3, v02368; CI-NEXT: s_waitcnt lgkmcnt(0)2369; CI-NEXT: v_mov_b32_e32 v1, s32370; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v22371; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2372; CI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2373; CI-NEXT: s_mov_b64 s[2:3], 0xffff2374; CI-NEXT: v_mov_b32_e32 v3, s12375; CI-NEXT: s_lshl_b32 s1, s4, 162376; CI-NEXT: s_and_b32 s4, s4, 0xffff2377; CI-NEXT: v_add_i32_e32 v2, vcc, s0, v22378; CI-NEXT: s_or_b32 s0, s4, s12379; CI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2380; CI-NEXT: v_lshlrev_b32_e32 v4, 4, v42381; CI-NEXT: v_lshl_b64 v[4:5], s[2:3], v42382; CI-NEXT: s_waitcnt vmcnt(0)2383; CI-NEXT: v_bfi_b32 v1, v5, s0, v12384; CI-NEXT: v_bfi_b32 v0, v4, s0, v02385; CI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2386; CI-NEXT: s_endpgm2387;2388; GFX11-LABEL: v_insertelement_v4i16_dynamic_vgpr:2389; GFX11: ; %bb.0:2390; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x02391; GFX11-NEXT: global_load_b32 v2, v[0:1], off glc dlc2392; GFX11-NEXT: s_waitcnt vmcnt(0)2393; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v02394; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x102395; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)2396; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v02397; GFX11-NEXT: s_waitcnt lgkmcnt(0)2398; GFX11-NEXT: global_load_b64 v[0:1], v4, s[2:3]2399; GFX11-NEXT: s_pack_ll_b32_b16 s2, s4, s42400; GFX11-NEXT: v_lshlrev_b32_e32 v2, 4, v22401; GFX11-NEXT: v_lshlrev_b64 v[2:3], v2, 0xffff2402; GFX11-NEXT: s_waitcnt vmcnt(0)2403; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2404; GFX11-NEXT: v_bfi_b32 v1, v3, s2, v12405; GFX11-NEXT: v_bfi_b32 v0, v2, s2, v02406; GFX11-NEXT: global_store_b64 v4, v[0:1], s[0:1]2407; GFX11-NEXT: s_endpgm2408 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12409 %tid.ext = sext i32 %tid to i642410 %in.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %in, i64 %tid.ext2411 %out.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %out, i64 %tid.ext2412 %idx.val = load volatile i32, ptr addrspace(1) poison2413 %vec = load <4 x i16>, ptr addrspace(1) %in.gep2414 %val.trunc = trunc i32 %val to i162415 %val.cvt = bitcast i16 %val.trunc to i162416 %vecins = insertelement <4 x i16> %vec, i16 %val.cvt, i32 %idx.val2417 store <4 x i16> %vecins, ptr addrspace(1) %out.gep2418 ret void2419}2420 2421define amdgpu_kernel void @v_insertelement_v4f16_dynamic_sgpr(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val, i32 %idxval) #0 {2422; GFX9-LABEL: v_insertelement_v4f16_dynamic_sgpr:2423; GFX9: ; %bb.0:2424; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02425; GFX9-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x102426; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v02427; GFX9-NEXT: s_waitcnt lgkmcnt(0)2428; GFX9-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]2429; GFX9-NEXT: s_lshl_b32 s2, s5, 42430; GFX9-NEXT: s_pack_ll_b32_b16 s4, s4, s42431; GFX9-NEXT: s_lshl_b64 s[2:3], 0xffff, s22432; GFX9-NEXT: v_mov_b32_e32 v3, s42433; GFX9-NEXT: v_mov_b32_e32 v4, s42434; GFX9-NEXT: s_waitcnt vmcnt(0)2435; GFX9-NEXT: v_bfi_b32 v1, s3, v3, v12436; GFX9-NEXT: v_bfi_b32 v0, s2, v4, v02437; GFX9-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2438; GFX9-NEXT: s_endpgm2439;2440; VI-LABEL: v_insertelement_v4f16_dynamic_sgpr:2441; VI: ; %bb.0:2442; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02443; VI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x102444; VI-NEXT: v_lshlrev_b32_e32 v2, 3, v02445; VI-NEXT: s_add_i32 s12, s12, s172446; VI-NEXT: s_mov_b32 flat_scratch_lo, s132447; VI-NEXT: s_waitcnt lgkmcnt(0)2448; VI-NEXT: v_mov_b32_e32 v1, s32449; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v22450; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82451; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2452; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2453; VI-NEXT: v_mov_b32_e32 v3, s12454; VI-NEXT: s_lshl_b32 s1, s4, 162455; VI-NEXT: s_and_b32 s2, s4, 0xffff2456; VI-NEXT: s_lshl_b32 s3, s5, 42457; VI-NEXT: s_or_b32 s2, s2, s12458; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v22459; VI-NEXT: s_lshl_b64 s[0:1], 0xffff, s32460; VI-NEXT: v_mov_b32_e32 v4, s22461; VI-NEXT: v_mov_b32_e32 v5, s22462; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2463; VI-NEXT: s_waitcnt vmcnt(0)2464; VI-NEXT: v_bfi_b32 v1, s1, v4, v12465; VI-NEXT: v_bfi_b32 v0, s0, v5, v02466; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2467; VI-NEXT: s_endpgm2468;2469; CI-LABEL: v_insertelement_v4f16_dynamic_sgpr:2470; CI: ; %bb.0:2471; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02472; CI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x42473; CI-NEXT: v_lshlrev_b32_e32 v2, 3, v02474; CI-NEXT: s_add_i32 s12, s12, s172475; CI-NEXT: s_mov_b32 flat_scratch_lo, s132476; CI-NEXT: s_waitcnt lgkmcnt(0)2477; CI-NEXT: v_mov_b32_e32 v1, s32478; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v22479; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82480; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2481; CI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2482; CI-NEXT: v_mov_b32_e32 v3, s12483; CI-NEXT: s_and_b32 s1, s4, 0xffff2484; CI-NEXT: s_lshl_b32 s2, s4, 162485; CI-NEXT: s_lshl_b32 s3, s5, 42486; CI-NEXT: s_or_b32 s2, s1, s22487; CI-NEXT: v_add_i32_e32 v2, vcc, s0, v22488; CI-NEXT: s_lshl_b64 s[0:1], 0xffff, s32489; CI-NEXT: v_mov_b32_e32 v4, s22490; CI-NEXT: v_mov_b32_e32 v5, s22491; CI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc2492; CI-NEXT: s_waitcnt vmcnt(0)2493; CI-NEXT: v_bfi_b32 v1, s1, v4, v12494; CI-NEXT: v_bfi_b32 v0, s0, v5, v02495; CI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2496; CI-NEXT: s_endpgm2497;2498; GFX11-LABEL: v_insertelement_v4f16_dynamic_sgpr:2499; GFX11: ; %bb.0:2500; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x02501; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v02502; GFX11-NEXT: s_load_b64 s[4:5], s[4:5], 0x102503; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2504; GFX11-NEXT: v_lshlrev_b32_e32 v2, 3, v02505; GFX11-NEXT: s_waitcnt lgkmcnt(0)2506; GFX11-NEXT: global_load_b64 v[0:1], v2, s[2:3]2507; GFX11-NEXT: s_lshl_b32 s2, s5, 42508; GFX11-NEXT: s_pack_ll_b32_b16 s4, s4, s42509; GFX11-NEXT: s_lshl_b64 s[2:3], 0xffff, s22510; GFX11-NEXT: s_waitcnt vmcnt(0)2511; GFX11-NEXT: v_bfi_b32 v1, s3, s4, v12512; GFX11-NEXT: v_bfi_b32 v0, s2, s4, v02513; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]2514; GFX11-NEXT: s_endpgm2515 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12516 %tid.ext = sext i32 %tid to i642517 %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext2518 %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext2519 %vec = load <4 x half>, ptr addrspace(1) %in.gep2520 %val.trunc = trunc i32 %val to i162521 %val.cvt = bitcast i16 %val.trunc to half2522 %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 %idxval2523 store <4 x half> %vecins, ptr addrspace(1) %out.gep2524 ret void2525}2526 2527define amdgpu_kernel void @v_insertelement_v8f16_3(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) {2528; GFX9-LABEL: v_insertelement_v8f16_3:2529; GFX9: ; %bb.0:2530; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02531; GFX9-NEXT: s_load_dword s4, s[8:9], 0x102532; GFX9-NEXT: v_lshlrev_b32_e32 v4, 4, v02533; GFX9-NEXT: v_mov_b32_e32 v5, 0x50401002534; GFX9-NEXT: s_waitcnt lgkmcnt(0)2535; GFX9-NEXT: global_load_dwordx4 v[0:3], v4, s[2:3]2536; GFX9-NEXT: s_waitcnt vmcnt(0)2537; GFX9-NEXT: v_perm_b32 v1, s4, v1, v52538; GFX9-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2539; GFX9-NEXT: s_endpgm2540;2541; VI-LABEL: v_insertelement_v8f16_3:2542; VI: ; %bb.0:2543; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02544; VI-NEXT: s_load_dword s4, s[8:9], 0x102545; VI-NEXT: v_lshlrev_b32_e32 v4, 4, v02546; VI-NEXT: s_add_i32 s12, s12, s172547; VI-NEXT: s_mov_b32 flat_scratch_lo, s132548; VI-NEXT: s_waitcnt lgkmcnt(0)2549; VI-NEXT: v_mov_b32_e32 v1, s32550; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v42551; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82552; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2553; VI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]2554; VI-NEXT: v_add_u32_e32 v4, vcc, s0, v42555; VI-NEXT: s_lshl_b32 s0, s4, 162556; VI-NEXT: v_mov_b32_e32 v5, s12557; VI-NEXT: v_mov_b32_e32 v6, s02558; VI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc2559; VI-NEXT: s_waitcnt vmcnt(0)2560; VI-NEXT: v_or_b32_sdwa v1, v1, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2561; VI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2562; VI-NEXT: s_endpgm2563;2564; CI-LABEL: v_insertelement_v8f16_3:2565; CI: ; %bb.0:2566; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02567; CI-NEXT: s_load_dword s4, s[8:9], 0x42568; CI-NEXT: v_lshlrev_b32_e32 v4, 4, v02569; CI-NEXT: s_add_i32 s12, s12, s172570; CI-NEXT: s_mov_b32 flat_scratch_lo, s132571; CI-NEXT: s_waitcnt lgkmcnt(0)2572; CI-NEXT: v_mov_b32_e32 v1, s32573; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v42574; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82575; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2576; CI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]2577; CI-NEXT: v_mov_b32_e32 v5, s12578; CI-NEXT: v_add_i32_e32 v4, vcc, s0, v42579; CI-NEXT: s_lshl_b32 s0, s4, 162580; CI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc2581; CI-NEXT: s_waitcnt vmcnt(0)2582; CI-NEXT: v_and_b32_e32 v1, 0xffff, v12583; CI-NEXT: v_or_b32_e32 v1, s0, v12584; CI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2585; CI-NEXT: s_endpgm2586;2587; GFX11-TRUE16-LABEL: v_insertelement_v8f16_3:2588; GFX11-TRUE16: ; %bb.0:2589; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02590; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02591; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x102592; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2593; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v4, 4, v02594; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)2595; GFX11-TRUE16-NEXT: global_load_b128 v[0:3], v4, s[2:3]2596; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2597; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, s42598; GFX11-TRUE16-NEXT: global_store_b128 v4, v[0:3], s[0:1]2599; GFX11-TRUE16-NEXT: s_endpgm2600;2601; GFX11-FAKE16-LABEL: v_insertelement_v8f16_3:2602; GFX11-FAKE16: ; %bb.0:2603; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02604; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02605; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x102606; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2607; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v4, 4, v02608; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)2609; GFX11-FAKE16-NEXT: global_load_b128 v[0:3], v4, s[2:3]2610; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2611; GFX11-FAKE16-NEXT: v_perm_b32 v1, s4, v1, 0x50401002612; GFX11-FAKE16-NEXT: global_store_b128 v4, v[0:3], s[0:1]2613; GFX11-FAKE16-NEXT: s_endpgm2614 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12615 %tid.ext = sext i32 %tid to i642616 %in.gep = getelementptr inbounds <8 x half>, ptr addrspace(1) %in, i64 %tid.ext2617 %out.gep = getelementptr inbounds <8 x half>, ptr addrspace(1) %out, i64 %tid.ext2618 %vec = load <8 x half>, ptr addrspace(1) %in.gep2619 %val.trunc = trunc i32 %val to i162620 %val.cvt = bitcast i16 %val.trunc to half2621 %vecins = insertelement <8 x half> %vec, half %val.cvt, i32 32622 store <8 x half> %vecins, ptr addrspace(1) %out.gep2623 ret void2624}2625 2626define amdgpu_kernel void @v_insertelement_v8i16_6(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) {2627; GFX9-LABEL: v_insertelement_v8i16_6:2628; GFX9: ; %bb.0:2629; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02630; GFX9-NEXT: s_load_dword s4, s[8:9], 0x102631; GFX9-NEXT: v_lshlrev_b32_e32 v4, 4, v02632; GFX9-NEXT: s_waitcnt lgkmcnt(0)2633; GFX9-NEXT: global_load_dwordx4 v[0:3], v4, s[2:3]2634; GFX9-NEXT: s_mov_b32 s2, 0xffff2635; GFX9-NEXT: v_mov_b32_e32 v5, s42636; GFX9-NEXT: s_waitcnt vmcnt(0)2637; GFX9-NEXT: v_bfi_b32 v3, s2, v5, v32638; GFX9-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2639; GFX9-NEXT: s_endpgm2640;2641; VI-LABEL: v_insertelement_v8i16_6:2642; VI: ; %bb.0:2643; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02644; VI-NEXT: s_load_dword s4, s[8:9], 0x102645; VI-NEXT: v_lshlrev_b32_e32 v4, 4, v02646; VI-NEXT: s_add_i32 s12, s12, s172647; VI-NEXT: s_mov_b32 flat_scratch_lo, s132648; VI-NEXT: s_waitcnt lgkmcnt(0)2649; VI-NEXT: v_mov_b32_e32 v1, s32650; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v42651; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82652; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2653; VI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]2654; VI-NEXT: v_mov_b32_e32 v5, s12655; VI-NEXT: v_add_u32_e32 v4, vcc, s0, v42656; VI-NEXT: s_mov_b32 s0, 0xffff2657; VI-NEXT: v_mov_b32_e32 v6, s42658; VI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc2659; VI-NEXT: s_waitcnt vmcnt(0)2660; VI-NEXT: v_bfi_b32 v3, s0, v6, v32661; VI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2662; VI-NEXT: s_endpgm2663;2664; CI-LABEL: v_insertelement_v8i16_6:2665; CI: ; %bb.0:2666; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02667; CI-NEXT: s_load_dword s4, s[8:9], 0x42668; CI-NEXT: v_lshlrev_b32_e32 v4, 4, v02669; CI-NEXT: s_add_i32 s12, s12, s172670; CI-NEXT: s_mov_b32 flat_scratch_lo, s132671; CI-NEXT: s_waitcnt lgkmcnt(0)2672; CI-NEXT: v_mov_b32_e32 v1, s32673; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v42674; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82675; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2676; CI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]2677; CI-NEXT: v_mov_b32_e32 v5, s12678; CI-NEXT: v_add_i32_e32 v4, vcc, s0, v42679; CI-NEXT: s_mov_b32 s0, 0xffff2680; CI-NEXT: v_mov_b32_e32 v6, s42681; CI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc2682; CI-NEXT: s_waitcnt vmcnt(0)2683; CI-NEXT: v_bfi_b32 v3, s0, v6, v32684; CI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2685; CI-NEXT: s_endpgm2686;2687; GFX11-TRUE16-LABEL: v_insertelement_v8i16_6:2688; GFX11-TRUE16: ; %bb.0:2689; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02690; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02691; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x102692; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2693; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v4, 4, v02694; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)2695; GFX11-TRUE16-NEXT: global_load_b128 v[0:3], v4, s[2:3]2696; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2697; GFX11-TRUE16-NEXT: v_mov_b16_e32 v3.l, s42698; GFX11-TRUE16-NEXT: global_store_b128 v4, v[0:3], s[0:1]2699; GFX11-TRUE16-NEXT: s_endpgm2700;2701; GFX11-FAKE16-LABEL: v_insertelement_v8i16_6:2702; GFX11-FAKE16: ; %bb.0:2703; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02704; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02705; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x102706; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2707; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v4, 4, v02708; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)2709; GFX11-FAKE16-NEXT: global_load_b128 v[0:3], v4, s[2:3]2710; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2711; GFX11-FAKE16-NEXT: v_bfi_b32 v3, 0xffff, s4, v32712; GFX11-FAKE16-NEXT: global_store_b128 v4, v[0:3], s[0:1]2713; GFX11-FAKE16-NEXT: s_endpgm2714 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12715 %tid.ext = sext i32 %tid to i642716 %in.gep = getelementptr inbounds <8 x i16>, ptr addrspace(1) %in, i64 %tid.ext2717 %out.gep = getelementptr inbounds <8 x i16>, ptr addrspace(1) %out, i64 %tid.ext2718 %vec = load <8 x i16>, ptr addrspace(1) %in.gep2719 %val.trunc = trunc i32 %val to i162720 %val.cvt = bitcast i16 %val.trunc to i162721 %vecins = insertelement <8 x i16> %vec, i16 %val.cvt, i32 62722 store <8 x i16> %vecins, ptr addrspace(1) %out.gep2723 ret void2724}2725 2726define amdgpu_kernel void @v_insertelement_v8f16_dynamic(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val, i32 %n) {2727; GFX9-LABEL: v_insertelement_v8f16_dynamic:2728; GFX9: ; %bb.0:2729; GFX9-NEXT: s_load_dwordx4 s[16:19], s[8:9], 0x02730; GFX9-NEXT: s_load_dwordx2 s[12:13], s[8:9], 0x102731; GFX9-NEXT: v_lshlrev_b32_e32 v4, 4, v02732; GFX9-NEXT: s_mov_b32 s14, 0x50401002733; GFX9-NEXT: s_waitcnt lgkmcnt(0)2734; GFX9-NEXT: global_load_dwordx4 v[0:3], v4, s[18:19]2735; GFX9-NEXT: s_cmp_eq_u32 s13, 62736; GFX9-NEXT: s_cselect_b64 vcc, -1, 02737; GFX9-NEXT: s_cmp_eq_u32 s13, 72738; GFX9-NEXT: s_cselect_b64 s[0:1], -1, 02739; GFX9-NEXT: s_cmp_eq_u32 s13, 42740; GFX9-NEXT: s_cselect_b64 s[2:3], -1, 02741; GFX9-NEXT: s_cmp_eq_u32 s13, 52742; GFX9-NEXT: s_cselect_b64 s[4:5], -1, 02743; GFX9-NEXT: s_cmp_eq_u32 s13, 22744; GFX9-NEXT: v_mov_b32_e32 v5, s122745; GFX9-NEXT: s_cselect_b64 s[6:7], -1, 02746; GFX9-NEXT: s_cmp_eq_u32 s13, 32747; GFX9-NEXT: s_cselect_b64 s[8:9], -1, 02748; GFX9-NEXT: s_cmp_eq_u32 s13, 02749; GFX9-NEXT: s_cselect_b64 s[10:11], -1, 02750; GFX9-NEXT: s_cmp_eq_u32 s13, 12751; GFX9-NEXT: s_cselect_b64 s[12:13], -1, 02752; GFX9-NEXT: s_waitcnt vmcnt(0)2753; GFX9-NEXT: v_cndmask_b32_e32 v6, v3, v5, vcc2754; GFX9-NEXT: s_mov_b64 vcc, s[0:1]2755; GFX9-NEXT: v_cndmask_b32_sdwa v3, v3, v5, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2756; GFX9-NEXT: s_mov_b64 vcc, s[4:5]2757; GFX9-NEXT: v_cndmask_b32_e64 v7, v2, v5, s[2:3]2758; GFX9-NEXT: v_cndmask_b32_sdwa v2, v2, v5, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2759; GFX9-NEXT: s_mov_b64 vcc, s[8:9]2760; GFX9-NEXT: v_cndmask_b32_e64 v8, v1, v5, s[6:7]2761; GFX9-NEXT: v_cndmask_b32_sdwa v1, v1, v5, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2762; GFX9-NEXT: s_mov_b64 vcc, s[12:13]2763; GFX9-NEXT: v_cndmask_b32_e64 v9, v0, v5, s[10:11]2764; GFX9-NEXT: v_cndmask_b32_sdwa v0, v0, v5, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2765; GFX9-NEXT: v_perm_b32 v3, v3, v6, s142766; GFX9-NEXT: v_perm_b32 v2, v2, v7, s142767; GFX9-NEXT: v_perm_b32 v1, v1, v8, s142768; GFX9-NEXT: v_perm_b32 v0, v0, v9, s142769; GFX9-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2770; GFX9-NEXT: s_endpgm2771;2772; VI-LABEL: v_insertelement_v8f16_dynamic:2773; VI: ; %bb.0:2774; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02775; VI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x102776; VI-NEXT: v_lshlrev_b32_e32 v4, 4, v02777; VI-NEXT: s_add_i32 s12, s12, s172778; VI-NEXT: s_mov_b32 flat_scratch_lo, s132779; VI-NEXT: s_waitcnt lgkmcnt(0)2780; VI-NEXT: v_mov_b32_e32 v1, s32781; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v42782; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82783; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2784; VI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]2785; VI-NEXT: v_mov_b32_e32 v5, s12786; VI-NEXT: v_add_u32_e32 v4, vcc, s0, v42787; VI-NEXT: s_cmp_eq_u32 s5, 62788; VI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc2789; VI-NEXT: v_mov_b32_e32 v6, s42790; VI-NEXT: s_cselect_b64 vcc, -1, 02791; VI-NEXT: s_cmp_eq_u32 s5, 72792; VI-NEXT: s_waitcnt vmcnt(0)2793; VI-NEXT: v_cndmask_b32_e32 v7, v3, v6, vcc2794; VI-NEXT: v_lshrrev_b32_e32 v3, 16, v32795; VI-NEXT: s_cselect_b64 vcc, -1, 02796; VI-NEXT: s_cmp_eq_u32 s5, 42797; VI-NEXT: v_cndmask_b32_e32 v3, v3, v6, vcc2798; VI-NEXT: s_cselect_b64 vcc, -1, 02799; VI-NEXT: s_cmp_eq_u32 s5, 52800; VI-NEXT: v_lshrrev_b32_e32 v8, 16, v22801; VI-NEXT: v_cndmask_b32_e32 v2, v2, v6, vcc2802; VI-NEXT: s_cselect_b64 vcc, -1, 02803; VI-NEXT: s_cmp_eq_u32 s5, 22804; VI-NEXT: v_lshlrev_b32_e32 v3, 16, v32805; VI-NEXT: v_cndmask_b32_e32 v8, v8, v6, vcc2806; VI-NEXT: s_cselect_b64 vcc, -1, 02807; VI-NEXT: s_cmp_eq_u32 s5, 32808; VI-NEXT: v_lshrrev_b32_e32 v9, 16, v12809; VI-NEXT: v_or_b32_sdwa v3, v7, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2810; VI-NEXT: v_lshlrev_b32_e32 v7, 16, v82811; VI-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc2812; VI-NEXT: s_cselect_b64 vcc, -1, 02813; VI-NEXT: s_cmp_eq_u32 s5, 02814; VI-NEXT: v_or_b32_sdwa v2, v2, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2815; VI-NEXT: v_cndmask_b32_e32 v7, v9, v6, vcc2816; VI-NEXT: s_cselect_b64 vcc, -1, 02817; VI-NEXT: s_cmp_eq_u32 s5, 12818; VI-NEXT: v_cndmask_b32_e32 v8, v0, v6, vcc2819; VI-NEXT: s_cselect_b64 vcc, -1, 02820; VI-NEXT: v_lshlrev_b32_e32 v7, 16, v72821; VI-NEXT: v_cndmask_b32_sdwa v0, v0, v6, vcc dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2822; VI-NEXT: v_or_b32_sdwa v1, v1, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2823; VI-NEXT: v_or_b32_sdwa v0, v8, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2824; VI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2825; VI-NEXT: s_endpgm2826;2827; CI-LABEL: v_insertelement_v8f16_dynamic:2828; CI: ; %bb.0:2829; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02830; CI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x42831; CI-NEXT: v_lshlrev_b32_e32 v4, 4, v02832; CI-NEXT: s_add_i32 s12, s12, s172833; CI-NEXT: s_mov_b32 flat_scratch_lo, s132834; CI-NEXT: s_waitcnt lgkmcnt(0)2835; CI-NEXT: v_mov_b32_e32 v1, s32836; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v42837; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 82838; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2839; CI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]2840; CI-NEXT: v_mov_b32_e32 v5, s12841; CI-NEXT: v_add_i32_e32 v4, vcc, s0, v42842; CI-NEXT: v_cvt_f32_f16_e32 v6, s42843; CI-NEXT: s_cmp_eq_u32 s5, 72844; CI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc2845; CI-NEXT: s_cselect_b64 vcc, -1, 02846; CI-NEXT: s_cmp_eq_u32 s5, 62847; CI-NEXT: s_cselect_b64 s[0:1], -1, 02848; CI-NEXT: s_cmp_eq_u32 s5, 52849; CI-NEXT: s_cselect_b64 s[2:3], -1, 02850; CI-NEXT: s_cmp_eq_u32 s5, 42851; CI-NEXT: s_waitcnt vmcnt(0)2852; CI-NEXT: v_lshrrev_b32_e32 v7, 16, v32853; CI-NEXT: v_cvt_f32_f16_e32 v3, v32854; CI-NEXT: v_lshrrev_b32_e32 v9, 16, v12855; CI-NEXT: v_cvt_f32_f16_e32 v7, v72856; CI-NEXT: v_cvt_f32_f16_e32 v9, v92857; CI-NEXT: v_lshrrev_b32_e32 v8, 16, v22858; CI-NEXT: v_cvt_f32_f16_e32 v1, v12859; CI-NEXT: v_lshrrev_b32_e32 v10, 16, v02860; CI-NEXT: v_cvt_f32_f16_e32 v8, v82861; CI-NEXT: v_cvt_f32_f16_e32 v10, v102862; CI-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[0:1]2863; CI-NEXT: s_cselect_b64 s[0:1], -1, 02864; CI-NEXT: s_cmp_eq_u32 s5, 32865; CI-NEXT: v_cvt_f32_f16_e32 v2, v22866; CI-NEXT: v_cvt_f32_f16_e32 v0, v02867; CI-NEXT: v_cndmask_b32_e32 v7, v7, v6, vcc2868; CI-NEXT: s_cselect_b64 vcc, -1, 02869; CI-NEXT: s_cmp_eq_u32 s5, 22870; CI-NEXT: v_cndmask_b32_e32 v9, v9, v6, vcc2871; CI-NEXT: s_cselect_b64 vcc, -1, 02872; CI-NEXT: s_cmp_eq_u32 s5, 12873; CI-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc2874; CI-NEXT: s_cselect_b64 vcc, -1, 02875; CI-NEXT: s_cmp_eq_u32 s5, 02876; CI-NEXT: v_cndmask_b32_e64 v8, v8, v6, s[2:3]2877; CI-NEXT: v_cvt_f16_f32_e32 v7, v72878; CI-NEXT: v_cndmask_b32_e32 v10, v10, v6, vcc2879; CI-NEXT: s_cselect_b64 vcc, -1, 02880; CI-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1]2881; CI-NEXT: v_cvt_f16_f32_e32 v3, v32882; CI-NEXT: v_cvt_f16_f32_e32 v8, v82883; CI-NEXT: v_cvt_f16_f32_e32 v9, v92884; CI-NEXT: v_cvt_f16_f32_e32 v10, v102885; CI-NEXT: v_cndmask_b32_e32 v0, v0, v6, vcc2886; CI-NEXT: v_cvt_f16_f32_e32 v2, v22887; CI-NEXT: v_cvt_f16_f32_e32 v1, v12888; CI-NEXT: v_cvt_f16_f32_e32 v0, v02889; CI-NEXT: v_lshlrev_b32_e32 v6, 16, v72890; CI-NEXT: v_lshlrev_b32_e32 v7, 16, v82891; CI-NEXT: v_lshlrev_b32_e32 v8, 16, v92892; CI-NEXT: v_or_b32_e32 v3, v3, v62893; CI-NEXT: v_lshlrev_b32_e32 v6, 16, v102894; CI-NEXT: v_or_b32_e32 v2, v2, v72895; CI-NEXT: v_or_b32_e32 v1, v1, v82896; CI-NEXT: v_or_b32_e32 v0, v0, v62897; CI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2898; CI-NEXT: s_endpgm2899;2900; GFX11-TRUE16-LABEL: v_insertelement_v8f16_dynamic:2901; GFX11-TRUE16: ; %bb.0:2902; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02903; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02904; GFX11-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x102905; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2906; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v4, 4, v02907; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)2908; GFX11-TRUE16-NEXT: global_load_b128 v[0:3], v4, s[2:3]2909; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 62910; GFX11-TRUE16-NEXT: s_cselect_b32 s2, -1, 02911; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 72912; GFX11-TRUE16-NEXT: s_cselect_b32 s3, -1, 02913; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 42914; GFX11-TRUE16-NEXT: s_cselect_b32 s6, -1, 02915; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 52916; GFX11-TRUE16-NEXT: s_cselect_b32 s7, -1, 02917; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 22918; GFX11-TRUE16-NEXT: s_cselect_b32 s8, -1, 02919; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 32920; GFX11-TRUE16-NEXT: s_cselect_b32 s9, -1, 02921; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 02922; GFX11-TRUE16-NEXT: s_cselect_b32 s10, -1, 02923; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 12924; GFX11-TRUE16-NEXT: s_cselect_b32 s5, -1, 02925; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2926; GFX11-TRUE16-NEXT: v_cndmask_b16 v3.l, v3.l, s4, s22927; GFX11-TRUE16-NEXT: v_cndmask_b16 v3.h, v3.h, s4, s32928; GFX11-TRUE16-NEXT: v_cndmask_b16 v2.l, v2.l, s4, s62929; GFX11-TRUE16-NEXT: v_cndmask_b16 v2.h, v2.h, s4, s72930; GFX11-TRUE16-NEXT: v_cndmask_b16 v1.l, v1.l, s4, s82931; GFX11-TRUE16-NEXT: v_cndmask_b16 v1.h, v1.h, s4, s92932; GFX11-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.l, s4, s102933; GFX11-TRUE16-NEXT: v_cndmask_b16 v0.h, v0.h, s4, s52934; GFX11-TRUE16-NEXT: global_store_b128 v4, v[0:3], s[0:1]2935; GFX11-TRUE16-NEXT: s_endpgm2936;2937; GFX11-FAKE16-LABEL: v_insertelement_v8f16_dynamic:2938; GFX11-FAKE16: ; %bb.0:2939; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x02940; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v02941; GFX11-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x102942; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2943; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v4, 4, v02944; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)2945; GFX11-FAKE16-NEXT: global_load_b128 v[0:3], v4, s[2:3]2946; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 62947; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 02948; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 72949; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2950; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v5, v3, s4, s22951; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 02952; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 42953; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v32954; GFX11-FAKE16-NEXT: s_cselect_b32 s3, -1, 02955; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 52956; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v6, 16, v22957; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v2, v2, s4, s32958; GFX11-FAKE16-NEXT: s_cselect_b32 s3, -1, 02959; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 22960; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v7, 16, v12961; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v3, v3, s4, s22962; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 02963; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 32964; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v1, v1, s4, s22965; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 02966; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 02967; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v8, 16, v02968; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v7, v7, s4, s22969; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 02970; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 12971; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v0, v0, s4, s22972; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 02973; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v6, v6, s4, s32974; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v8, v8, s4, s22975; GFX11-FAKE16-NEXT: v_perm_b32 v3, v3, v5, 0x50401002976; GFX11-FAKE16-NEXT: v_perm_b32 v1, v7, v1, 0x50401002977; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)2978; GFX11-FAKE16-NEXT: v_perm_b32 v2, v6, v2, 0x50401002979; GFX11-FAKE16-NEXT: v_perm_b32 v0, v8, v0, 0x50401002980; GFX11-FAKE16-NEXT: global_store_b128 v4, v[0:3], s[0:1]2981; GFX11-FAKE16-NEXT: s_endpgm2982 %tid = call i32 @llvm.amdgcn.workitem.id.x() #12983 %tid.ext = sext i32 %tid to i642984 %in.gep = getelementptr inbounds <8 x half>, ptr addrspace(1) %in, i64 %tid.ext2985 %out.gep = getelementptr inbounds <8 x half>, ptr addrspace(1) %out, i64 %tid.ext2986 %vec = load <8 x half>, ptr addrspace(1) %in.gep2987 %val.trunc = trunc i32 %val to i162988 %val.cvt = bitcast i16 %val.trunc to half2989 %vecins = insertelement <8 x half> %vec, half %val.cvt, i32 %n2990 store <8 x half> %vecins, ptr addrspace(1) %out.gep2991 ret void2992}2993 2994define amdgpu_kernel void @v_insertelement_v16f16_3(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) {2995; GFX9-LABEL: v_insertelement_v16f16_3:2996; GFX9: ; %bb.0:2997; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02998; GFX9-NEXT: s_load_dword s4, s[8:9], 0x102999; GFX9-NEXT: v_lshlrev_b32_e32 v8, 5, v03000; GFX9-NEXT: v_mov_b32_e32 v9, 0x50401003001; GFX9-NEXT: s_waitcnt lgkmcnt(0)3002; GFX9-NEXT: global_load_dwordx4 v[0:3], v8, s[2:3]3003; GFX9-NEXT: global_load_dwordx4 v[4:7], v8, s[2:3] offset:163004; GFX9-NEXT: s_waitcnt vmcnt(1)3005; GFX9-NEXT: v_perm_b32 v1, s4, v1, v93006; GFX9-NEXT: s_waitcnt vmcnt(0)3007; GFX9-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] offset:163008; GFX9-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]3009; GFX9-NEXT: s_endpgm3010;3011; VI-LABEL: v_insertelement_v16f16_3:3012; VI: ; %bb.0:3013; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x03014; VI-NEXT: s_load_dword s4, s[8:9], 0x103015; VI-NEXT: v_lshlrev_b32_e32 v8, 5, v03016; VI-NEXT: s_add_i32 s12, s12, s173017; VI-NEXT: s_mov_b32 flat_scratch_lo, s133018; VI-NEXT: s_waitcnt lgkmcnt(0)3019; VI-NEXT: v_mov_b32_e32 v1, s33020; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v83021; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc3022; VI-NEXT: v_add_u32_e32 v4, vcc, 16, v03023; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 83024; VI-NEXT: v_addc_u32_e32 v5, vcc, 0, v1, vcc3025; VI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]3026; VI-NEXT: flat_load_dwordx4 v[4:7], v[4:5]3027; VI-NEXT: v_mov_b32_e32 v9, s13028; VI-NEXT: v_add_u32_e32 v8, vcc, s0, v83029; VI-NEXT: v_addc_u32_e32 v9, vcc, 0, v9, vcc3030; VI-NEXT: s_lshl_b32 s1, s4, 163031; VI-NEXT: v_add_u32_e32 v10, vcc, 16, v83032; VI-NEXT: v_mov_b32_e32 v12, s13033; VI-NEXT: v_addc_u32_e32 v11, vcc, 0, v9, vcc3034; VI-NEXT: s_waitcnt vmcnt(1)3035; VI-NEXT: v_or_b32_sdwa v1, v1, v12 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3036; VI-NEXT: s_waitcnt vmcnt(0)3037; VI-NEXT: flat_store_dwordx4 v[10:11], v[4:7]3038; VI-NEXT: flat_store_dwordx4 v[8:9], v[0:3]3039; VI-NEXT: s_endpgm3040;3041; CI-LABEL: v_insertelement_v16f16_3:3042; CI: ; %bb.0:3043; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x03044; CI-NEXT: s_load_dword s4, s[8:9], 0x43045; CI-NEXT: v_lshlrev_b32_e32 v8, 5, v03046; CI-NEXT: s_add_i32 s12, s12, s173047; CI-NEXT: s_mov_b32 flat_scratch_lo, s133048; CI-NEXT: s_waitcnt lgkmcnt(0)3049; CI-NEXT: v_mov_b32_e32 v0, s33050; CI-NEXT: v_add_i32_e32 v4, vcc, s2, v83051; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 83052; CI-NEXT: v_addc_u32_e32 v5, vcc, 0, v0, vcc3053; CI-NEXT: flat_load_dwordx4 v[0:3], v[4:5]3054; CI-NEXT: v_add_i32_e32 v4, vcc, 16, v43055; CI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc3056; CI-NEXT: flat_load_dwordx4 v[4:7], v[4:5]3057; CI-NEXT: v_mov_b32_e32 v9, s13058; CI-NEXT: v_add_i32_e32 v8, vcc, s0, v83059; CI-NEXT: v_addc_u32_e32 v9, vcc, 0, v9, vcc3060; CI-NEXT: v_add_i32_e32 v10, vcc, 16, v83061; CI-NEXT: s_lshl_b32 s1, s4, 163062; CI-NEXT: v_addc_u32_e32 v11, vcc, 0, v9, vcc3063; CI-NEXT: s_waitcnt vmcnt(1)3064; CI-NEXT: v_and_b32_e32 v1, 0xffff, v13065; CI-NEXT: v_or_b32_e32 v1, s1, v13066; CI-NEXT: s_waitcnt vmcnt(0)3067; CI-NEXT: flat_store_dwordx4 v[10:11], v[4:7]3068; CI-NEXT: flat_store_dwordx4 v[8:9], v[0:3]3069; CI-NEXT: s_endpgm3070;3071; GFX11-TRUE16-LABEL: v_insertelement_v16f16_3:3072; GFX11-TRUE16: ; %bb.0:3073; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x03074; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v03075; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x103076; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3077; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v8, 5, v03078; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)3079; GFX11-TRUE16-NEXT: s_clause 0x13080; GFX11-TRUE16-NEXT: global_load_b128 v[0:3], v8, s[2:3] offset:163081; GFX11-TRUE16-NEXT: global_load_b128 v[4:7], v8, s[2:3]3082; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)3083; GFX11-TRUE16-NEXT: v_mov_b16_e32 v5.h, s43084; GFX11-TRUE16-NEXT: s_clause 0x13085; GFX11-TRUE16-NEXT: global_store_b128 v8, v[0:3], s[0:1] offset:163086; GFX11-TRUE16-NEXT: global_store_b128 v8, v[4:7], s[0:1]3087; GFX11-TRUE16-NEXT: s_endpgm3088;3089; GFX11-FAKE16-LABEL: v_insertelement_v16f16_3:3090; GFX11-FAKE16: ; %bb.0:3091; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x03092; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v03093; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x103094; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3095; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v8, 5, v03096; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)3097; GFX11-FAKE16-NEXT: s_clause 0x13098; GFX11-FAKE16-NEXT: global_load_b128 v[0:3], v8, s[2:3]3099; GFX11-FAKE16-NEXT: global_load_b128 v[4:7], v8, s[2:3] offset:163100; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)3101; GFX11-FAKE16-NEXT: v_perm_b32 v1, s4, v1, 0x50401003102; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)3103; GFX11-FAKE16-NEXT: s_clause 0x13104; GFX11-FAKE16-NEXT: global_store_b128 v8, v[4:7], s[0:1] offset:163105; GFX11-FAKE16-NEXT: global_store_b128 v8, v[0:3], s[0:1]3106; GFX11-FAKE16-NEXT: s_endpgm3107 %tid = call i32 @llvm.amdgcn.workitem.id.x() #13108 %tid.ext = sext i32 %tid to i643109 %in.gep = getelementptr inbounds <16 x half>, ptr addrspace(1) %in, i64 %tid.ext3110 %out.gep = getelementptr inbounds <16 x half>, ptr addrspace(1) %out, i64 %tid.ext3111 %vec = load <16 x half>, ptr addrspace(1) %in.gep3112 %val.trunc = trunc i32 %val to i163113 %val.cvt = bitcast i16 %val.trunc to half3114 %vecins = insertelement <16 x half> %vec, half %val.cvt, i32 33115 store <16 x half> %vecins, ptr addrspace(1) %out.gep3116 ret void3117}3118 3119define amdgpu_kernel void @v_insertelement_v16i16_6(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) {3120; GFX9-LABEL: v_insertelement_v16i16_6:3121; GFX9: ; %bb.0:3122; GFX9-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x03123; GFX9-NEXT: s_load_dword s4, s[8:9], 0x103124; GFX9-NEXT: v_lshlrev_b32_e32 v8, 5, v03125; GFX9-NEXT: s_waitcnt lgkmcnt(0)3126; GFX9-NEXT: global_load_dwordx4 v[0:3], v8, s[2:3]3127; GFX9-NEXT: global_load_dwordx4 v[4:7], v8, s[2:3] offset:163128; GFX9-NEXT: s_mov_b32 s2, 0xffff3129; GFX9-NEXT: v_mov_b32_e32 v9, s43130; GFX9-NEXT: s_waitcnt vmcnt(1)3131; GFX9-NEXT: v_bfi_b32 v3, s2, v9, v33132; GFX9-NEXT: s_waitcnt vmcnt(0)3133; GFX9-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] offset:163134; GFX9-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]3135; GFX9-NEXT: s_endpgm3136;3137; VI-LABEL: v_insertelement_v16i16_6:3138; VI: ; %bb.0:3139; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x03140; VI-NEXT: s_load_dword s4, s[8:9], 0x103141; VI-NEXT: v_lshlrev_b32_e32 v8, 5, v03142; VI-NEXT: s_add_i32 s12, s12, s173143; VI-NEXT: s_mov_b32 flat_scratch_lo, s133144; VI-NEXT: s_waitcnt lgkmcnt(0)3145; VI-NEXT: v_mov_b32_e32 v1, s33146; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v83147; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc3148; VI-NEXT: v_add_u32_e32 v4, vcc, 16, v03149; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 83150; VI-NEXT: v_addc_u32_e32 v5, vcc, 0, v1, vcc3151; VI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]3152; VI-NEXT: flat_load_dwordx4 v[4:7], v[4:5]3153; VI-NEXT: v_mov_b32_e32 v9, s13154; VI-NEXT: v_add_u32_e32 v8, vcc, s0, v83155; VI-NEXT: v_addc_u32_e32 v9, vcc, 0, v9, vcc3156; VI-NEXT: v_add_u32_e32 v10, vcc, 16, v83157; VI-NEXT: v_mov_b32_e32 v12, 0x30205043158; VI-NEXT: v_addc_u32_e32 v11, vcc, 0, v9, vcc3159; VI-NEXT: s_waitcnt vmcnt(1)3160; VI-NEXT: v_perm_b32 v3, s4, v3, v123161; VI-NEXT: s_waitcnt vmcnt(0)3162; VI-NEXT: flat_store_dwordx4 v[10:11], v[4:7]3163; VI-NEXT: flat_store_dwordx4 v[8:9], v[0:3]3164; VI-NEXT: s_endpgm3165;3166; CI-LABEL: v_insertelement_v16i16_6:3167; CI: ; %bb.0:3168; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x03169; CI-NEXT: s_load_dword s4, s[8:9], 0x43170; CI-NEXT: v_lshlrev_b32_e32 v8, 5, v03171; CI-NEXT: s_add_i32 s12, s12, s173172; CI-NEXT: s_mov_b32 flat_scratch_lo, s133173; CI-NEXT: s_waitcnt lgkmcnt(0)3174; CI-NEXT: v_mov_b32_e32 v1, s33175; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v83176; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc3177; CI-NEXT: v_add_i32_e32 v4, vcc, 16, v03178; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 83179; CI-NEXT: v_addc_u32_e32 v5, vcc, 0, v1, vcc3180; CI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]3181; CI-NEXT: flat_load_dwordx4 v[4:7], v[4:5]3182; CI-NEXT: v_mov_b32_e32 v9, s13183; CI-NEXT: v_add_i32_e32 v8, vcc, s0, v83184; CI-NEXT: v_addc_u32_e32 v9, vcc, 0, v9, vcc3185; CI-NEXT: v_add_i32_e32 v10, vcc, 16, v83186; CI-NEXT: s_mov_b32 s2, 0xffff3187; CI-NEXT: v_mov_b32_e32 v12, s43188; CI-NEXT: v_addc_u32_e32 v11, vcc, 0, v9, vcc3189; CI-NEXT: s_waitcnt vmcnt(1)3190; CI-NEXT: v_bfi_b32 v3, s2, v12, v33191; CI-NEXT: s_waitcnt vmcnt(0)3192; CI-NEXT: flat_store_dwordx4 v[10:11], v[4:7]3193; CI-NEXT: flat_store_dwordx4 v[8:9], v[0:3]3194; CI-NEXT: s_endpgm3195;3196; GFX11-TRUE16-LABEL: v_insertelement_v16i16_6:3197; GFX11-TRUE16: ; %bb.0:3198; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x03199; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v03200; GFX11-TRUE16-NEXT: s_load_b32 s4, s[4:5], 0x103201; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3202; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v8, 5, v03203; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)3204; GFX11-TRUE16-NEXT: s_clause 0x13205; GFX11-TRUE16-NEXT: global_load_b128 v[0:3], v8, s[2:3] offset:163206; GFX11-TRUE16-NEXT: global_load_b128 v[4:7], v8, s[2:3]3207; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)3208; GFX11-TRUE16-NEXT: v_mov_b16_e32 v7.l, s43209; GFX11-TRUE16-NEXT: s_clause 0x13210; GFX11-TRUE16-NEXT: global_store_b128 v8, v[0:3], s[0:1] offset:163211; GFX11-TRUE16-NEXT: global_store_b128 v8, v[4:7], s[0:1]3212; GFX11-TRUE16-NEXT: s_endpgm3213;3214; GFX11-FAKE16-LABEL: v_insertelement_v16i16_6:3215; GFX11-FAKE16: ; %bb.0:3216; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x03217; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v03218; GFX11-FAKE16-NEXT: s_load_b32 s4, s[4:5], 0x103219; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3220; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v8, 5, v03221; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)3222; GFX11-FAKE16-NEXT: s_clause 0x13223; GFX11-FAKE16-NEXT: global_load_b128 v[0:3], v8, s[2:3]3224; GFX11-FAKE16-NEXT: global_load_b128 v[4:7], v8, s[2:3] offset:163225; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)3226; GFX11-FAKE16-NEXT: v_bfi_b32 v3, 0xffff, s4, v33227; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)3228; GFX11-FAKE16-NEXT: s_clause 0x13229; GFX11-FAKE16-NEXT: global_store_b128 v8, v[4:7], s[0:1] offset:163230; GFX11-FAKE16-NEXT: global_store_b128 v8, v[0:3], s[0:1]3231; GFX11-FAKE16-NEXT: s_endpgm3232 %tid = call i32 @llvm.amdgcn.workitem.id.x() #13233 %tid.ext = sext i32 %tid to i643234 %in.gep = getelementptr inbounds <16 x i16>, ptr addrspace(1) %in, i64 %tid.ext3235 %out.gep = getelementptr inbounds <16 x i16>, ptr addrspace(1) %out, i64 %tid.ext3236 %vec = load <16 x i16>, ptr addrspace(1) %in.gep3237 %val.trunc = trunc i32 %val to i163238 %val.cvt = bitcast i16 %val.trunc to i163239 %vecins = insertelement <16 x i16> %vec, i16 %val.cvt, i32 63240 store <16 x i16> %vecins, ptr addrspace(1) %out.gep3241 ret void3242}3243 3244define amdgpu_kernel void @v_insertelement_v16f16_dynamic(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val, i32 %n) {3245; GFX9-LABEL: v_insertelement_v16f16_dynamic:3246; GFX9: ; %bb.0:3247; GFX9-NEXT: s_load_dwordx4 s[36:39], s[8:9], 0x03248; GFX9-NEXT: s_load_dwordx2 s[28:29], s[8:9], 0x103249; GFX9-NEXT: v_lshlrev_b32_e32 v8, 5, v03250; GFX9-NEXT: s_mov_b32 s30, 0x50401003251; GFX9-NEXT: s_waitcnt lgkmcnt(0)3252; GFX9-NEXT: global_load_dwordx4 v[0:3], v8, s[38:39]3253; GFX9-NEXT: global_load_dwordx4 v[4:7], v8, s[38:39] offset:163254; GFX9-NEXT: s_cmp_eq_u32 s29, 63255; GFX9-NEXT: s_cselect_b64 vcc, -1, 03256; GFX9-NEXT: s_cmp_eq_u32 s29, 73257; GFX9-NEXT: s_cselect_b64 s[0:1], -1, 03258; GFX9-NEXT: s_cmp_eq_u32 s29, 43259; GFX9-NEXT: s_cselect_b64 s[2:3], -1, 03260; GFX9-NEXT: s_cmp_eq_u32 s29, 53261; GFX9-NEXT: s_cselect_b64 s[4:5], -1, 03262; GFX9-NEXT: s_cmp_eq_u32 s29, 23263; GFX9-NEXT: s_cselect_b64 s[6:7], -1, 03264; GFX9-NEXT: s_cmp_eq_u32 s29, 33265; GFX9-NEXT: s_cselect_b64 s[8:9], -1, 03266; GFX9-NEXT: s_cmp_eq_u32 s29, 03267; GFX9-NEXT: s_cselect_b64 s[10:11], -1, 03268; GFX9-NEXT: s_cmp_eq_u32 s29, 13269; GFX9-NEXT: s_cselect_b64 s[12:13], -1, 03270; GFX9-NEXT: s_cmp_eq_u32 s29, 143271; GFX9-NEXT: v_mov_b32_e32 v9, s283272; GFX9-NEXT: s_cselect_b64 s[14:15], -1, 03273; GFX9-NEXT: s_cmp_eq_u32 s29, 153274; GFX9-NEXT: s_cselect_b64 s[16:17], -1, 03275; GFX9-NEXT: s_cmp_eq_u32 s29, 123276; GFX9-NEXT: s_cselect_b64 s[18:19], -1, 03277; GFX9-NEXT: s_cmp_eq_u32 s29, 133278; GFX9-NEXT: s_cselect_b64 s[20:21], -1, 03279; GFX9-NEXT: s_cmp_eq_u32 s29, 103280; GFX9-NEXT: s_cselect_b64 s[22:23], -1, 03281; GFX9-NEXT: s_cmp_eq_u32 s29, 113282; GFX9-NEXT: s_cselect_b64 s[24:25], -1, 03283; GFX9-NEXT: s_cmp_eq_u32 s29, 83284; GFX9-NEXT: s_cselect_b64 s[26:27], -1, 03285; GFX9-NEXT: s_cmp_eq_u32 s29, 93286; GFX9-NEXT: s_cselect_b64 s[28:29], -1, 03287; GFX9-NEXT: s_waitcnt vmcnt(1)3288; GFX9-NEXT: v_cndmask_b32_e32 v10, v3, v9, vcc3289; GFX9-NEXT: s_mov_b64 vcc, s[0:1]3290; GFX9-NEXT: v_cndmask_b32_sdwa v3, v3, v9, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3291; GFX9-NEXT: s_mov_b64 vcc, s[4:5]3292; GFX9-NEXT: v_cndmask_b32_e64 v11, v2, v9, s[2:3]3293; GFX9-NEXT: v_cndmask_b32_sdwa v2, v2, v9, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3294; GFX9-NEXT: s_mov_b64 vcc, s[8:9]3295; GFX9-NEXT: v_cndmask_b32_e64 v12, v1, v9, s[6:7]3296; GFX9-NEXT: v_cndmask_b32_sdwa v1, v1, v9, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3297; GFX9-NEXT: s_mov_b64 vcc, s[12:13]3298; GFX9-NEXT: v_cndmask_b32_e64 v13, v0, v9, s[10:11]3299; GFX9-NEXT: v_cndmask_b32_sdwa v0, v0, v9, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3300; GFX9-NEXT: s_mov_b64 vcc, s[16:17]3301; GFX9-NEXT: s_waitcnt vmcnt(0)3302; GFX9-NEXT: v_cndmask_b32_e64 v14, v7, v9, s[14:15]3303; GFX9-NEXT: v_cndmask_b32_sdwa v7, v7, v9, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3304; GFX9-NEXT: s_mov_b64 vcc, s[20:21]3305; GFX9-NEXT: v_cndmask_b32_e64 v15, v6, v9, s[18:19]3306; GFX9-NEXT: v_cndmask_b32_sdwa v6, v6, v9, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3307; GFX9-NEXT: s_mov_b64 vcc, s[24:25]3308; GFX9-NEXT: v_perm_b32 v3, v3, v10, s303309; GFX9-NEXT: v_cndmask_b32_e64 v10, v5, v9, s[22:23]3310; GFX9-NEXT: v_cndmask_b32_sdwa v5, v5, v9, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3311; GFX9-NEXT: s_mov_b64 vcc, s[28:29]3312; GFX9-NEXT: v_perm_b32 v2, v2, v11, s303313; GFX9-NEXT: v_cndmask_b32_e64 v11, v4, v9, s[26:27]3314; GFX9-NEXT: v_cndmask_b32_sdwa v4, v4, v9, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD3315; GFX9-NEXT: v_perm_b32 v7, v7, v14, s303316; GFX9-NEXT: v_perm_b32 v6, v6, v15, s303317; GFX9-NEXT: v_perm_b32 v5, v5, v10, s303318; GFX9-NEXT: v_perm_b32 v4, v4, v11, s303319; GFX9-NEXT: v_perm_b32 v1, v1, v12, s303320; GFX9-NEXT: v_perm_b32 v0, v0, v13, s303321; GFX9-NEXT: global_store_dwordx4 v8, v[4:7], s[36:37] offset:163322; GFX9-NEXT: global_store_dwordx4 v8, v[0:3], s[36:37]3323; GFX9-NEXT: s_endpgm3324;3325; VI-LABEL: v_insertelement_v16f16_dynamic:3326; VI: ; %bb.0:3327; VI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x03328; VI-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x103329; VI-NEXT: v_lshlrev_b32_e32 v8, 5, v03330; VI-NEXT: s_add_i32 s12, s12, s173331; VI-NEXT: s_mov_b32 flat_scratch_lo, s133332; VI-NEXT: s_waitcnt lgkmcnt(0)3333; VI-NEXT: v_mov_b32_e32 v0, s33334; VI-NEXT: v_add_u32_e32 v4, vcc, s2, v83335; VI-NEXT: v_addc_u32_e32 v5, vcc, 0, v0, vcc3336; VI-NEXT: v_add_u32_e32 v0, vcc, 16, v43337; VI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 83338; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc3339; VI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]3340; VI-NEXT: flat_load_dwordx4 v[4:7], v[4:5]3341; VI-NEXT: v_mov_b32_e32 v9, s13342; VI-NEXT: v_add_u32_e32 v8, vcc, s0, v83343; VI-NEXT: v_addc_u32_e32 v9, vcc, 0, v9, vcc3344; VI-NEXT: v_add_u32_e32 v10, vcc, 16, v83345; VI-NEXT: s_cmp_eq_u32 s7, 143346; VI-NEXT: v_addc_u32_e32 v11, vcc, 0, v9, vcc3347; VI-NEXT: v_mov_b32_e32 v12, s63348; VI-NEXT: s_cselect_b64 vcc, -1, 03349; VI-NEXT: s_cmp_eq_u32 s7, 153350; VI-NEXT: s_waitcnt vmcnt(1)3351; VI-NEXT: v_cndmask_b32_e32 v13, v3, v12, vcc3352; VI-NEXT: s_cselect_b64 vcc, -1, 03353; VI-NEXT: s_cmp_eq_u32 s7, 123354; VI-NEXT: s_cselect_b64 s[0:1], -1, 03355; VI-NEXT: s_cmp_eq_u32 s7, 133356; VI-NEXT: v_lshrrev_b32_e32 v14, 16, v23357; VI-NEXT: v_cndmask_b32_e64 v2, v2, v12, s[0:1]3358; VI-NEXT: s_cselect_b64 s[0:1], -1, 03359; VI-NEXT: s_cmp_eq_u32 s7, 103360; VI-NEXT: s_cselect_b64 s[2:3], -1, 03361; VI-NEXT: s_cmp_eq_u32 s7, 113362; VI-NEXT: v_lshrrev_b32_e32 v15, 16, v13363; VI-NEXT: v_cndmask_b32_e64 v1, v1, v12, s[2:3]3364; VI-NEXT: s_cselect_b64 s[2:3], -1, 03365; VI-NEXT: s_cmp_eq_u32 s7, 83366; VI-NEXT: v_lshrrev_b32_e32 v3, 16, v33367; VI-NEXT: s_cselect_b64 s[4:5], -1, 03368; VI-NEXT: v_cndmask_b32_e64 v15, v15, v12, s[2:3]3369; VI-NEXT: s_cmp_eq_u32 s7, 93370; VI-NEXT: v_lshrrev_b32_e32 v16, 16, v03371; VI-NEXT: v_cndmask_b32_e32 v3, v3, v12, vcc3372; VI-NEXT: v_lshlrev_b32_e32 v15, 16, v153373; VI-NEXT: s_cselect_b64 vcc, -1, 03374; VI-NEXT: s_cmp_eq_u32 s7, 63375; VI-NEXT: v_or_b32_sdwa v1, v1, v15 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3376; VI-NEXT: v_cndmask_b32_e32 v15, v16, v12, vcc3377; VI-NEXT: s_cselect_b64 vcc, -1, 03378; VI-NEXT: s_cmp_eq_u32 s7, 73379; VI-NEXT: v_cndmask_b32_e64 v0, v0, v12, s[4:5]3380; VI-NEXT: s_waitcnt vmcnt(0)3381; VI-NEXT: v_lshrrev_b32_e32 v17, 16, v73382; VI-NEXT: v_lshlrev_b32_e32 v3, 16, v33383; VI-NEXT: v_cndmask_b32_e64 v14, v14, v12, s[0:1]3384; VI-NEXT: v_lshlrev_b32_e32 v15, 16, v153385; VI-NEXT: v_cndmask_b32_e32 v7, v7, v12, vcc3386; VI-NEXT: s_cselect_b64 vcc, -1, 03387; VI-NEXT: s_cmp_eq_u32 s7, 43388; VI-NEXT: v_or_b32_sdwa v3, v13, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3389; VI-NEXT: v_lshlrev_b32_e32 v13, 16, v143390; VI-NEXT: v_or_b32_sdwa v0, v0, v15 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3391; VI-NEXT: v_cndmask_b32_e32 v15, v17, v12, vcc3392; VI-NEXT: s_cselect_b64 vcc, -1, 03393; VI-NEXT: s_cmp_eq_u32 s7, 53394; VI-NEXT: v_or_b32_sdwa v2, v2, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3395; VI-NEXT: v_lshrrev_b32_e32 v13, 16, v63396; VI-NEXT: v_cndmask_b32_e32 v6, v6, v12, vcc3397; VI-NEXT: s_cselect_b64 vcc, -1, 03398; VI-NEXT: s_cmp_eq_u32 s7, 23399; VI-NEXT: v_cndmask_b32_e32 v13, v13, v12, vcc3400; VI-NEXT: s_cselect_b64 vcc, -1, 03401; VI-NEXT: s_cmp_eq_u32 s7, 33402; VI-NEXT: v_lshrrev_b32_e32 v14, 16, v53403; VI-NEXT: v_cndmask_b32_e32 v5, v5, v12, vcc3404; VI-NEXT: s_cselect_b64 vcc, -1, 03405; VI-NEXT: s_cmp_eq_u32 s7, 03406; VI-NEXT: v_lshlrev_b32_e32 v13, 16, v133407; VI-NEXT: v_cndmask_b32_e32 v14, v14, v12, vcc3408; VI-NEXT: s_cselect_b64 vcc, -1, 03409; VI-NEXT: s_cmp_eq_u32 s7, 13410; VI-NEXT: v_or_b32_sdwa v6, v6, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3411; VI-NEXT: v_lshrrev_b32_e32 v13, 16, v43412; VI-NEXT: v_cndmask_b32_e32 v4, v4, v12, vcc3413; VI-NEXT: s_cselect_b64 vcc, -1, 03414; VI-NEXT: v_cndmask_b32_e32 v12, v13, v12, vcc3415; VI-NEXT: v_lshlrev_b32_e32 v15, 16, v153416; VI-NEXT: v_lshlrev_b32_e32 v14, 16, v143417; VI-NEXT: v_lshlrev_b32_e32 v12, 16, v123418; VI-NEXT: v_or_b32_sdwa v7, v7, v15 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3419; VI-NEXT: v_or_b32_sdwa v5, v5, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3420; VI-NEXT: v_or_b32_sdwa v4, v4, v12 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3421; VI-NEXT: flat_store_dwordx4 v[8:9], v[4:7]3422; VI-NEXT: flat_store_dwordx4 v[10:11], v[0:3]3423; VI-NEXT: s_endpgm3424;3425; CI-LABEL: v_insertelement_v16f16_dynamic:3426; CI: ; %bb.0:3427; CI-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x03428; CI-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x43429; CI-NEXT: v_lshlrev_b32_e32 v4, 5, v03430; CI-NEXT: s_add_i32 s12, s12, s173431; CI-NEXT: s_mov_b32 flat_scratch_lo, s133432; CI-NEXT: s_waitcnt lgkmcnt(0)3433; CI-NEXT: v_mov_b32_e32 v1, s33434; CI-NEXT: v_add_i32_e32 v0, vcc, s2, v43435; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc3436; CI-NEXT: v_add_i32_e32 v2, vcc, 16, v03437; CI-NEXT: s_lshr_b32 flat_scratch_hi, s12, 83438; CI-NEXT: v_addc_u32_e32 v3, vcc, 0, v1, vcc3439; CI-NEXT: flat_load_dwordx4 v[7:10], v[2:3]3440; CI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]3441; CI-NEXT: v_mov_b32_e32 v5, s13442; CI-NEXT: v_add_i32_e32 v4, vcc, s0, v43443; CI-NEXT: v_cvt_f32_f16_e32 v6, s43444; CI-NEXT: s_cmp_eq_u32 s5, 153445; CI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc3446; CI-NEXT: s_cselect_b64 vcc, -1, 03447; CI-NEXT: s_cmp_eq_u32 s5, 143448; CI-NEXT: s_cselect_b64 s[0:1], -1, 03449; CI-NEXT: s_cmp_eq_u32 s5, 133450; CI-NEXT: s_cselect_b64 s[2:3], -1, 03451; CI-NEXT: s_cmp_eq_u32 s5, 123452; CI-NEXT: s_waitcnt vmcnt(1)3453; CI-NEXT: v_lshrrev_b32_e32 v11, 16, v103454; CI-NEXT: v_cvt_f32_f16_e32 v10, v103455; CI-NEXT: v_lshrrev_b32_e32 v12, 16, v93456; CI-NEXT: v_lshrrev_b32_e32 v13, 16, v83457; CI-NEXT: v_cvt_f32_f16_e32 v11, v113458; CI-NEXT: v_cvt_f32_f16_e32 v12, v123459; CI-NEXT: v_cvt_f32_f16_e32 v9, v93460; CI-NEXT: v_cvt_f32_f16_e32 v13, v133461; CI-NEXT: v_cvt_f32_f16_e32 v8, v83462; CI-NEXT: v_cndmask_b32_e64 v10, v10, v6, s[0:1]3463; CI-NEXT: s_cselect_b64 s[0:1], -1, 03464; CI-NEXT: s_cmp_eq_u32 s5, 113465; CI-NEXT: v_cndmask_b32_e32 v11, v11, v6, vcc3466; CI-NEXT: v_cndmask_b32_e64 v12, v12, v6, s[2:3]3467; CI-NEXT: s_cselect_b64 vcc, -1, 03468; CI-NEXT: s_cmp_eq_u32 s5, 103469; CI-NEXT: v_cndmask_b32_e64 v9, v9, v6, s[0:1]3470; CI-NEXT: v_cndmask_b32_e32 v13, v13, v6, vcc3471; CI-NEXT: v_cvt_f16_f32_e32 v12, v123472; CI-NEXT: s_cselect_b64 vcc, -1, 03473; CI-NEXT: v_cvt_f16_f32_e32 v9, v93474; CI-NEXT: v_cvt_f16_f32_e32 v13, v133475; CI-NEXT: v_cndmask_b32_e32 v8, v8, v6, vcc3476; CI-NEXT: v_cvt_f16_f32_e32 v8, v83477; CI-NEXT: v_lshlrev_b32_e32 v12, 16, v123478; CI-NEXT: v_lshrrev_b32_e32 v14, 16, v73479; CI-NEXT: v_or_b32_e32 v9, v9, v123480; CI-NEXT: v_lshlrev_b32_e32 v12, 16, v133481; CI-NEXT: v_or_b32_e32 v8, v8, v123482; CI-NEXT: v_cvt_f32_f16_e32 v12, v143483; CI-NEXT: v_cvt_f32_f16_e32 v7, v73484; CI-NEXT: s_waitcnt vmcnt(0)3485; CI-NEXT: v_lshrrev_b32_e32 v15, 16, v33486; CI-NEXT: v_cvt_f32_f16_e32 v13, v153487; CI-NEXT: s_cmp_eq_u32 s5, 93488; CI-NEXT: v_cvt_f32_f16_e32 v3, v33489; CI-NEXT: v_lshrrev_b32_e32 v16, 16, v23490; CI-NEXT: s_cselect_b64 vcc, -1, 03491; CI-NEXT: s_cmp_eq_u32 s5, 83492; CI-NEXT: v_cvt_f32_f16_e32 v14, v163493; CI-NEXT: v_cndmask_b32_e32 v12, v12, v6, vcc3494; CI-NEXT: s_cselect_b64 vcc, -1, 03495; CI-NEXT: s_cmp_eq_u32 s5, 73496; CI-NEXT: v_cvt_f32_f16_e32 v2, v23497; CI-NEXT: v_cndmask_b32_e32 v7, v7, v6, vcc3498; CI-NEXT: s_cselect_b64 vcc, -1, 03499; CI-NEXT: s_cmp_eq_u32 s5, 63500; CI-NEXT: v_cndmask_b32_e32 v13, v13, v6, vcc3501; CI-NEXT: s_cselect_b64 vcc, -1, 03502; CI-NEXT: s_cmp_eq_u32 s5, 53503; CI-NEXT: v_cvt_f16_f32_e32 v11, v113504; CI-NEXT: v_cvt_f16_f32_e32 v12, v123505; CI-NEXT: v_cndmask_b32_e32 v3, v3, v6, vcc3506; CI-NEXT: s_cselect_b64 vcc, -1, 03507; CI-NEXT: s_cmp_eq_u32 s5, 43508; CI-NEXT: v_cvt_f16_f32_e32 v10, v103509; CI-NEXT: v_cvt_f16_f32_e32 v7, v73510; CI-NEXT: v_cvt_f16_f32_e32 v13, v133511; CI-NEXT: v_cndmask_b32_e32 v14, v14, v6, vcc3512; CI-NEXT: s_cselect_b64 vcc, -1, 03513; CI-NEXT: v_cvt_f16_f32_e32 v3, v33514; CI-NEXT: v_cvt_f16_f32_e32 v14, v143515; CI-NEXT: v_cndmask_b32_e32 v2, v2, v6, vcc3516; CI-NEXT: v_cvt_f16_f32_e32 v2, v23517; CI-NEXT: v_lshlrev_b32_e32 v11, 16, v113518; CI-NEXT: v_lshlrev_b32_e32 v12, 16, v123519; CI-NEXT: v_or_b32_e32 v10, v10, v113520; CI-NEXT: v_lshrrev_b32_e32 v11, 16, v13521; CI-NEXT: v_or_b32_e32 v7, v7, v123522; CI-NEXT: v_lshlrev_b32_e32 v12, 16, v133523; CI-NEXT: v_cvt_f32_f16_e32 v11, v113524; CI-NEXT: v_or_b32_e32 v3, v3, v123525; CI-NEXT: v_lshlrev_b32_e32 v12, 16, v143526; CI-NEXT: v_cvt_f32_f16_e32 v1, v13527; CI-NEXT: v_or_b32_e32 v2, v2, v123528; CI-NEXT: v_lshrrev_b32_e32 v12, 16, v03529; CI-NEXT: s_cmp_eq_u32 s5, 33530; CI-NEXT: v_cvt_f32_f16_e32 v12, v123531; CI-NEXT: s_cselect_b64 vcc, -1, 03532; CI-NEXT: s_cmp_eq_u32 s5, 23533; CI-NEXT: v_cvt_f32_f16_e32 v0, v03534; CI-NEXT: v_cndmask_b32_e32 v11, v11, v6, vcc3535; CI-NEXT: s_cselect_b64 vcc, -1, 03536; CI-NEXT: s_cmp_eq_u32 s5, 13537; CI-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc3538; CI-NEXT: s_cselect_b64 vcc, -1, 03539; CI-NEXT: s_cmp_eq_u32 s5, 03540; CI-NEXT: v_cvt_f16_f32_e32 v11, v113541; CI-NEXT: v_cndmask_b32_e32 v12, v12, v6, vcc3542; CI-NEXT: s_cselect_b64 vcc, -1, 03543; CI-NEXT: v_cvt_f16_f32_e32 v1, v13544; CI-NEXT: v_cvt_f16_f32_e32 v12, v123545; CI-NEXT: v_cndmask_b32_e32 v0, v0, v6, vcc3546; CI-NEXT: v_cvt_f16_f32_e32 v0, v03547; CI-NEXT: v_lshlrev_b32_e32 v6, 16, v113548; CI-NEXT: v_or_b32_e32 v1, v1, v63549; CI-NEXT: v_lshlrev_b32_e32 v6, 16, v123550; CI-NEXT: v_or_b32_e32 v0, v0, v63551; CI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]3552; CI-NEXT: s_nop 03553; CI-NEXT: v_add_i32_e32 v0, vcc, 16, v43554; CI-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc3555; CI-NEXT: flat_store_dwordx4 v[0:1], v[7:10]3556; CI-NEXT: s_endpgm3557;3558; GFX11-TRUE16-LABEL: v_insertelement_v16f16_dynamic:3559; GFX11-TRUE16: ; %bb.0:3560; GFX11-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x03561; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v03562; GFX11-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x103563; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3564; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v8, 5, v03565; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)3566; GFX11-TRUE16-NEXT: s_clause 0x13567; GFX11-TRUE16-NEXT: global_load_b128 v[0:3], v8, s[2:3]3568; GFX11-TRUE16-NEXT: global_load_b128 v[4:7], v8, s[2:3] offset:163569; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 63570; GFX11-TRUE16-NEXT: s_cselect_b32 s2, -1, 03571; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 73572; GFX11-TRUE16-NEXT: s_cselect_b32 s3, -1, 03573; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 43574; GFX11-TRUE16-NEXT: s_cselect_b32 s6, -1, 03575; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 53576; GFX11-TRUE16-NEXT: s_cselect_b32 s7, -1, 03577; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 23578; GFX11-TRUE16-NEXT: s_cselect_b32 s8, -1, 03579; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 33580; GFX11-TRUE16-NEXT: s_cselect_b32 s9, -1, 03581; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 03582; GFX11-TRUE16-NEXT: s_cselect_b32 s10, -1, 03583; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 13584; GFX11-TRUE16-NEXT: s_cselect_b32 s11, -1, 03585; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 143586; GFX11-TRUE16-NEXT: s_cselect_b32 s12, -1, 03587; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 153588; GFX11-TRUE16-NEXT: s_cselect_b32 s13, -1, 03589; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 123590; GFX11-TRUE16-NEXT: s_cselect_b32 s14, -1, 03591; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 133592; GFX11-TRUE16-NEXT: s_cselect_b32 s15, -1, 03593; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 103594; GFX11-TRUE16-NEXT: s_cselect_b32 s16, -1, 03595; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 113596; GFX11-TRUE16-NEXT: s_cselect_b32 s17, -1, 03597; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 83598; GFX11-TRUE16-NEXT: s_cselect_b32 s18, -1, 03599; GFX11-TRUE16-NEXT: s_cmp_eq_u32 s5, 93600; GFX11-TRUE16-NEXT: s_cselect_b32 s5, -1, 03601; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)3602; GFX11-TRUE16-NEXT: v_cndmask_b16 v3.l, v3.l, s4, s23603; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)3604; GFX11-TRUE16-NEXT: v_cndmask_b16 v7.l, v7.l, s4, s123605; GFX11-TRUE16-NEXT: v_cndmask_b16 v7.h, v7.h, s4, s133606; GFX11-TRUE16-NEXT: v_cndmask_b16 v6.l, v6.l, s4, s143607; GFX11-TRUE16-NEXT: v_cndmask_b16 v6.h, v6.h, s4, s153608; GFX11-TRUE16-NEXT: v_cndmask_b16 v5.l, v5.l, s4, s163609; GFX11-TRUE16-NEXT: v_cndmask_b16 v5.h, v5.h, s4, s173610; GFX11-TRUE16-NEXT: v_cndmask_b16 v4.l, v4.l, s4, s183611; GFX11-TRUE16-NEXT: v_cndmask_b16 v4.h, v4.h, s4, s53612; GFX11-TRUE16-NEXT: v_cndmask_b16 v3.h, v3.h, s4, s33613; GFX11-TRUE16-NEXT: v_cndmask_b16 v2.l, v2.l, s4, s63614; GFX11-TRUE16-NEXT: v_cndmask_b16 v2.h, v2.h, s4, s73615; GFX11-TRUE16-NEXT: v_cndmask_b16 v1.l, v1.l, s4, s83616; GFX11-TRUE16-NEXT: v_cndmask_b16 v1.h, v1.h, s4, s93617; GFX11-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.l, s4, s103618; GFX11-TRUE16-NEXT: v_cndmask_b16 v0.h, v0.h, s4, s113619; GFX11-TRUE16-NEXT: s_clause 0x13620; GFX11-TRUE16-NEXT: global_store_b128 v8, v[4:7], s[0:1] offset:163621; GFX11-TRUE16-NEXT: global_store_b128 v8, v[0:3], s[0:1]3622; GFX11-TRUE16-NEXT: s_endpgm3623;3624; GFX11-FAKE16-LABEL: v_insertelement_v16f16_dynamic:3625; GFX11-FAKE16: ; %bb.0:3626; GFX11-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x03627; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v03628; GFX11-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x103629; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3630; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v8, 5, v03631; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)3632; GFX11-FAKE16-NEXT: s_clause 0x13633; GFX11-FAKE16-NEXT: global_load_b128 v[0:3], v8, s[2:3]3634; GFX11-FAKE16-NEXT: global_load_b128 v[4:7], v8, s[2:3] offset:163635; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 63636; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03637; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 73638; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)3639; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v9, v3, s4, s23640; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03641; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 43642; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v33643; GFX11-FAKE16-NEXT: s_cselect_b32 s3, -1, 03644; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 53645; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v10, 16, v23646; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v2, v2, s4, s33647; GFX11-FAKE16-NEXT: s_cselect_b32 s3, -1, 03648; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 23649; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v11, 16, v13650; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v3, v3, s4, s23651; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03652; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 33653; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v1, v1, s4, s23654; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03655; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 03656; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v12, 16, v03657; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v11, v11, s4, s23658; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03659; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 13660; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v0, v0, s4, s23661; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03662; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 143663; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)3664; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v13, 16, v73665; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v10, v10, s4, s33666; GFX11-FAKE16-NEXT: v_perm_b32 v3, v3, v9, 0x50401003667; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v9, v12, s4, s23668; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03669; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 153670; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v7, v7, s4, s23671; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03672; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 123673; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v14, 16, v63674; GFX11-FAKE16-NEXT: v_perm_b32 v2, v10, v2, 0x50401003675; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v10, v13, s4, s23676; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03677; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 133678; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v6, v6, s4, s23679; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03680; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 103681; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v15, 16, v53682; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v12, v14, s4, s23683; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03684; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 113685; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v5, v5, s4, s23686; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03687; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 83688; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v16, 16, v43689; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v13, v15, s4, s23690; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03691; GFX11-FAKE16-NEXT: s_cmp_eq_u32 s5, 93692; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v4, v4, s4, s23693; GFX11-FAKE16-NEXT: s_cselect_b32 s2, -1, 03694; GFX11-FAKE16-NEXT: v_perm_b32 v7, v10, v7, 0x50401003695; GFX11-FAKE16-NEXT: v_cndmask_b32_e64 v14, v16, s4, s23696; GFX11-FAKE16-NEXT: v_perm_b32 v6, v12, v6, 0x50401003697; GFX11-FAKE16-NEXT: v_perm_b32 v5, v13, v5, 0x50401003698; GFX11-FAKE16-NEXT: v_perm_b32 v1, v11, v1, 0x50401003699; GFX11-FAKE16-NEXT: v_perm_b32 v0, v9, v0, 0x50401003700; GFX11-FAKE16-NEXT: v_perm_b32 v4, v14, v4, 0x50401003701; GFX11-FAKE16-NEXT: s_clause 0x13702; GFX11-FAKE16-NEXT: global_store_b128 v8, v[4:7], s[0:1] offset:163703; GFX11-FAKE16-NEXT: global_store_b128 v8, v[0:3], s[0:1]3704; GFX11-FAKE16-NEXT: s_endpgm3705 %tid = call i32 @llvm.amdgcn.workitem.id.x() #13706 %tid.ext = sext i32 %tid to i643707 %in.gep = getelementptr inbounds <16 x half>, ptr addrspace(1) %in, i64 %tid.ext3708 %out.gep = getelementptr inbounds <16 x half>, ptr addrspace(1) %out, i64 %tid.ext3709 %vec = load <16 x half>, ptr addrspace(1) %in.gep3710 %val.trunc = trunc i32 %val to i163711 %val.cvt = bitcast i16 %val.trunc to half3712 %vecins = insertelement <16 x half> %vec, half %val.cvt, i32 %n3713 store <16 x half> %vecins, ptr addrspace(1) %out.gep3714 ret void3715}3716 3717 3718declare i32 @llvm.amdgcn.workitem.id.x() #13719 3720attributes #0 = { nounwind }3721attributes #1 = { nounwind readnone }3722