3876 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck --check-prefix=GFX9 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji < %s | FileCheck --check-prefix=GFX8 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii < %s | FileCheck --check-prefix=GFX7 %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck --check-prefix=GFX10 %s6; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck --check-prefixes=GFX11 %s7 8define amdgpu_ps void @insertelement_s_v2i8_s_s(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 inreg %idx) {9; GFX9-LABEL: insertelement_s_v2i8_s_s:10; GFX9: ; %bb.0:11; GFX9-NEXT: v_mov_b32_e32 v0, 012; GFX9-NEXT: global_load_ushort v0, v0, s[2:3]13; GFX9-NEXT: v_mov_b32_e32 v1, s414; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s5, 015; GFX9-NEXT: s_waitcnt vmcnt(0)16; GFX9-NEXT: v_lshrrev_b32_e32 v2, 8, v017; GFX9-NEXT: v_cndmask_b32_e32 v3, v0, v1, vcc18; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s5, 119; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc20; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v021; GFX9-NEXT: v_lshlrev_b16_e32 v2, 8, v022; GFX9-NEXT: v_mov_b32_e32 v0, 023; GFX9-NEXT: v_mov_b32_e32 v1, 024; GFX9-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD25; GFX9-NEXT: global_store_short v[0:1], v2, off26; GFX9-NEXT: s_endpgm27;28; GFX8-LABEL: insertelement_s_v2i8_s_s:29; GFX8: ; %bb.0:30; GFX8-NEXT: v_mov_b32_e32 v0, s231; GFX8-NEXT: v_mov_b32_e32 v1, s332; GFX8-NEXT: flat_load_ushort v0, v[0:1]33; GFX8-NEXT: v_mov_b32_e32 v1, s434; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s5, 035; GFX8-NEXT: s_waitcnt vmcnt(0)36; GFX8-NEXT: v_lshrrev_b32_e32 v2, 8, v037; GFX8-NEXT: v_cndmask_b32_e32 v3, v0, v1, vcc38; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s5, 139; GFX8-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc40; GFX8-NEXT: v_and_b32_e32 v0, 0xff, v041; GFX8-NEXT: v_lshlrev_b16_e32 v2, 8, v042; GFX8-NEXT: v_mov_b32_e32 v0, 043; GFX8-NEXT: v_mov_b32_e32 v1, 044; GFX8-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD45; GFX8-NEXT: flat_store_short v[0:1], v246; GFX8-NEXT: s_endpgm47;48; GFX7-LABEL: insertelement_s_v2i8_s_s:49; GFX7: ; %bb.0:50; GFX7-NEXT: s_mov_b32 s0, s251; GFX7-NEXT: s_mov_b32 s1, s352; GFX7-NEXT: s_mov_b32 s2, -153; GFX7-NEXT: s_mov_b32 s3, 0xf00054; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 055; GFX7-NEXT: v_mov_b32_e32 v1, s456; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s5, 057; GFX7-NEXT: s_mov_b64 s[0:1], 058; GFX7-NEXT: s_waitcnt vmcnt(0)59; GFX7-NEXT: v_lshrrev_b32_e32 v2, 8, v060; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc61; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s5, 162; GFX7-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc63; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v164; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v065; GFX7-NEXT: v_lshlrev_b32_e32 v1, 8, v166; GFX7-NEXT: v_or_b32_e32 v0, v0, v167; GFX7-NEXT: buffer_store_short v0, off, s[0:3], 068; GFX7-NEXT: s_endpgm69;70; GFX10-LABEL: insertelement_s_v2i8_s_s:71; GFX10: ; %bb.0:72; GFX10-NEXT: v_mov_b32_e32 v0, 073; GFX10-NEXT: v_cmp_eq_u32_e64 s0, s5, 174; GFX10-NEXT: v_mov_b32_e32 v2, 0xff75; GFX10-NEXT: global_load_ushort v0, v0, s[2:3]76; GFX10-NEXT: s_waitcnt vmcnt(0)77; GFX10-NEXT: v_lshrrev_b32_e32 v1, 8, v078; GFX10-NEXT: v_cndmask_b32_e64 v1, v1, s4, s079; GFX10-NEXT: v_cmp_eq_u32_e64 s0, s5, 080; GFX10-NEXT: v_and_b32_sdwa v2, v1, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD81; GFX10-NEXT: v_cndmask_b32_e64 v3, v0, s4, s082; GFX10-NEXT: v_mov_b32_e32 v0, 083; GFX10-NEXT: v_mov_b32_e32 v1, 084; GFX10-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD85; GFX10-NEXT: global_store_short v[0:1], v2, off86; GFX10-NEXT: s_endpgm87;88; GFX11-LABEL: insertelement_s_v2i8_s_s:89; GFX11: ; %bb.0:90; GFX11-NEXT: v_mov_b32_e32 v0, 091; GFX11-NEXT: v_cmp_eq_u32_e64 s0, s5, 192; GFX11-NEXT: global_load_u16 v0, v0, s[2:3]93; GFX11-NEXT: s_waitcnt vmcnt(0)94; GFX11-NEXT: v_lshrrev_b32_e32 v1, 8, v095; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)96; GFX11-NEXT: v_cndmask_b32_e64 v1, v1, s4, s097; GFX11-NEXT: v_cmp_eq_u32_e64 s0, s5, 098; GFX11-NEXT: v_and_b32_e32 v1, 0xff, v199; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)100; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, s4, s0101; GFX11-NEXT: v_lshlrev_b16 v3, 8, v1102; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)103; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v0104; GFX11-NEXT: v_mov_b32_e32 v0, 0105; GFX11-NEXT: v_mov_b32_e32 v1, 0106; GFX11-NEXT: v_or_b32_e32 v2, v2, v3107; GFX11-NEXT: global_store_b16 v[0:1], v2, off108; GFX11-NEXT: s_endpgm109 %vec = load <2 x i8>, ptr addrspace(4) %ptr110 %insert = insertelement <2 x i8> %vec, i8 %val, i32 %idx111 store <2 x i8> %insert, ptr addrspace(1) null112 ret void113}114 115define amdgpu_ps void @insertelement_v_v2i8_s_s(ptr addrspace(1) %ptr, i8 inreg %val, i32 inreg %idx) {116; GFX9-LABEL: insertelement_v_v2i8_s_s:117; GFX9: ; %bb.0:118; GFX9-NEXT: global_load_ushort v0, v[0:1], off119; GFX9-NEXT: v_mov_b32_e32 v1, s2120; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s3, 0121; GFX9-NEXT: s_waitcnt vmcnt(0)122; GFX9-NEXT: v_lshrrev_b32_e32 v2, 8, v0123; GFX9-NEXT: v_cndmask_b32_e32 v3, v0, v1, vcc124; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s3, 1125; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc126; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v0127; GFX9-NEXT: v_lshlrev_b16_e32 v2, 8, v0128; GFX9-NEXT: v_mov_b32_e32 v0, 0129; GFX9-NEXT: v_mov_b32_e32 v1, 0130; GFX9-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD131; GFX9-NEXT: global_store_short v[0:1], v2, off132; GFX9-NEXT: s_endpgm133;134; GFX8-LABEL: insertelement_v_v2i8_s_s:135; GFX8: ; %bb.0:136; GFX8-NEXT: flat_load_ushort v0, v[0:1]137; GFX8-NEXT: v_mov_b32_e32 v1, s2138; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s3, 0139; GFX8-NEXT: s_waitcnt vmcnt(0)140; GFX8-NEXT: v_lshrrev_b32_e32 v2, 8, v0141; GFX8-NEXT: v_cndmask_b32_e32 v3, v0, v1, vcc142; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s3, 1143; GFX8-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc144; GFX8-NEXT: v_and_b32_e32 v0, 0xff, v0145; GFX8-NEXT: v_lshlrev_b16_e32 v2, 8, v0146; GFX8-NEXT: v_mov_b32_e32 v0, 0147; GFX8-NEXT: v_mov_b32_e32 v1, 0148; GFX8-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD149; GFX8-NEXT: flat_store_short v[0:1], v2150; GFX8-NEXT: s_endpgm151;152; GFX7-LABEL: insertelement_v_v2i8_s_s:153; GFX7: ; %bb.0:154; GFX7-NEXT: s_mov_b32 s6, 0155; GFX7-NEXT: s_mov_b32 s7, 0xf000156; GFX7-NEXT: s_mov_b64 s[4:5], 0157; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64158; GFX7-NEXT: v_mov_b32_e32 v1, s2159; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s3, 0160; GFX7-NEXT: s_mov_b64 s[4:5], 0161; GFX7-NEXT: s_mov_b32 s6, -1162; GFX7-NEXT: s_waitcnt vmcnt(0)163; GFX7-NEXT: v_lshrrev_b32_e32 v2, 8, v0164; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc165; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s3, 1166; GFX7-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc167; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v1168; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v0169; GFX7-NEXT: v_lshlrev_b32_e32 v1, 8, v1170; GFX7-NEXT: v_or_b32_e32 v0, v0, v1171; GFX7-NEXT: buffer_store_short v0, off, s[4:7], 0172; GFX7-NEXT: s_endpgm173;174; GFX10-LABEL: insertelement_v_v2i8_s_s:175; GFX10: ; %bb.0:176; GFX10-NEXT: global_load_ushort v0, v[0:1], off177; GFX10-NEXT: v_cmp_eq_u32_e64 s0, s3, 1178; GFX10-NEXT: v_mov_b32_e32 v2, 0xff179; GFX10-NEXT: s_waitcnt vmcnt(0)180; GFX10-NEXT: v_lshrrev_b32_e32 v1, 8, v0181; GFX10-NEXT: v_cndmask_b32_e64 v1, v1, s2, s0182; GFX10-NEXT: v_cmp_eq_u32_e64 s0, s3, 0183; GFX10-NEXT: v_and_b32_sdwa v2, v1, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD184; GFX10-NEXT: v_cndmask_b32_e64 v3, v0, s2, s0185; GFX10-NEXT: v_mov_b32_e32 v0, 0186; GFX10-NEXT: v_mov_b32_e32 v1, 0187; GFX10-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD188; GFX10-NEXT: global_store_short v[0:1], v2, off189; GFX10-NEXT: s_endpgm190;191; GFX11-LABEL: insertelement_v_v2i8_s_s:192; GFX11: ; %bb.0:193; GFX11-NEXT: global_load_u16 v0, v[0:1], off194; GFX11-NEXT: v_cmp_eq_u32_e64 s0, s3, 1195; GFX11-NEXT: s_waitcnt vmcnt(0)196; GFX11-NEXT: v_lshrrev_b32_e32 v1, 8, v0197; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)198; GFX11-NEXT: v_cndmask_b32_e64 v1, v1, s2, s0199; GFX11-NEXT: v_cmp_eq_u32_e64 s0, s3, 0200; GFX11-NEXT: v_and_b32_e32 v1, 0xff, v1201; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)202; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, s2, s0203; GFX11-NEXT: v_lshlrev_b16 v3, 8, v1204; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)205; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v0206; GFX11-NEXT: v_mov_b32_e32 v0, 0207; GFX11-NEXT: v_mov_b32_e32 v1, 0208; GFX11-NEXT: v_or_b32_e32 v2, v2, v3209; GFX11-NEXT: global_store_b16 v[0:1], v2, off210; GFX11-NEXT: s_endpgm211 %vec = load <2 x i8>, ptr addrspace(1 ) %ptr212 %insert = insertelement <2 x i8> %vec, i8 %val, i32 %idx213 store <2 x i8> %insert, ptr addrspace(1) null214 ret void215}216 217define amdgpu_ps void @insertelement_s_v2i8_v_s(ptr addrspace(4) inreg %ptr, i8 %val, i32 inreg %idx) {218; GFX9-LABEL: insertelement_s_v2i8_v_s:219; GFX9: ; %bb.0:220; GFX9-NEXT: v_mov_b32_e32 v1, 0221; GFX9-NEXT: global_load_ushort v1, v1, s[2:3]222; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s4, 0223; GFX9-NEXT: s_waitcnt vmcnt(0)224; GFX9-NEXT: v_lshrrev_b32_e32 v2, 8, v1225; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v0, vcc226; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s4, 1227; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc228; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v0229; GFX9-NEXT: v_lshlrev_b16_e32 v2, 8, v0230; GFX9-NEXT: v_mov_b32_e32 v0, 0231; GFX9-NEXT: v_mov_b32_e32 v1, 0232; GFX9-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD233; GFX9-NEXT: global_store_short v[0:1], v2, off234; GFX9-NEXT: s_endpgm235;236; GFX8-LABEL: insertelement_s_v2i8_v_s:237; GFX8: ; %bb.0:238; GFX8-NEXT: v_mov_b32_e32 v1, s2239; GFX8-NEXT: v_mov_b32_e32 v2, s3240; GFX8-NEXT: flat_load_ushort v1, v[1:2]241; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s4, 0242; GFX8-NEXT: s_waitcnt vmcnt(0)243; GFX8-NEXT: v_lshrrev_b32_e32 v2, 8, v1244; GFX8-NEXT: v_cndmask_b32_e32 v3, v1, v0, vcc245; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s4, 1246; GFX8-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc247; GFX8-NEXT: v_and_b32_e32 v0, 0xff, v0248; GFX8-NEXT: v_lshlrev_b16_e32 v2, 8, v0249; GFX8-NEXT: v_mov_b32_e32 v0, 0250; GFX8-NEXT: v_mov_b32_e32 v1, 0251; GFX8-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD252; GFX8-NEXT: flat_store_short v[0:1], v2253; GFX8-NEXT: s_endpgm254;255; GFX7-LABEL: insertelement_s_v2i8_v_s:256; GFX7: ; %bb.0:257; GFX7-NEXT: s_mov_b32 s0, s2258; GFX7-NEXT: s_mov_b32 s1, s3259; GFX7-NEXT: s_mov_b32 s2, -1260; GFX7-NEXT: s_mov_b32 s3, 0xf000261; GFX7-NEXT: buffer_load_ushort v1, off, s[0:3], 0262; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s4, 0263; GFX7-NEXT: s_mov_b64 s[0:1], 0264; GFX7-NEXT: s_waitcnt vmcnt(0)265; GFX7-NEXT: v_lshrrev_b32_e32 v2, 8, v1266; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v0, vcc267; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s4, 1268; GFX7-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc269; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v0270; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v1271; GFX7-NEXT: v_lshlrev_b32_e32 v0, 8, v0272; GFX7-NEXT: v_or_b32_e32 v0, v1, v0273; GFX7-NEXT: buffer_store_short v0, off, s[0:3], 0274; GFX7-NEXT: s_endpgm275;276; GFX10-LABEL: insertelement_s_v2i8_v_s:277; GFX10: ; %bb.0:278; GFX10-NEXT: v_mov_b32_e32 v1, 0279; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s4, 1280; GFX10-NEXT: v_mov_b32_e32 v3, 0xff281; GFX10-NEXT: global_load_ushort v1, v1, s[2:3]282; GFX10-NEXT: s_waitcnt vmcnt(0)283; GFX10-NEXT: v_lshrrev_b32_e32 v2, 8, v1284; GFX10-NEXT: v_cndmask_b32_e32 v2, v2, v0, vcc_lo285; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s4, 0286; GFX10-NEXT: v_and_b32_sdwa v2, v2, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD287; GFX10-NEXT: v_cndmask_b32_e32 v4, v1, v0, vcc_lo288; GFX10-NEXT: v_mov_b32_e32 v0, 0289; GFX10-NEXT: v_mov_b32_e32 v1, 0290; GFX10-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD291; GFX10-NEXT: global_store_short v[0:1], v2, off292; GFX10-NEXT: s_endpgm293;294; GFX11-LABEL: insertelement_s_v2i8_v_s:295; GFX11: ; %bb.0:296; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s4, 1297; GFX11-NEXT: v_mov_b32_e32 v1, 0298; GFX11-NEXT: global_load_u16 v1, v1, s[2:3]299; GFX11-NEXT: s_waitcnt vmcnt(0)300; GFX11-NEXT: v_lshrrev_b32_e32 v2, 8, v1301; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)302; GFX11-NEXT: v_cndmask_b32_e32 v2, v2, v0, vcc_lo303; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s4, 0304; GFX11-NEXT: v_dual_cndmask_b32 v0, v1, v0 :: v_dual_and_b32 v1, 0xff, v2305; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)306; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v0307; GFX11-NEXT: v_lshlrev_b16 v3, 8, v1308; GFX11-NEXT: v_mov_b32_e32 v0, 0309; GFX11-NEXT: v_mov_b32_e32 v1, 0310; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)311; GFX11-NEXT: v_or_b32_e32 v2, v2, v3312; GFX11-NEXT: global_store_b16 v[0:1], v2, off313; GFX11-NEXT: s_endpgm314 %vec = load <2 x i8>, ptr addrspace(4) %ptr315 %insert = insertelement <2 x i8> %vec, i8 %val, i32 %idx316 store <2 x i8> %insert, ptr addrspace(1) null317 ret void318}319 320define amdgpu_ps void @insertelement_s_v2i8_s_v(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 %idx) {321; GFX9-LABEL: insertelement_s_v2i8_s_v:322; GFX9: ; %bb.0:323; GFX9-NEXT: v_mov_b32_e32 v1, 0324; GFX9-NEXT: global_load_ushort v1, v1, s[2:3]325; GFX9-NEXT: v_mov_b32_e32 v2, s4326; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0327; GFX9-NEXT: s_waitcnt vmcnt(0)328; GFX9-NEXT: v_lshrrev_b32_e32 v3, 8, v1329; GFX9-NEXT: v_cndmask_b32_e32 v4, v1, v2, vcc330; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0331; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc332; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v0333; GFX9-NEXT: v_lshlrev_b16_e32 v2, 8, v0334; GFX9-NEXT: v_mov_b32_e32 v0, 0335; GFX9-NEXT: v_mov_b32_e32 v1, 0336; GFX9-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD337; GFX9-NEXT: global_store_short v[0:1], v2, off338; GFX9-NEXT: s_endpgm339;340; GFX8-LABEL: insertelement_s_v2i8_s_v:341; GFX8: ; %bb.0:342; GFX8-NEXT: v_mov_b32_e32 v1, s2343; GFX8-NEXT: v_mov_b32_e32 v2, s3344; GFX8-NEXT: flat_load_ushort v1, v[1:2]345; GFX8-NEXT: v_mov_b32_e32 v2, s4346; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0347; GFX8-NEXT: s_waitcnt vmcnt(0)348; GFX8-NEXT: v_lshrrev_b32_e32 v3, 8, v1349; GFX8-NEXT: v_cndmask_b32_e32 v4, v1, v2, vcc350; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0351; GFX8-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc352; GFX8-NEXT: v_and_b32_e32 v0, 0xff, v0353; GFX8-NEXT: v_lshlrev_b16_e32 v2, 8, v0354; GFX8-NEXT: v_mov_b32_e32 v0, 0355; GFX8-NEXT: v_mov_b32_e32 v1, 0356; GFX8-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD357; GFX8-NEXT: flat_store_short v[0:1], v2358; GFX8-NEXT: s_endpgm359;360; GFX7-LABEL: insertelement_s_v2i8_s_v:361; GFX7: ; %bb.0:362; GFX7-NEXT: s_mov_b32 s0, s2363; GFX7-NEXT: s_mov_b32 s1, s3364; GFX7-NEXT: s_mov_b32 s2, -1365; GFX7-NEXT: s_mov_b32 s3, 0xf000366; GFX7-NEXT: buffer_load_ushort v1, off, s[0:3], 0367; GFX7-NEXT: v_mov_b32_e32 v2, s4368; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0369; GFX7-NEXT: s_mov_b64 s[0:1], 0370; GFX7-NEXT: s_waitcnt vmcnt(0)371; GFX7-NEXT: v_lshrrev_b32_e32 v3, 8, v1372; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc373; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0374; GFX7-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc375; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v0376; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v1377; GFX7-NEXT: v_lshlrev_b32_e32 v0, 8, v0378; GFX7-NEXT: v_or_b32_e32 v0, v1, v0379; GFX7-NEXT: buffer_store_short v0, off, s[0:3], 0380; GFX7-NEXT: s_endpgm381;382; GFX10-LABEL: insertelement_s_v2i8_s_v:383; GFX10: ; %bb.0:384; GFX10-NEXT: v_mov_b32_e32 v1, 0385; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0386; GFX10-NEXT: v_mov_b32_e32 v3, 0xff387; GFX10-NEXT: global_load_ushort v1, v1, s[2:3]388; GFX10-NEXT: s_waitcnt vmcnt(0)389; GFX10-NEXT: v_lshrrev_b32_e32 v2, 8, v1390; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, s4, vcc_lo391; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0392; GFX10-NEXT: v_and_b32_sdwa v2, v2, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD393; GFX10-NEXT: v_cndmask_b32_e64 v4, v1, s4, vcc_lo394; GFX10-NEXT: v_mov_b32_e32 v0, 0395; GFX10-NEXT: v_mov_b32_e32 v1, 0396; GFX10-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD397; GFX10-NEXT: global_store_short v[0:1], v2, off398; GFX10-NEXT: s_endpgm399;400; GFX11-LABEL: insertelement_s_v2i8_s_v:401; GFX11: ; %bb.0:402; GFX11-NEXT: v_mov_b32_e32 v1, 0403; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0404; GFX11-NEXT: global_load_u16 v1, v1, s[2:3]405; GFX11-NEXT: s_waitcnt vmcnt(0)406; GFX11-NEXT: v_lshrrev_b32_e32 v2, 8, v1407; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)408; GFX11-NEXT: v_cndmask_b32_e64 v2, v2, s4, vcc_lo409; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0410; GFX11-NEXT: v_cndmask_b32_e64 v0, v1, s4, vcc_lo411; GFX11-NEXT: v_and_b32_e32 v1, 0xff, v2412; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)413; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v0414; GFX11-NEXT: v_lshlrev_b16 v3, 8, v1415; GFX11-NEXT: v_mov_b32_e32 v0, 0416; GFX11-NEXT: v_mov_b32_e32 v1, 0417; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)418; GFX11-NEXT: v_or_b32_e32 v2, v2, v3419; GFX11-NEXT: global_store_b16 v[0:1], v2, off420; GFX11-NEXT: s_endpgm421 %vec = load <2 x i8>, ptr addrspace(4) %ptr422 %insert = insertelement <2 x i8> %vec, i8 %val, i32 %idx423 store <2 x i8> %insert, ptr addrspace(1) null424 ret void425}426 427define amdgpu_ps void @insertelement_s_v2i8_v_v(ptr addrspace(4) inreg %ptr, i8 %val, i32 %idx) {428; GFX9-LABEL: insertelement_s_v2i8_v_v:429; GFX9: ; %bb.0:430; GFX9-NEXT: v_mov_b32_e32 v2, 0431; GFX9-NEXT: global_load_ushort v2, v2, s[2:3]432; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 0, v1433; GFX9-NEXT: s_waitcnt vmcnt(0)434; GFX9-NEXT: v_lshrrev_b32_e32 v3, 8, v2435; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v0, vcc436; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1437; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc438; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v0439; GFX9-NEXT: v_lshlrev_b16_e32 v3, 8, v0440; GFX9-NEXT: v_mov_b32_e32 v0, 0441; GFX9-NEXT: v_mov_b32_e32 v1, 0442; GFX9-NEXT: v_or_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD443; GFX9-NEXT: global_store_short v[0:1], v2, off444; GFX9-NEXT: s_endpgm445;446; GFX8-LABEL: insertelement_s_v2i8_v_v:447; GFX8: ; %bb.0:448; GFX8-NEXT: v_mov_b32_e32 v2, s2449; GFX8-NEXT: v_mov_b32_e32 v3, s3450; GFX8-NEXT: flat_load_ushort v2, v[2:3]451; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 0, v1452; GFX8-NEXT: s_waitcnt vmcnt(0)453; GFX8-NEXT: v_lshrrev_b32_e32 v3, 8, v2454; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v0, vcc455; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1456; GFX8-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc457; GFX8-NEXT: v_and_b32_e32 v0, 0xff, v0458; GFX8-NEXT: v_lshlrev_b16_e32 v3, 8, v0459; GFX8-NEXT: v_mov_b32_e32 v0, 0460; GFX8-NEXT: v_mov_b32_e32 v1, 0461; GFX8-NEXT: v_or_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD462; GFX8-NEXT: flat_store_short v[0:1], v2463; GFX8-NEXT: s_endpgm464;465; GFX7-LABEL: insertelement_s_v2i8_v_v:466; GFX7: ; %bb.0:467; GFX7-NEXT: s_mov_b32 s0, s2468; GFX7-NEXT: s_mov_b32 s1, s3469; GFX7-NEXT: s_mov_b32 s2, -1470; GFX7-NEXT: s_mov_b32 s3, 0xf000471; GFX7-NEXT: buffer_load_ushort v2, off, s[0:3], 0472; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 0, v1473; GFX7-NEXT: s_mov_b64 s[0:1], 0474; GFX7-NEXT: s_waitcnt vmcnt(0)475; GFX7-NEXT: v_lshrrev_b32_e32 v3, 8, v2476; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v0, vcc477; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1478; GFX7-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc479; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v0480; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v2481; GFX7-NEXT: v_lshlrev_b32_e32 v0, 8, v0482; GFX7-NEXT: v_or_b32_e32 v0, v1, v0483; GFX7-NEXT: buffer_store_short v0, off, s[0:3], 0484; GFX7-NEXT: s_endpgm485;486; GFX10-LABEL: insertelement_s_v2i8_v_v:487; GFX10: ; %bb.0:488; GFX10-NEXT: v_mov_b32_e32 v2, 0489; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1490; GFX10-NEXT: v_mov_b32_e32 v4, 0xff491; GFX10-NEXT: global_load_ushort v2, v2, s[2:3]492; GFX10-NEXT: s_waitcnt vmcnt(0)493; GFX10-NEXT: v_lshrrev_b32_e32 v3, 8, v2494; GFX10-NEXT: v_cndmask_b32_e32 v3, v3, v0, vcc_lo495; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v1496; GFX10-NEXT: v_and_b32_sdwa v3, v3, v4 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD497; GFX10-NEXT: v_cndmask_b32_e32 v2, v2, v0, vcc_lo498; GFX10-NEXT: v_mov_b32_e32 v0, 0499; GFX10-NEXT: v_mov_b32_e32 v1, 0500; GFX10-NEXT: v_or_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD501; GFX10-NEXT: global_store_short v[0:1], v2, off502; GFX10-NEXT: s_endpgm503;504; GFX11-LABEL: insertelement_s_v2i8_v_v:505; GFX11: ; %bb.0:506; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1507; GFX11-NEXT: v_mov_b32_e32 v2, 0508; GFX11-NEXT: global_load_u16 v2, v2, s[2:3]509; GFX11-NEXT: s_waitcnt vmcnt(0)510; GFX11-NEXT: v_lshrrev_b32_e32 v3, 8, v2511; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)512; GFX11-NEXT: v_cndmask_b32_e32 v3, v3, v0, vcc_lo513; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v1514; GFX11-NEXT: v_dual_cndmask_b32 v0, v2, v0 :: v_dual_and_b32 v1, 0xff, v3515; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)516; GFX11-NEXT: v_lshlrev_b16 v3, 8, v1517; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v0518; GFX11-NEXT: v_mov_b32_e32 v0, 0519; GFX11-NEXT: v_mov_b32_e32 v1, 0520; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)521; GFX11-NEXT: v_or_b32_e32 v2, v2, v3522; GFX11-NEXT: global_store_b16 v[0:1], v2, off523; GFX11-NEXT: s_endpgm524 %vec = load <2 x i8>, ptr addrspace(4) %ptr525 %insert = insertelement <2 x i8> %vec, i8 %val, i32 %idx526 store <2 x i8> %insert, ptr addrspace(1) null527 ret void528}529 530define amdgpu_ps void @insertelement_v_v2i8_s_v(ptr addrspace(1) %ptr, i8 inreg %val, i32 %idx) {531; GFX9-LABEL: insertelement_v_v2i8_s_v:532; GFX9: ; %bb.0:533; GFX9-NEXT: global_load_ushort v0, v[0:1], off534; GFX9-NEXT: v_mov_b32_e32 v1, s2535; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 0, v2536; GFX9-NEXT: s_waitcnt vmcnt(0)537; GFX9-NEXT: v_lshrrev_b32_e32 v3, 8, v0538; GFX9-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc539; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v2540; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc541; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v0542; GFX9-NEXT: v_lshlrev_b16_e32 v2, 8, v0543; GFX9-NEXT: v_mov_b32_e32 v0, 0544; GFX9-NEXT: v_mov_b32_e32 v1, 0545; GFX9-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD546; GFX9-NEXT: global_store_short v[0:1], v2, off547; GFX9-NEXT: s_endpgm548;549; GFX8-LABEL: insertelement_v_v2i8_s_v:550; GFX8: ; %bb.0:551; GFX8-NEXT: flat_load_ushort v0, v[0:1]552; GFX8-NEXT: v_mov_b32_e32 v1, s2553; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 0, v2554; GFX8-NEXT: s_waitcnt vmcnt(0)555; GFX8-NEXT: v_lshrrev_b32_e32 v3, 8, v0556; GFX8-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc557; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v2558; GFX8-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc559; GFX8-NEXT: v_and_b32_e32 v0, 0xff, v0560; GFX8-NEXT: v_lshlrev_b16_e32 v2, 8, v0561; GFX8-NEXT: v_mov_b32_e32 v0, 0562; GFX8-NEXT: v_mov_b32_e32 v1, 0563; GFX8-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD564; GFX8-NEXT: flat_store_short v[0:1], v2565; GFX8-NEXT: s_endpgm566;567; GFX7-LABEL: insertelement_v_v2i8_s_v:568; GFX7: ; %bb.0:569; GFX7-NEXT: s_mov_b32 s6, 0570; GFX7-NEXT: s_mov_b32 s7, 0xf000571; GFX7-NEXT: s_mov_b64 s[4:5], 0572; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64573; GFX7-NEXT: v_mov_b32_e32 v1, s2574; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 0, v2575; GFX7-NEXT: s_mov_b64 s[4:5], 0576; GFX7-NEXT: s_mov_b32 s6, -1577; GFX7-NEXT: s_waitcnt vmcnt(0)578; GFX7-NEXT: v_lshrrev_b32_e32 v3, 8, v0579; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc580; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v2581; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc582; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v1583; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v0584; GFX7-NEXT: v_lshlrev_b32_e32 v1, 8, v1585; GFX7-NEXT: v_or_b32_e32 v0, v0, v1586; GFX7-NEXT: buffer_store_short v0, off, s[4:7], 0587; GFX7-NEXT: s_endpgm588;589; GFX10-LABEL: insertelement_v_v2i8_s_v:590; GFX10: ; %bb.0:591; GFX10-NEXT: global_load_ushort v0, v[0:1], off592; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v2593; GFX10-NEXT: v_mov_b32_e32 v3, 0xff594; GFX10-NEXT: s_waitcnt vmcnt(0)595; GFX10-NEXT: v_lshrrev_b32_e32 v1, 8, v0596; GFX10-NEXT: v_cndmask_b32_e64 v1, v1, s2, vcc_lo597; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v2598; GFX10-NEXT: v_and_b32_sdwa v3, v1, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD599; GFX10-NEXT: v_cndmask_b32_e64 v2, v0, s2, vcc_lo600; GFX10-NEXT: v_mov_b32_e32 v0, 0601; GFX10-NEXT: v_mov_b32_e32 v1, 0602; GFX10-NEXT: v_or_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD603; GFX10-NEXT: global_store_short v[0:1], v2, off604; GFX10-NEXT: s_endpgm605;606; GFX11-LABEL: insertelement_v_v2i8_s_v:607; GFX11: ; %bb.0:608; GFX11-NEXT: global_load_u16 v0, v[0:1], off609; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v2610; GFX11-NEXT: s_waitcnt vmcnt(0)611; GFX11-NEXT: v_lshrrev_b32_e32 v1, 8, v0612; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)613; GFX11-NEXT: v_cndmask_b32_e64 v1, v1, s2, vcc_lo614; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v2615; GFX11-NEXT: v_and_b32_e32 v1, 0xff, v1616; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, s2, vcc_lo617; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)618; GFX11-NEXT: v_lshlrev_b16 v3, 8, v1619; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v0620; GFX11-NEXT: v_mov_b32_e32 v0, 0621; GFX11-NEXT: v_mov_b32_e32 v1, 0622; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)623; GFX11-NEXT: v_or_b32_e32 v2, v2, v3624; GFX11-NEXT: global_store_b16 v[0:1], v2, off625; GFX11-NEXT: s_endpgm626 %vec = load <2 x i8>, ptr addrspace(1) %ptr627 %insert = insertelement <2 x i8> %vec, i8 %val, i32 %idx628 store <2 x i8> %insert, ptr addrspace(1) null629 ret void630}631 632define amdgpu_ps void @insertelement_v_v2i8_v_s(ptr addrspace(1) %ptr, i8 %val, i32 inreg %idx) {633; GFX9-LABEL: insertelement_v_v2i8_v_s:634; GFX9: ; %bb.0:635; GFX9-NEXT: global_load_ushort v0, v[0:1], off636; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s2, 0637; GFX9-NEXT: s_waitcnt vmcnt(0)638; GFX9-NEXT: v_lshrrev_b32_e32 v1, 8, v0639; GFX9-NEXT: v_cndmask_b32_e32 v3, v0, v2, vcc640; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s2, 1641; GFX9-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc642; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v0643; GFX9-NEXT: v_lshlrev_b16_e32 v2, 8, v0644; GFX9-NEXT: v_mov_b32_e32 v0, 0645; GFX9-NEXT: v_mov_b32_e32 v1, 0646; GFX9-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD647; GFX9-NEXT: global_store_short v[0:1], v2, off648; GFX9-NEXT: s_endpgm649;650; GFX8-LABEL: insertelement_v_v2i8_v_s:651; GFX8: ; %bb.0:652; GFX8-NEXT: flat_load_ushort v0, v[0:1]653; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s2, 0654; GFX8-NEXT: s_waitcnt vmcnt(0)655; GFX8-NEXT: v_lshrrev_b32_e32 v1, 8, v0656; GFX8-NEXT: v_cndmask_b32_e32 v3, v0, v2, vcc657; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s2, 1658; GFX8-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc659; GFX8-NEXT: v_and_b32_e32 v0, 0xff, v0660; GFX8-NEXT: v_lshlrev_b16_e32 v2, 8, v0661; GFX8-NEXT: v_mov_b32_e32 v0, 0662; GFX8-NEXT: v_mov_b32_e32 v1, 0663; GFX8-NEXT: v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD664; GFX8-NEXT: flat_store_short v[0:1], v2665; GFX8-NEXT: s_endpgm666;667; GFX7-LABEL: insertelement_v_v2i8_v_s:668; GFX7: ; %bb.0:669; GFX7-NEXT: s_mov_b32 s6, 0670; GFX7-NEXT: s_mov_b32 s7, 0xf000671; GFX7-NEXT: s_mov_b64 s[4:5], 0672; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64673; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s2, 0674; GFX7-NEXT: s_mov_b64 s[4:5], 0675; GFX7-NEXT: s_mov_b32 s6, -1676; GFX7-NEXT: s_waitcnt vmcnt(0)677; GFX7-NEXT: v_lshrrev_b32_e32 v1, 8, v0678; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc679; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s2, 1680; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc681; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v1682; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v0683; GFX7-NEXT: v_lshlrev_b32_e32 v1, 8, v1684; GFX7-NEXT: v_or_b32_e32 v0, v0, v1685; GFX7-NEXT: buffer_store_short v0, off, s[4:7], 0686; GFX7-NEXT: s_endpgm687;688; GFX10-LABEL: insertelement_v_v2i8_v_s:689; GFX10: ; %bb.0:690; GFX10-NEXT: global_load_ushort v0, v[0:1], off691; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s2, 1692; GFX10-NEXT: v_mov_b32_e32 v3, 0xff693; GFX10-NEXT: s_waitcnt vmcnt(0)694; GFX10-NEXT: v_lshrrev_b32_e32 v1, 8, v0695; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc_lo696; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s2, 0697; GFX10-NEXT: v_and_b32_sdwa v3, v1, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD698; GFX10-NEXT: v_cndmask_b32_e32 v2, v0, v2, vcc_lo699; GFX10-NEXT: v_mov_b32_e32 v0, 0700; GFX10-NEXT: v_mov_b32_e32 v1, 0701; GFX10-NEXT: v_or_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD702; GFX10-NEXT: global_store_short v[0:1], v2, off703; GFX10-NEXT: s_endpgm704;705; GFX11-LABEL: insertelement_v_v2i8_v_s:706; GFX11: ; %bb.0:707; GFX11-NEXT: global_load_u16 v0, v[0:1], off708; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s2, 1709; GFX11-NEXT: s_waitcnt vmcnt(0)710; GFX11-NEXT: v_lshrrev_b32_e32 v1, 8, v0711; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)712; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc_lo713; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s2, 0714; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo715; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v0716; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)717; GFX11-NEXT: v_and_b32_e32 v1, 0xff, v1718; GFX11-NEXT: v_lshlrev_b16 v3, 8, v1719; GFX11-NEXT: v_mov_b32_e32 v0, 0720; GFX11-NEXT: v_mov_b32_e32 v1, 0721; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)722; GFX11-NEXT: v_or_b32_e32 v2, v2, v3723; GFX11-NEXT: global_store_b16 v[0:1], v2, off724; GFX11-NEXT: s_endpgm725 %vec = load <2 x i8>, ptr addrspace(1) %ptr726 %insert = insertelement <2 x i8> %vec, i8 %val, i32 %idx727 store <2 x i8> %insert, ptr addrspace(1) null728 ret void729}730 731define amdgpu_ps void @insertelement_v_v2i8_v_v(ptr addrspace(1) %ptr, i8 %val, i32 %idx) {732; GFX9-LABEL: insertelement_v_v2i8_v_v:733; GFX9: ; %bb.0:734; GFX9-NEXT: global_load_ushort v0, v[0:1], off735; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 0, v3736; GFX9-NEXT: s_waitcnt vmcnt(0)737; GFX9-NEXT: v_lshrrev_b32_e32 v1, 8, v0738; GFX9-NEXT: v_cndmask_b32_e32 v4, v0, v2, vcc739; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3740; GFX9-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc741; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v0742; GFX9-NEXT: v_lshlrev_b16_e32 v2, 8, v0743; GFX9-NEXT: v_mov_b32_e32 v0, 0744; GFX9-NEXT: v_mov_b32_e32 v1, 0745; GFX9-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD746; GFX9-NEXT: global_store_short v[0:1], v2, off747; GFX9-NEXT: s_endpgm748;749; GFX8-LABEL: insertelement_v_v2i8_v_v:750; GFX8: ; %bb.0:751; GFX8-NEXT: flat_load_ushort v0, v[0:1]752; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 0, v3753; GFX8-NEXT: s_waitcnt vmcnt(0)754; GFX8-NEXT: v_lshrrev_b32_e32 v1, 8, v0755; GFX8-NEXT: v_cndmask_b32_e32 v4, v0, v2, vcc756; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3757; GFX8-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc758; GFX8-NEXT: v_and_b32_e32 v0, 0xff, v0759; GFX8-NEXT: v_lshlrev_b16_e32 v2, 8, v0760; GFX8-NEXT: v_mov_b32_e32 v0, 0761; GFX8-NEXT: v_mov_b32_e32 v1, 0762; GFX8-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD763; GFX8-NEXT: flat_store_short v[0:1], v2764; GFX8-NEXT: s_endpgm765;766; GFX7-LABEL: insertelement_v_v2i8_v_v:767; GFX7: ; %bb.0:768; GFX7-NEXT: s_mov_b32 s2, 0769; GFX7-NEXT: s_mov_b32 s3, 0xf000770; GFX7-NEXT: s_mov_b64 s[0:1], 0771; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[0:3], 0 addr64772; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 0, v3773; GFX7-NEXT: s_mov_b64 s[0:1], 0774; GFX7-NEXT: s_mov_b32 s2, -1775; GFX7-NEXT: s_waitcnt vmcnt(0)776; GFX7-NEXT: v_lshrrev_b32_e32 v1, 8, v0777; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc778; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3779; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc780; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v1781; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v0782; GFX7-NEXT: v_lshlrev_b32_e32 v1, 8, v1783; GFX7-NEXT: v_or_b32_e32 v0, v0, v1784; GFX7-NEXT: buffer_store_short v0, off, s[0:3], 0785; GFX7-NEXT: s_endpgm786;787; GFX10-LABEL: insertelement_v_v2i8_v_v:788; GFX10: ; %bb.0:789; GFX10-NEXT: global_load_ushort v0, v[0:1], off790; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v3791; GFX10-NEXT: v_mov_b32_e32 v4, 0xff792; GFX10-NEXT: s_waitcnt vmcnt(0)793; GFX10-NEXT: v_lshrrev_b32_e32 v1, 8, v0794; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc_lo795; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v3796; GFX10-NEXT: v_and_b32_sdwa v3, v1, v4 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD797; GFX10-NEXT: v_cndmask_b32_e32 v2, v0, v2, vcc_lo798; GFX10-NEXT: v_mov_b32_e32 v0, 0799; GFX10-NEXT: v_mov_b32_e32 v1, 0800; GFX10-NEXT: v_or_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD801; GFX10-NEXT: global_store_short v[0:1], v2, off802; GFX10-NEXT: s_endpgm803;804; GFX11-LABEL: insertelement_v_v2i8_v_v:805; GFX11: ; %bb.0:806; GFX11-NEXT: global_load_u16 v0, v[0:1], off807; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v3808; GFX11-NEXT: s_waitcnt vmcnt(0)809; GFX11-NEXT: v_lshrrev_b32_e32 v1, 8, v0810; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)811; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc_lo812; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v3813; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo814; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v0815; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)816; GFX11-NEXT: v_and_b32_e32 v1, 0xff, v1817; GFX11-NEXT: v_lshlrev_b16 v3, 8, v1818; GFX11-NEXT: v_mov_b32_e32 v0, 0819; GFX11-NEXT: v_mov_b32_e32 v1, 0820; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)821; GFX11-NEXT: v_or_b32_e32 v2, v2, v3822; GFX11-NEXT: global_store_b16 v[0:1], v2, off823; GFX11-NEXT: s_endpgm824 %vec = load <2 x i8>, ptr addrspace(1) %ptr825 %insert = insertelement <2 x i8> %vec, i8 %val, i32 %idx826 store <2 x i8> %insert, ptr addrspace(1) null827 ret void828}829 830; FIXME: 3 element load/store legalization831; define amdgpu_ps void @insertelement_s_v3i8_s_s(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 inreg %idx) {832; %vec = load <3 x i8>, ptr addrspace(4) %ptr833; %insert = insertelement <3 x i8> %vec, i8 %val, i32 %idx834; store <3 x i8> %insert, ptr addrspace(1) null835; ret void836; }837 838; define amdgpu_ps void @insertelement_v_v3i8_s_s(ptr addrspace(1) %ptr, i8 inreg %val, i32 inreg %idx) {839; %vec = load <3 x i8>, ptr addrspace(1 ) %ptr840; %insert = insertelement <3 x i8> %vec, i8 %val, i32 %idx841; store <3 x i8> %insert, ptr addrspace(1) null842; ret void843; }844 845; define amdgpu_ps void @insertelement_s_v3i8_v_s(ptr addrspace(4) inreg %ptr, i8 %val, i32 inreg %idx) {846; %vec = load <3 x i8>, ptr addrspace(4) %ptr847; %insert = insertelement <3 x i8> %vec, i8 %val, i32 %idx848; store <3 x i8> %insert, ptr addrspace(1) null849; ret void850; }851 852; define amdgpu_ps void @insertelement_s_v3i8_s_v(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 %idx) {853; %vec = load <3 x i8>, ptr addrspace(4) %ptr854; %insert = insertelement <3 x i8> %vec, i8 %val, i32 %idx855; store <3 x i8> %insert, ptr addrspace(1) null856; ret void857; }858 859; define amdgpu_ps void @insertelement_s_v3i8_v_v(ptr addrspace(4) inreg %ptr, i8 %val, i32 %idx) {860; %vec = load <3 x i8>, ptr addrspace(4) %ptr861; %insert = insertelement <3 x i8> %vec, i8 %val, i32 %idx862; store <3 x i8> %insert, ptr addrspace(1) null863; ret void864; }865 866; define amdgpu_ps void @insertelement_v_v3i8_s_v(ptr addrspace(1) %ptr, i8 inreg %val, i32 %idx) {867; %vec = load <3 x i8>, ptr addrspace(1) %ptr868; %insert = insertelement <3 x i8> %vec, i8 %val, i32 %idx869; store <3 x i8> %insert, ptr addrspace(1) null870; ret void871; }872 873; define amdgpu_ps void @insertelement_v_v3i8_v_s(ptr addrspace(1) %ptr, i8 %val, i32 inreg %idx) {874; %vec = load <3 x i8>, ptr addrspace(1) %ptr875; %insert = insertelement <3 x i8> %vec, i8 %val, i32 %idx876; store <3 x i8> %insert, ptr addrspace(1) null877; ret void878; }879 880; define amdgpu_ps void @insertelement_v_v3i8_v_v(ptr addrspace(1) %ptr, i8 %val, i32 %idx) {881; %vec = load <3 x i8>, ptr addrspace(1) %ptr882; %insert = insertelement <3 x i8> %vec, i8 %val, i32 %idx883; store <3 x i8> %insert, ptr addrspace(1) null884; ret void885; }886 887define amdgpu_ps void @insertelement_v_v4i8_s_s(ptr addrspace(1) %ptr, i8 inreg %val, i32 inreg %idx) {888; GFX9-LABEL: insertelement_v_v4i8_s_s:889; GFX9: ; %bb.0:890; GFX9-NEXT: global_load_dword v2, v[0:1], off891; GFX9-NEXT: s_and_b32 s0, s3, 3892; GFX9-NEXT: s_lshl_b32 s0, s0, 3893; GFX9-NEXT: s_and_b32 s1, s2, 0xff894; GFX9-NEXT: s_lshl_b32 s1, s1, s0895; GFX9-NEXT: s_lshl_b32 s0, 0xff, s0896; GFX9-NEXT: s_not_b32 s0, s0897; GFX9-NEXT: v_mov_b32_e32 v3, s1898; GFX9-NEXT: v_mov_b32_e32 v0, 0899; GFX9-NEXT: v_mov_b32_e32 v1, 0900; GFX9-NEXT: s_waitcnt vmcnt(0)901; GFX9-NEXT: v_and_or_b32 v2, v2, s0, v3902; GFX9-NEXT: global_store_dword v[0:1], v2, off903; GFX9-NEXT: s_endpgm904;905; GFX8-LABEL: insertelement_v_v4i8_s_s:906; GFX8: ; %bb.0:907; GFX8-NEXT: flat_load_dword v0, v[0:1]908; GFX8-NEXT: s_and_b32 s0, s3, 3909; GFX8-NEXT: s_and_b32 s1, s2, 0xff910; GFX8-NEXT: s_lshl_b32 s0, s0, 3911; GFX8-NEXT: s_lshl_b32 s1, s1, s0912; GFX8-NEXT: s_lshl_b32 s0, 0xff, s0913; GFX8-NEXT: s_waitcnt vmcnt(0)914; GFX8-NEXT: v_bfi_b32 v2, s0, 0, v0915; GFX8-NEXT: v_mov_b32_e32 v0, 0916; GFX8-NEXT: v_mov_b32_e32 v1, 0917; GFX8-NEXT: v_or_b32_e32 v2, s1, v2918; GFX8-NEXT: flat_store_dword v[0:1], v2919; GFX8-NEXT: s_endpgm920;921; GFX7-LABEL: insertelement_v_v4i8_s_s:922; GFX7: ; %bb.0:923; GFX7-NEXT: s_mov_b32 s6, 0924; GFX7-NEXT: s_mov_b32 s7, 0xf000925; GFX7-NEXT: s_mov_b64 s[4:5], 0926; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64927; GFX7-NEXT: s_and_b32 s0, s3, 3928; GFX7-NEXT: s_and_b32 s1, s2, 0xff929; GFX7-NEXT: s_lshl_b32 s0, s0, 3930; GFX7-NEXT: s_lshl_b32 s1, s1, s0931; GFX7-NEXT: s_lshl_b32 s0, 0xff, s0932; GFX7-NEXT: s_mov_b64 s[4:5], 0933; GFX7-NEXT: s_mov_b32 s6, -1934; GFX7-NEXT: s_waitcnt vmcnt(0)935; GFX7-NEXT: v_bfi_b32 v0, s0, 0, v0936; GFX7-NEXT: v_or_b32_e32 v0, s1, v0937; GFX7-NEXT: buffer_store_dword v0, off, s[4:7], 0938; GFX7-NEXT: s_endpgm939;940; GFX10-LABEL: insertelement_v_v4i8_s_s:941; GFX10: ; %bb.0:942; GFX10-NEXT: global_load_dword v2, v[0:1], off943; GFX10-NEXT: s_and_b32 s0, s3, 3944; GFX10-NEXT: s_and_b32 s1, s2, 0xff945; GFX10-NEXT: s_lshl_b32 s0, s0, 3946; GFX10-NEXT: v_mov_b32_e32 v0, 0947; GFX10-NEXT: s_lshl_b32 s2, 0xff, s0948; GFX10-NEXT: s_lshl_b32 s0, s1, s0949; GFX10-NEXT: s_not_b32 s1, s2950; GFX10-NEXT: v_mov_b32_e32 v1, 0951; GFX10-NEXT: s_waitcnt vmcnt(0)952; GFX10-NEXT: v_and_or_b32 v2, v2, s1, s0953; GFX10-NEXT: global_store_dword v[0:1], v2, off954; GFX10-NEXT: s_endpgm955;956; GFX11-LABEL: insertelement_v_v4i8_s_s:957; GFX11: ; %bb.0:958; GFX11-NEXT: global_load_b32 v2, v[0:1], off959; GFX11-NEXT: s_and_b32 s0, s3, 3960; GFX11-NEXT: s_and_b32 s1, s2, 0xff961; GFX11-NEXT: s_lshl_b32 s0, s0, 3962; GFX11-NEXT: v_mov_b32_e32 v0, 0963; GFX11-NEXT: s_lshl_b32 s2, 0xff, s0964; GFX11-NEXT: s_lshl_b32 s0, s1, s0965; GFX11-NEXT: s_not_b32 s1, s2966; GFX11-NEXT: v_mov_b32_e32 v1, 0967; GFX11-NEXT: s_waitcnt vmcnt(0)968; GFX11-NEXT: v_and_or_b32 v2, v2, s1, s0969; GFX11-NEXT: global_store_b32 v[0:1], v2, off970; GFX11-NEXT: s_endpgm971 %vec = load <4 x i8>, ptr addrspace(1 ) %ptr972 %insert = insertelement <4 x i8> %vec, i8 %val, i32 %idx973 store <4 x i8> %insert, ptr addrspace(1) null974 ret void975}976 977define amdgpu_ps void @insertelement_s_v4i8_v_s(ptr addrspace(4) inreg %ptr, i8 %val, i32 inreg %idx) {978; GFX9-LABEL: insertelement_s_v4i8_v_s:979; GFX9: ; %bb.0:980; GFX9-NEXT: s_load_dword s0, s[2:3], 0x0981; GFX9-NEXT: s_and_b32 s1, s4, 3982; GFX9-NEXT: s_lshl_b32 s1, s1, 3983; GFX9-NEXT: s_lshl_b32 s2, 0xff, s1984; GFX9-NEXT: v_and_b32_e32 v2, 0xff, v0985; GFX9-NEXT: s_waitcnt lgkmcnt(0)986; GFX9-NEXT: s_andn2_b32 s0, s0, s2987; GFX9-NEXT: v_mov_b32_e32 v3, s0988; GFX9-NEXT: v_mov_b32_e32 v0, 0989; GFX9-NEXT: v_mov_b32_e32 v1, 0990; GFX9-NEXT: v_lshl_or_b32 v2, v2, s1, v3991; GFX9-NEXT: global_store_dword v[0:1], v2, off992; GFX9-NEXT: s_endpgm993;994; GFX8-LABEL: insertelement_s_v4i8_v_s:995; GFX8: ; %bb.0:996; GFX8-NEXT: s_load_dword s0, s[2:3], 0x0997; GFX8-NEXT: s_and_b32 s1, s4, 3998; GFX8-NEXT: s_lshl_b32 s1, s1, 3999; GFX8-NEXT: v_mov_b32_e32 v1, s11000; GFX8-NEXT: s_lshl_b32 s1, 0xff, s11001; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01002; GFX8-NEXT: s_waitcnt lgkmcnt(0)1003; GFX8-NEXT: s_andn2_b32 s0, s0, s11004; GFX8-NEXT: v_mov_b32_e32 v0, 01005; GFX8-NEXT: v_mov_b32_e32 v1, 01006; GFX8-NEXT: v_or_b32_e32 v2, s0, v21007; GFX8-NEXT: flat_store_dword v[0:1], v21008; GFX8-NEXT: s_endpgm1009;1010; GFX7-LABEL: insertelement_s_v4i8_v_s:1011; GFX7: ; %bb.0:1012; GFX7-NEXT: s_load_dword s0, s[2:3], 0x01013; GFX7-NEXT: s_and_b32 s1, s4, 31014; GFX7-NEXT: s_lshl_b32 s1, s1, 31015; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v01016; GFX7-NEXT: v_lshlrev_b32_e32 v0, s1, v01017; GFX7-NEXT: s_lshl_b32 s1, 0xff, s11018; GFX7-NEXT: s_waitcnt lgkmcnt(0)1019; GFX7-NEXT: s_andn2_b32 s0, s0, s11020; GFX7-NEXT: v_or_b32_e32 v0, s0, v01021; GFX7-NEXT: s_mov_b64 s[0:1], 01022; GFX7-NEXT: s_mov_b32 s2, -11023; GFX7-NEXT: s_mov_b32 s3, 0xf0001024; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 01025; GFX7-NEXT: s_endpgm1026;1027; GFX10-LABEL: insertelement_s_v4i8_v_s:1028; GFX10: ; %bb.0:1029; GFX10-NEXT: s_load_dword s0, s[2:3], 0x01030; GFX10-NEXT: s_and_b32 s1, s4, 31031; GFX10-NEXT: v_and_b32_e32 v2, 0xff, v01032; GFX10-NEXT: s_lshl_b32 s1, s1, 31033; GFX10-NEXT: v_mov_b32_e32 v0, 01034; GFX10-NEXT: s_lshl_b32 s2, 0xff, s11035; GFX10-NEXT: v_mov_b32_e32 v1, 01036; GFX10-NEXT: s_waitcnt lgkmcnt(0)1037; GFX10-NEXT: s_andn2_b32 s0, s0, s21038; GFX10-NEXT: v_lshl_or_b32 v2, v2, s1, s01039; GFX10-NEXT: global_store_dword v[0:1], v2, off1040; GFX10-NEXT: s_endpgm1041;1042; GFX11-LABEL: insertelement_s_v4i8_v_s:1043; GFX11: ; %bb.0:1044; GFX11-NEXT: s_load_b32 s0, s[2:3], 0x01045; GFX11-NEXT: s_and_b32 s1, s4, 31046; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v01047; GFX11-NEXT: s_lshl_b32 s1, s1, 31048; GFX11-NEXT: v_mov_b32_e32 v0, 01049; GFX11-NEXT: s_lshl_b32 s2, 0xff, s11050; GFX11-NEXT: v_mov_b32_e32 v1, 01051; GFX11-NEXT: s_waitcnt lgkmcnt(0)1052; GFX11-NEXT: s_and_not1_b32 s0, s0, s21053; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1054; GFX11-NEXT: v_lshl_or_b32 v2, v2, s1, s01055; GFX11-NEXT: global_store_b32 v[0:1], v2, off1056; GFX11-NEXT: s_endpgm1057 %vec = load <4 x i8>, ptr addrspace(4) %ptr1058 %insert = insertelement <4 x i8> %vec, i8 %val, i32 %idx1059 store <4 x i8> %insert, ptr addrspace(1) null1060 ret void1061}1062 1063define amdgpu_ps void @insertelement_s_v4i8_s_v(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 %idx) {1064; GFX9-LABEL: insertelement_s_v4i8_s_v:1065; GFX9: ; %bb.0:1066; GFX9-NEXT: s_load_dword s0, s[2:3], 0x01067; GFX9-NEXT: v_and_b32_e32 v0, 3, v01068; GFX9-NEXT: v_lshlrev_b32_e32 v0, 3, v01069; GFX9-NEXT: s_and_b32 s1, s4, 0xff1070; GFX9-NEXT: v_mov_b32_e32 v1, 0xff1071; GFX9-NEXT: v_lshlrev_b32_e64 v2, v0, s11072; GFX9-NEXT: v_lshlrev_b32_e32 v0, v0, v11073; GFX9-NEXT: v_not_b32_e32 v3, v01074; GFX9-NEXT: v_mov_b32_e32 v0, 01075; GFX9-NEXT: v_mov_b32_e32 v1, 01076; GFX9-NEXT: s_waitcnt lgkmcnt(0)1077; GFX9-NEXT: v_and_or_b32 v2, s0, v3, v21078; GFX9-NEXT: global_store_dword v[0:1], v2, off1079; GFX9-NEXT: s_endpgm1080;1081; GFX8-LABEL: insertelement_s_v4i8_s_v:1082; GFX8: ; %bb.0:1083; GFX8-NEXT: s_load_dword s0, s[2:3], 0x01084; GFX8-NEXT: v_and_b32_e32 v0, 3, v01085; GFX8-NEXT: v_lshlrev_b32_e32 v0, 3, v01086; GFX8-NEXT: s_and_b32 s1, s4, 0xff1087; GFX8-NEXT: v_mov_b32_e32 v1, 0xff1088; GFX8-NEXT: v_lshlrev_b32_e64 v2, v0, s11089; GFX8-NEXT: v_lshlrev_b32_e32 v0, v0, v11090; GFX8-NEXT: s_waitcnt lgkmcnt(0)1091; GFX8-NEXT: v_bfi_b32 v3, v0, 0, s01092; GFX8-NEXT: v_mov_b32_e32 v0, 01093; GFX8-NEXT: v_mov_b32_e32 v1, 01094; GFX8-NEXT: v_or_b32_e32 v2, v3, v21095; GFX8-NEXT: flat_store_dword v[0:1], v21096; GFX8-NEXT: s_endpgm1097;1098; GFX7-LABEL: insertelement_s_v4i8_s_v:1099; GFX7: ; %bb.0:1100; GFX7-NEXT: s_load_dword s0, s[2:3], 0x01101; GFX7-NEXT: v_and_b32_e32 v0, 3, v01102; GFX7-NEXT: v_lshlrev_b32_e32 v0, 3, v01103; GFX7-NEXT: s_and_b32 s1, s4, 0xff1104; GFX7-NEXT: v_lshl_b32_e32 v1, s1, v01105; GFX7-NEXT: v_lshl_b32_e32 v0, 0xff, v01106; GFX7-NEXT: s_waitcnt lgkmcnt(0)1107; GFX7-NEXT: v_bfi_b32 v0, v0, 0, s01108; GFX7-NEXT: v_or_b32_e32 v0, v0, v11109; GFX7-NEXT: s_mov_b64 s[0:1], 01110; GFX7-NEXT: s_mov_b32 s2, -11111; GFX7-NEXT: s_mov_b32 s3, 0xf0001112; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 01113; GFX7-NEXT: s_endpgm1114;1115; GFX10-LABEL: insertelement_s_v4i8_s_v:1116; GFX10: ; %bb.0:1117; GFX10-NEXT: s_load_dword s0, s[2:3], 0x01118; GFX10-NEXT: v_and_b32_e32 v0, 3, v01119; GFX10-NEXT: s_and_b32 s1, s4, 0xff1120; GFX10-NEXT: v_lshlrev_b32_e32 v0, 3, v01121; GFX10-NEXT: v_lshlrev_b32_e64 v1, v0, 0xff1122; GFX10-NEXT: v_lshlrev_b32_e64 v2, v0, s11123; GFX10-NEXT: v_not_b32_e32 v3, v11124; GFX10-NEXT: v_mov_b32_e32 v0, 01125; GFX10-NEXT: v_mov_b32_e32 v1, 01126; GFX10-NEXT: s_waitcnt lgkmcnt(0)1127; GFX10-NEXT: v_and_or_b32 v2, s0, v3, v21128; GFX10-NEXT: global_store_dword v[0:1], v2, off1129; GFX10-NEXT: s_endpgm1130;1131; GFX11-LABEL: insertelement_s_v4i8_s_v:1132; GFX11: ; %bb.0:1133; GFX11-NEXT: s_load_b32 s0, s[2:3], 0x01134; GFX11-NEXT: v_and_b32_e32 v0, 3, v01135; GFX11-NEXT: s_and_b32 s1, s4, 0xff1136; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1137; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v01138; GFX11-NEXT: v_lshlrev_b32_e64 v1, v0, 0xff1139; GFX11-NEXT: v_lshlrev_b32_e64 v2, v0, s11140; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)1141; GFX11-NEXT: v_not_b32_e32 v3, v11142; GFX11-NEXT: v_mov_b32_e32 v0, 01143; GFX11-NEXT: v_mov_b32_e32 v1, 01144; GFX11-NEXT: s_waitcnt lgkmcnt(0)1145; GFX11-NEXT: v_and_or_b32 v2, s0, v3, v21146; GFX11-NEXT: global_store_b32 v[0:1], v2, off1147; GFX11-NEXT: s_endpgm1148 %vec = load <4 x i8>, ptr addrspace(4) %ptr1149 %insert = insertelement <4 x i8> %vec, i8 %val, i32 %idx1150 store <4 x i8> %insert, ptr addrspace(1) null1151 ret void1152}1153 1154define amdgpu_ps void @insertelement_s_v4i8_v_v(ptr addrspace(4) inreg %ptr, i8 %val, i32 %idx) {1155; GFX9-LABEL: insertelement_s_v4i8_v_v:1156; GFX9: ; %bb.0:1157; GFX9-NEXT: s_load_dword s0, s[2:3], 0x01158; GFX9-NEXT: v_and_b32_e32 v1, 3, v11159; GFX9-NEXT: v_lshlrev_b32_e32 v1, 3, v11160; GFX9-NEXT: v_mov_b32_e32 v2, 0xff1161; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01162; GFX9-NEXT: v_lshlrev_b32_e32 v0, v1, v21163; GFX9-NEXT: v_not_b32_e32 v2, v01164; GFX9-NEXT: v_mov_b32_e32 v0, 01165; GFX9-NEXT: v_mov_b32_e32 v1, 01166; GFX9-NEXT: s_waitcnt lgkmcnt(0)1167; GFX9-NEXT: v_and_or_b32 v2, s0, v2, v31168; GFX9-NEXT: global_store_dword v[0:1], v2, off1169; GFX9-NEXT: s_endpgm1170;1171; GFX8-LABEL: insertelement_s_v4i8_v_v:1172; GFX8: ; %bb.0:1173; GFX8-NEXT: s_load_dword s0, s[2:3], 0x01174; GFX8-NEXT: v_and_b32_e32 v1, 3, v11175; GFX8-NEXT: v_lshlrev_b32_e32 v1, 3, v11176; GFX8-NEXT: v_mov_b32_e32 v2, 0xff1177; GFX8-NEXT: v_lshlrev_b32_sdwa v3, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01178; GFX8-NEXT: v_lshlrev_b32_e32 v0, v1, v21179; GFX8-NEXT: s_waitcnt lgkmcnt(0)1180; GFX8-NEXT: v_bfi_b32 v2, v0, 0, s01181; GFX8-NEXT: v_mov_b32_e32 v0, 01182; GFX8-NEXT: v_mov_b32_e32 v1, 01183; GFX8-NEXT: v_or_b32_e32 v2, v2, v31184; GFX8-NEXT: flat_store_dword v[0:1], v21185; GFX8-NEXT: s_endpgm1186;1187; GFX7-LABEL: insertelement_s_v4i8_v_v:1188; GFX7: ; %bb.0:1189; GFX7-NEXT: s_load_dword s0, s[2:3], 0x01190; GFX7-NEXT: v_and_b32_e32 v1, 3, v11191; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v11192; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v01193; GFX7-NEXT: v_lshlrev_b32_e32 v0, v1, v01194; GFX7-NEXT: v_lshl_b32_e32 v1, 0xff, v11195; GFX7-NEXT: s_waitcnt lgkmcnt(0)1196; GFX7-NEXT: v_bfi_b32 v1, v1, 0, s01197; GFX7-NEXT: v_or_b32_e32 v0, v1, v01198; GFX7-NEXT: s_mov_b64 s[0:1], 01199; GFX7-NEXT: s_mov_b32 s2, -11200; GFX7-NEXT: s_mov_b32 s3, 0xf0001201; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 01202; GFX7-NEXT: s_endpgm1203;1204; GFX10-LABEL: insertelement_s_v4i8_v_v:1205; GFX10: ; %bb.0:1206; GFX10-NEXT: s_load_dword s0, s[2:3], 0x01207; GFX10-NEXT: v_and_b32_e32 v1, 3, v11208; GFX10-NEXT: v_lshlrev_b32_e32 v1, 3, v11209; GFX10-NEXT: v_lshlrev_b32_e64 v2, v1, 0xff1210; GFX10-NEXT: v_lshlrev_b32_sdwa v3, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01211; GFX10-NEXT: v_mov_b32_e32 v0, 01212; GFX10-NEXT: v_mov_b32_e32 v1, 01213; GFX10-NEXT: v_not_b32_e32 v2, v21214; GFX10-NEXT: s_waitcnt lgkmcnt(0)1215; GFX10-NEXT: v_and_or_b32 v2, s0, v2, v31216; GFX10-NEXT: global_store_dword v[0:1], v2, off1217; GFX10-NEXT: s_endpgm1218;1219; GFX11-LABEL: insertelement_s_v4i8_v_v:1220; GFX11: ; %bb.0:1221; GFX11-NEXT: s_load_b32 s0, s[2:3], 0x01222; GFX11-NEXT: v_and_b32_e32 v1, 3, v11223; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v01224; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1225; GFX11-NEXT: v_lshlrev_b32_e32 v1, 3, v11226; GFX11-NEXT: v_lshlrev_b32_e64 v2, v1, 0xff1227; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)1228; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_lshlrev_b32 v3, v1, v01229; GFX11-NEXT: v_mov_b32_e32 v1, 01230; GFX11-NEXT: v_not_b32_e32 v2, v21231; GFX11-NEXT: s_waitcnt lgkmcnt(0)1232; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1233; GFX11-NEXT: v_and_or_b32 v2, s0, v2, v31234; GFX11-NEXT: global_store_b32 v[0:1], v2, off1235; GFX11-NEXT: s_endpgm1236 %vec = load <4 x i8>, ptr addrspace(4) %ptr1237 %insert = insertelement <4 x i8> %vec, i8 %val, i32 %idx1238 store <4 x i8> %insert, ptr addrspace(1) null1239 ret void1240}1241 1242define amdgpu_ps void @insertelement_v_v4i8_s_v(ptr addrspace(1) %ptr, i8 inreg %val, i32 %idx) {1243; GFX9-LABEL: insertelement_v_v4i8_s_v:1244; GFX9: ; %bb.0:1245; GFX9-NEXT: global_load_dword v3, v[0:1], off1246; GFX9-NEXT: v_and_b32_e32 v0, 3, v21247; GFX9-NEXT: v_lshlrev_b32_e32 v0, 3, v01248; GFX9-NEXT: s_and_b32 s0, s2, 0xff1249; GFX9-NEXT: v_mov_b32_e32 v1, 0xff1250; GFX9-NEXT: v_lshlrev_b32_e64 v2, v0, s01251; GFX9-NEXT: v_lshlrev_b32_e32 v0, v0, v11252; GFX9-NEXT: v_not_b32_e32 v4, v01253; GFX9-NEXT: v_mov_b32_e32 v0, 01254; GFX9-NEXT: v_mov_b32_e32 v1, 01255; GFX9-NEXT: s_waitcnt vmcnt(0)1256; GFX9-NEXT: v_and_or_b32 v2, v3, v4, v21257; GFX9-NEXT: global_store_dword v[0:1], v2, off1258; GFX9-NEXT: s_endpgm1259;1260; GFX8-LABEL: insertelement_v_v4i8_s_v:1261; GFX8: ; %bb.0:1262; GFX8-NEXT: flat_load_dword v0, v[0:1]1263; GFX8-NEXT: v_and_b32_e32 v2, 3, v21264; GFX8-NEXT: v_mov_b32_e32 v1, 0xff1265; GFX8-NEXT: v_lshlrev_b32_e32 v2, 3, v21266; GFX8-NEXT: s_and_b32 s0, s2, 0xff1267; GFX8-NEXT: v_lshlrev_b32_e32 v1, v2, v11268; GFX8-NEXT: v_lshlrev_b32_e64 v3, v2, s01269; GFX8-NEXT: s_waitcnt vmcnt(0)1270; GFX8-NEXT: v_bfi_b32 v2, v1, 0, v01271; GFX8-NEXT: v_mov_b32_e32 v0, 01272; GFX8-NEXT: v_mov_b32_e32 v1, 01273; GFX8-NEXT: v_or_b32_e32 v2, v2, v31274; GFX8-NEXT: flat_store_dword v[0:1], v21275; GFX8-NEXT: s_endpgm1276;1277; GFX7-LABEL: insertelement_v_v4i8_s_v:1278; GFX7: ; %bb.0:1279; GFX7-NEXT: s_mov_b32 s6, 01280; GFX7-NEXT: s_mov_b32 s7, 0xf0001281; GFX7-NEXT: s_mov_b64 s[4:5], 01282; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr641283; GFX7-NEXT: v_and_b32_e32 v1, 3, v21284; GFX7-NEXT: s_and_b32 s0, s2, 0xff1285; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v11286; GFX7-NEXT: v_lshl_b32_e32 v2, s0, v11287; GFX7-NEXT: v_lshl_b32_e32 v1, 0xff, v11288; GFX7-NEXT: s_mov_b64 s[4:5], 01289; GFX7-NEXT: s_mov_b32 s6, -11290; GFX7-NEXT: s_waitcnt vmcnt(0)1291; GFX7-NEXT: v_bfi_b32 v0, v1, 0, v01292; GFX7-NEXT: v_or_b32_e32 v0, v0, v21293; GFX7-NEXT: buffer_store_dword v0, off, s[4:7], 01294; GFX7-NEXT: s_endpgm1295;1296; GFX10-LABEL: insertelement_v_v4i8_s_v:1297; GFX10: ; %bb.0:1298; GFX10-NEXT: global_load_dword v3, v[0:1], off1299; GFX10-NEXT: v_and_b32_e32 v0, 3, v21300; GFX10-NEXT: s_and_b32 s0, s2, 0xff1301; GFX10-NEXT: v_lshlrev_b32_e32 v0, 3, v01302; GFX10-NEXT: v_lshlrev_b32_e64 v1, v0, 0xff1303; GFX10-NEXT: v_lshlrev_b32_e64 v2, v0, s01304; GFX10-NEXT: v_not_b32_e32 v4, v11305; GFX10-NEXT: v_mov_b32_e32 v0, 01306; GFX10-NEXT: v_mov_b32_e32 v1, 01307; GFX10-NEXT: s_waitcnt vmcnt(0)1308; GFX10-NEXT: v_and_or_b32 v2, v3, v4, v21309; GFX10-NEXT: global_store_dword v[0:1], v2, off1310; GFX10-NEXT: s_endpgm1311;1312; GFX11-LABEL: insertelement_v_v4i8_s_v:1313; GFX11: ; %bb.0:1314; GFX11-NEXT: global_load_b32 v3, v[0:1], off1315; GFX11-NEXT: v_and_b32_e32 v0, 3, v21316; GFX11-NEXT: s_and_b32 s0, s2, 0xff1317; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1318; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v01319; GFX11-NEXT: v_lshlrev_b32_e64 v1, v0, 0xff1320; GFX11-NEXT: v_lshlrev_b32_e64 v2, v0, s01321; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)1322; GFX11-NEXT: v_not_b32_e32 v4, v11323; GFX11-NEXT: v_mov_b32_e32 v0, 01324; GFX11-NEXT: v_mov_b32_e32 v1, 01325; GFX11-NEXT: s_waitcnt vmcnt(0)1326; GFX11-NEXT: v_and_or_b32 v2, v3, v4, v21327; GFX11-NEXT: global_store_b32 v[0:1], v2, off1328; GFX11-NEXT: s_endpgm1329 %vec = load <4 x i8>, ptr addrspace(1) %ptr1330 %insert = insertelement <4 x i8> %vec, i8 %val, i32 %idx1331 store <4 x i8> %insert, ptr addrspace(1) null1332 ret void1333}1334 1335define amdgpu_ps void @insertelement_v_v4i8_v_s(ptr addrspace(1) %ptr, i8 %val, i32 inreg %idx) {1336; GFX9-LABEL: insertelement_v_v4i8_v_s:1337; GFX9: ; %bb.0:1338; GFX9-NEXT: global_load_dword v3, v[0:1], off1339; GFX9-NEXT: s_and_b32 s0, s2, 31340; GFX9-NEXT: s_lshl_b32 s0, s0, 31341; GFX9-NEXT: v_lshlrev_b32_sdwa v2, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01342; GFX9-NEXT: s_lshl_b32 s0, 0xff, s01343; GFX9-NEXT: s_not_b32 s0, s01344; GFX9-NEXT: v_mov_b32_e32 v0, 01345; GFX9-NEXT: v_mov_b32_e32 v1, 01346; GFX9-NEXT: s_waitcnt vmcnt(0)1347; GFX9-NEXT: v_and_or_b32 v2, v3, s0, v21348; GFX9-NEXT: global_store_dword v[0:1], v2, off1349; GFX9-NEXT: s_endpgm1350;1351; GFX8-LABEL: insertelement_v_v4i8_v_s:1352; GFX8: ; %bb.0:1353; GFX8-NEXT: flat_load_dword v0, v[0:1]1354; GFX8-NEXT: s_and_b32 s0, s2, 31355; GFX8-NEXT: s_lshl_b32 s0, s0, 31356; GFX8-NEXT: v_mov_b32_e32 v1, s01357; GFX8-NEXT: s_lshl_b32 s0, 0xff, s01358; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01359; GFX8-NEXT: s_waitcnt vmcnt(0)1360; GFX8-NEXT: v_bfi_b32 v3, s0, 0, v01361; GFX8-NEXT: v_mov_b32_e32 v0, 01362; GFX8-NEXT: v_mov_b32_e32 v1, 01363; GFX8-NEXT: v_or_b32_e32 v2, v3, v21364; GFX8-NEXT: flat_store_dword v[0:1], v21365; GFX8-NEXT: s_endpgm1366;1367; GFX7-LABEL: insertelement_v_v4i8_v_s:1368; GFX7: ; %bb.0:1369; GFX7-NEXT: s_mov_b32 s6, 01370; GFX7-NEXT: s_mov_b32 s7, 0xf0001371; GFX7-NEXT: s_mov_b64 s[4:5], 01372; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr641373; GFX7-NEXT: s_and_b32 s0, s2, 31374; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v21375; GFX7-NEXT: s_lshl_b32 s0, s0, 31376; GFX7-NEXT: v_lshlrev_b32_e32 v1, s0, v11377; GFX7-NEXT: s_lshl_b32 s0, 0xff, s01378; GFX7-NEXT: s_mov_b64 s[4:5], 01379; GFX7-NEXT: s_mov_b32 s6, -11380; GFX7-NEXT: s_waitcnt vmcnt(0)1381; GFX7-NEXT: v_bfi_b32 v0, s0, 0, v01382; GFX7-NEXT: v_or_b32_e32 v0, v0, v11383; GFX7-NEXT: buffer_store_dword v0, off, s[4:7], 01384; GFX7-NEXT: s_endpgm1385;1386; GFX10-LABEL: insertelement_v_v4i8_v_s:1387; GFX10: ; %bb.0:1388; GFX10-NEXT: global_load_dword v3, v[0:1], off1389; GFX10-NEXT: s_and_b32 s0, s2, 31390; GFX10-NEXT: v_mov_b32_e32 v0, 01391; GFX10-NEXT: s_lshl_b32 s0, s0, 31392; GFX10-NEXT: v_mov_b32_e32 v1, 01393; GFX10-NEXT: v_lshlrev_b32_sdwa v2, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01394; GFX10-NEXT: s_lshl_b32 s0, 0xff, s01395; GFX10-NEXT: s_not_b32 s0, s01396; GFX10-NEXT: s_waitcnt vmcnt(0)1397; GFX10-NEXT: v_and_or_b32 v2, v3, s0, v21398; GFX10-NEXT: global_store_dword v[0:1], v2, off1399; GFX10-NEXT: s_endpgm1400;1401; GFX11-LABEL: insertelement_v_v4i8_v_s:1402; GFX11: ; %bb.0:1403; GFX11-NEXT: global_load_b32 v3, v[0:1], off1404; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v21405; GFX11-NEXT: s_and_b32 s0, s2, 31406; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1407; GFX11-NEXT: s_lshl_b32 s0, s0, 31408; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1409; GFX11-NEXT: v_lshlrev_b32_e32 v2, s0, v01410; GFX11-NEXT: s_lshl_b32 s0, 0xff, s01411; GFX11-NEXT: v_mov_b32_e32 v0, 01412; GFX11-NEXT: s_not_b32 s0, s01413; GFX11-NEXT: v_mov_b32_e32 v1, 01414; GFX11-NEXT: s_waitcnt vmcnt(0)1415; GFX11-NEXT: v_and_or_b32 v2, v3, s0, v21416; GFX11-NEXT: global_store_b32 v[0:1], v2, off1417; GFX11-NEXT: s_endpgm1418 %vec = load <4 x i8>, ptr addrspace(1) %ptr1419 %insert = insertelement <4 x i8> %vec, i8 %val, i32 %idx1420 store <4 x i8> %insert, ptr addrspace(1) null1421 ret void1422}1423 1424define amdgpu_ps void @insertelement_v_v4i8_v_v(ptr addrspace(1) %ptr, i8 %val, i32 %idx) {1425; GFX9-LABEL: insertelement_v_v4i8_v_v:1426; GFX9: ; %bb.0:1427; GFX9-NEXT: global_load_dword v4, v[0:1], off1428; GFX9-NEXT: v_and_b32_e32 v0, 3, v31429; GFX9-NEXT: v_lshlrev_b32_e32 v0, 3, v01430; GFX9-NEXT: v_mov_b32_e32 v1, 0xff1431; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01432; GFX9-NEXT: v_lshlrev_b32_e32 v0, v0, v11433; GFX9-NEXT: v_not_b32_e32 v3, v01434; GFX9-NEXT: v_mov_b32_e32 v0, 01435; GFX9-NEXT: v_mov_b32_e32 v1, 01436; GFX9-NEXT: s_waitcnt vmcnt(0)1437; GFX9-NEXT: v_and_or_b32 v2, v4, v3, v21438; GFX9-NEXT: global_store_dword v[0:1], v2, off1439; GFX9-NEXT: s_endpgm1440;1441; GFX8-LABEL: insertelement_v_v4i8_v_v:1442; GFX8: ; %bb.0:1443; GFX8-NEXT: flat_load_dword v0, v[0:1]1444; GFX8-NEXT: v_and_b32_e32 v3, 3, v31445; GFX8-NEXT: v_mov_b32_e32 v1, 0xff1446; GFX8-NEXT: v_lshlrev_b32_e32 v3, 3, v31447; GFX8-NEXT: v_lshlrev_b32_e32 v1, v3, v11448; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01449; GFX8-NEXT: s_waitcnt vmcnt(0)1450; GFX8-NEXT: v_bfi_b32 v3, v1, 0, v01451; GFX8-NEXT: v_mov_b32_e32 v0, 01452; GFX8-NEXT: v_mov_b32_e32 v1, 01453; GFX8-NEXT: v_or_b32_e32 v2, v3, v21454; GFX8-NEXT: flat_store_dword v[0:1], v21455; GFX8-NEXT: s_endpgm1456;1457; GFX7-LABEL: insertelement_v_v4i8_v_v:1458; GFX7: ; %bb.0:1459; GFX7-NEXT: s_mov_b32 s2, 01460; GFX7-NEXT: s_mov_b32 s3, 0xf0001461; GFX7-NEXT: s_mov_b64 s[0:1], 01462; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[0:3], 0 addr641463; GFX7-NEXT: v_and_b32_e32 v1, 3, v31464; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v21465; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v11466; GFX7-NEXT: v_lshlrev_b32_e32 v2, v1, v21467; GFX7-NEXT: v_lshl_b32_e32 v1, 0xff, v11468; GFX7-NEXT: s_mov_b64 s[0:1], 01469; GFX7-NEXT: s_mov_b32 s2, -11470; GFX7-NEXT: s_waitcnt vmcnt(0)1471; GFX7-NEXT: v_bfi_b32 v0, v1, 0, v01472; GFX7-NEXT: v_or_b32_e32 v0, v0, v21473; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 01474; GFX7-NEXT: s_endpgm1475;1476; GFX10-LABEL: insertelement_v_v4i8_v_v:1477; GFX10: ; %bb.0:1478; GFX10-NEXT: global_load_dword v4, v[0:1], off1479; GFX10-NEXT: v_and_b32_e32 v0, 3, v31480; GFX10-NEXT: v_lshlrev_b32_e32 v0, 3, v01481; GFX10-NEXT: v_lshlrev_b32_e64 v1, v0, 0xff1482; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01483; GFX10-NEXT: v_not_b32_e32 v3, v11484; GFX10-NEXT: v_mov_b32_e32 v0, 01485; GFX10-NEXT: v_mov_b32_e32 v1, 01486; GFX10-NEXT: s_waitcnt vmcnt(0)1487; GFX10-NEXT: v_and_or_b32 v2, v4, v3, v21488; GFX10-NEXT: global_store_dword v[0:1], v2, off1489; GFX10-NEXT: s_endpgm1490;1491; GFX11-LABEL: insertelement_v_v4i8_v_v:1492; GFX11: ; %bb.0:1493; GFX11-NEXT: global_load_b32 v4, v[0:1], off1494; GFX11-NEXT: v_and_b32_e32 v0, 3, v31495; GFX11-NEXT: v_and_b32_e32 v1, 0xff, v21496; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1497; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v01498; GFX11-NEXT: v_lshlrev_b32_e64 v2, v0, 0xff1499; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)1500; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_lshlrev_b32 v3, v0, v11501; GFX11-NEXT: v_mov_b32_e32 v1, 01502; GFX11-NEXT: v_not_b32_e32 v2, v21503; GFX11-NEXT: s_waitcnt vmcnt(0)1504; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1505; GFX11-NEXT: v_and_or_b32 v2, v4, v2, v31506; GFX11-NEXT: global_store_b32 v[0:1], v2, off1507; GFX11-NEXT: s_endpgm1508 %vec = load <4 x i8>, ptr addrspace(1) %ptr1509 %insert = insertelement <4 x i8> %vec, i8 %val, i32 %idx1510 store <4 x i8> %insert, ptr addrspace(1) null1511 ret void1512}1513 1514define amdgpu_ps void @insertelement_s_v8i8_s_s(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 inreg %idx) {1515; GFX9-LABEL: insertelement_s_v8i8_s_s:1516; GFX9: ; %bb.0:1517; GFX9-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01518; GFX9-NEXT: s_lshr_b32 s2, s5, 21519; GFX9-NEXT: s_cmp_eq_u32 s2, 11520; GFX9-NEXT: v_mov_b32_e32 v0, 01521; GFX9-NEXT: v_mov_b32_e32 v1, 01522; GFX9-NEXT: s_waitcnt lgkmcnt(0)1523; GFX9-NEXT: s_cselect_b32 s3, s1, s01524; GFX9-NEXT: s_and_b32 s5, s5, 31525; GFX9-NEXT: s_lshl_b32 s5, s5, 31526; GFX9-NEXT: s_and_b32 s4, s4, 0xff1527; GFX9-NEXT: s_lshl_b32 s4, s4, s51528; GFX9-NEXT: s_lshl_b32 s5, 0xff, s51529; GFX9-NEXT: s_andn2_b32 s3, s3, s51530; GFX9-NEXT: s_or_b32 s3, s3, s41531; GFX9-NEXT: s_cmp_eq_u32 s2, 01532; GFX9-NEXT: s_cselect_b32 s0, s3, s01533; GFX9-NEXT: s_cmp_eq_u32 s2, 11534; GFX9-NEXT: s_cselect_b32 s1, s3, s11535; GFX9-NEXT: v_mov_b32_e32 v3, s11536; GFX9-NEXT: v_mov_b32_e32 v2, s01537; GFX9-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1538; GFX9-NEXT: s_endpgm1539;1540; GFX8-LABEL: insertelement_s_v8i8_s_s:1541; GFX8: ; %bb.0:1542; GFX8-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01543; GFX8-NEXT: s_lshr_b32 s2, s5, 21544; GFX8-NEXT: s_cmp_eq_u32 s2, 11545; GFX8-NEXT: v_mov_b32_e32 v0, 01546; GFX8-NEXT: v_mov_b32_e32 v1, 01547; GFX8-NEXT: s_waitcnt lgkmcnt(0)1548; GFX8-NEXT: s_cselect_b32 s3, s1, s01549; GFX8-NEXT: s_and_b32 s5, s5, 31550; GFX8-NEXT: s_lshl_b32 s5, s5, 31551; GFX8-NEXT: s_and_b32 s4, s4, 0xff1552; GFX8-NEXT: s_lshl_b32 s4, s4, s51553; GFX8-NEXT: s_lshl_b32 s5, 0xff, s51554; GFX8-NEXT: s_andn2_b32 s3, s3, s51555; GFX8-NEXT: s_or_b32 s3, s3, s41556; GFX8-NEXT: s_cmp_eq_u32 s2, 01557; GFX8-NEXT: s_cselect_b32 s0, s3, s01558; GFX8-NEXT: s_cmp_eq_u32 s2, 11559; GFX8-NEXT: s_cselect_b32 s1, s3, s11560; GFX8-NEXT: v_mov_b32_e32 v3, s11561; GFX8-NEXT: v_mov_b32_e32 v2, s01562; GFX8-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1563; GFX8-NEXT: s_endpgm1564;1565; GFX7-LABEL: insertelement_s_v8i8_s_s:1566; GFX7: ; %bb.0:1567; GFX7-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01568; GFX7-NEXT: s_lshr_b32 s3, s5, 21569; GFX7-NEXT: s_cmp_eq_u32 s3, 11570; GFX7-NEXT: s_waitcnt lgkmcnt(0)1571; GFX7-NEXT: s_cselect_b32 s2, s1, s01572; GFX7-NEXT: s_and_b32 s5, s5, 31573; GFX7-NEXT: s_lshl_b32 s5, s5, 31574; GFX7-NEXT: s_and_b32 s4, s4, 0xff1575; GFX7-NEXT: s_lshl_b32 s4, s4, s51576; GFX7-NEXT: s_lshl_b32 s5, 0xff, s51577; GFX7-NEXT: s_andn2_b32 s2, s2, s51578; GFX7-NEXT: s_or_b32 s4, s2, s41579; GFX7-NEXT: s_cmp_eq_u32 s3, 01580; GFX7-NEXT: s_cselect_b32 s2, s4, s01581; GFX7-NEXT: s_cmp_eq_u32 s3, 11582; GFX7-NEXT: s_cselect_b32 s3, s4, s11583; GFX7-NEXT: v_mov_b32_e32 v0, s21584; GFX7-NEXT: s_mov_b64 s[0:1], 01585; GFX7-NEXT: v_mov_b32_e32 v1, s31586; GFX7-NEXT: s_mov_b32 s2, -11587; GFX7-NEXT: s_mov_b32 s3, 0xf0001588; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 01589; GFX7-NEXT: s_endpgm1590;1591; GFX10-LABEL: insertelement_s_v8i8_s_s:1592; GFX10: ; %bb.0:1593; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01594; GFX10-NEXT: s_lshr_b32 s2, s5, 21595; GFX10-NEXT: v_mov_b32_e32 v0, 01596; GFX10-NEXT: s_cmp_eq_u32 s2, 11597; GFX10-NEXT: v_mov_b32_e32 v1, 01598; GFX10-NEXT: s_waitcnt lgkmcnt(0)1599; GFX10-NEXT: s_cselect_b32 s3, s1, s01600; GFX10-NEXT: s_and_b32 s5, s5, 31601; GFX10-NEXT: s_and_b32 s4, s4, 0xff1602; GFX10-NEXT: s_lshl_b32 s5, s5, 31603; GFX10-NEXT: s_lshl_b32 s6, 0xff, s51604; GFX10-NEXT: s_lshl_b32 s4, s4, s51605; GFX10-NEXT: s_andn2_b32 s3, s3, s61606; GFX10-NEXT: s_or_b32 s3, s3, s41607; GFX10-NEXT: s_cmp_eq_u32 s2, 01608; GFX10-NEXT: s_cselect_b32 s0, s3, s01609; GFX10-NEXT: s_cmp_eq_u32 s2, 11610; GFX10-NEXT: s_cselect_b32 s1, s3, s11611; GFX10-NEXT: v_mov_b32_e32 v3, s11612; GFX10-NEXT: v_mov_b32_e32 v2, s01613; GFX10-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1614; GFX10-NEXT: s_endpgm1615;1616; GFX11-LABEL: insertelement_s_v8i8_s_s:1617; GFX11: ; %bb.0:1618; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x01619; GFX11-NEXT: s_lshr_b32 s2, s5, 21620; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1621; GFX11-NEXT: s_cmp_eq_u32 s2, 11622; GFX11-NEXT: s_waitcnt lgkmcnt(0)1623; GFX11-NEXT: s_cselect_b32 s3, s1, s01624; GFX11-NEXT: s_and_b32 s5, s5, 31625; GFX11-NEXT: s_and_b32 s4, s4, 0xff1626; GFX11-NEXT: s_lshl_b32 s5, s5, 31627; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)1628; GFX11-NEXT: s_lshl_b32 s6, 0xff, s51629; GFX11-NEXT: s_lshl_b32 s4, s4, s51630; GFX11-NEXT: s_and_not1_b32 s3, s3, s61631; GFX11-NEXT: s_or_b32 s3, s3, s41632; GFX11-NEXT: s_cmp_eq_u32 s2, 01633; GFX11-NEXT: s_cselect_b32 s0, s3, s01634; GFX11-NEXT: s_cmp_eq_u32 s2, 11635; GFX11-NEXT: s_cselect_b32 s1, s3, s11636; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1637; GFX11-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v3, s11638; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, s01639; GFX11-NEXT: global_store_b64 v[0:1], v[2:3], off1640; GFX11-NEXT: s_endpgm1641 %vec = load <8 x i8>, ptr addrspace(4) %ptr1642 %insert = insertelement <8 x i8> %vec, i8 %val, i32 %idx1643 store <8 x i8> %insert, ptr addrspace(1) null1644 ret void1645}1646 1647define amdgpu_ps void @insertelement_v_v8i8_s_s(ptr addrspace(1) %ptr, i8 inreg %val, i32 inreg %idx) {1648; GFX9-LABEL: insertelement_v_v8i8_s_s:1649; GFX9: ; %bb.0:1650; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1651; GFX9-NEXT: s_and_b32 s1, s3, 31652; GFX9-NEXT: s_lshr_b32 s0, s3, 21653; GFX9-NEXT: s_and_b32 s2, s2, 0xff1654; GFX9-NEXT: s_lshl_b32 s1, s1, 31655; GFX9-NEXT: s_lshl_b32 s2, s2, s11656; GFX9-NEXT: s_lshl_b32 s1, 0xff, s11657; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 11658; GFX9-NEXT: s_not_b32 s1, s11659; GFX9-NEXT: v_mov_b32_e32 v4, s21660; GFX9-NEXT: v_mov_b32_e32 v2, 01661; GFX9-NEXT: v_mov_b32_e32 v3, 01662; GFX9-NEXT: s_waitcnt vmcnt(0)1663; GFX9-NEXT: v_cndmask_b32_e32 v5, v0, v1, vcc1664; GFX9-NEXT: v_and_or_b32 v4, v5, s1, v41665; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], s0, 01666; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[0:1]1667; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc1668; GFX9-NEXT: global_store_dwordx2 v[2:3], v[0:1], off1669; GFX9-NEXT: s_endpgm1670;1671; GFX8-LABEL: insertelement_v_v8i8_s_s:1672; GFX8: ; %bb.0:1673; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1]1674; GFX8-NEXT: s_lshr_b32 s0, s3, 21675; GFX8-NEXT: s_and_b32 s1, s3, 31676; GFX8-NEXT: s_and_b32 s2, s2, 0xff1677; GFX8-NEXT: s_lshl_b32 s1, s1, 31678; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 11679; GFX8-NEXT: s_lshl_b32 s2, s2, s11680; GFX8-NEXT: s_lshl_b32 s1, 0xff, s11681; GFX8-NEXT: v_mov_b32_e32 v2, 01682; GFX8-NEXT: v_mov_b32_e32 v3, 01683; GFX8-NEXT: s_waitcnt vmcnt(0)1684; GFX8-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc1685; GFX8-NEXT: v_bfi_b32 v4, s1, 0, v41686; GFX8-NEXT: v_or_b32_e32 v4, s2, v41687; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], s0, 01688; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[0:1]1689; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc1690; GFX8-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1691; GFX8-NEXT: s_endpgm1692;1693; GFX7-LABEL: insertelement_v_v8i8_s_s:1694; GFX7: ; %bb.0:1695; GFX7-NEXT: s_mov_b32 s6, 01696; GFX7-NEXT: s_mov_b32 s7, 0xf0001697; GFX7-NEXT: s_mov_b64 s[4:5], 01698; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr641699; GFX7-NEXT: s_lshr_b32 s0, s3, 21700; GFX7-NEXT: s_and_b32 s1, s3, 31701; GFX7-NEXT: s_and_b32 s2, s2, 0xff1702; GFX7-NEXT: s_lshl_b32 s1, s1, 31703; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 11704; GFX7-NEXT: s_lshl_b32 s2, s2, s11705; GFX7-NEXT: s_lshl_b32 s1, 0xff, s11706; GFX7-NEXT: s_mov_b64 s[4:5], 01707; GFX7-NEXT: s_mov_b32 s6, -11708; GFX7-NEXT: s_waitcnt vmcnt(0)1709; GFX7-NEXT: v_cndmask_b32_e32 v2, v0, v1, vcc1710; GFX7-NEXT: v_bfi_b32 v2, s1, 0, v21711; GFX7-NEXT: v_or_b32_e32 v2, s2, v21712; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], s0, 01713; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]1714; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc1715; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 01716; GFX7-NEXT: s_endpgm1717;1718; GFX10-LABEL: insertelement_v_v8i8_s_s:1719; GFX10: ; %bb.0:1720; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1721; GFX10-NEXT: s_lshr_b32 s0, s3, 21722; GFX10-NEXT: s_and_b32 s1, s3, 31723; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 11724; GFX10-NEXT: s_lshl_b32 s1, s1, 31725; GFX10-NEXT: s_and_b32 s2, s2, 0xff1726; GFX10-NEXT: s_lshl_b32 s3, 0xff, s11727; GFX10-NEXT: s_lshl_b32 s1, s2, s11728; GFX10-NEXT: s_not_b32 s2, s31729; GFX10-NEXT: v_cmp_eq_u32_e64 s0, s0, 01730; GFX10-NEXT: s_waitcnt vmcnt(0)1731; GFX10-NEXT: v_cndmask_b32_e32 v2, v0, v1, vcc_lo1732; GFX10-NEXT: v_and_or_b32 v4, v2, s2, s11733; GFX10-NEXT: v_mov_b32_e32 v2, 01734; GFX10-NEXT: v_mov_b32_e32 v3, 01735; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v4, s01736; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo1737; GFX10-NEXT: global_store_dwordx2 v[2:3], v[0:1], off1738; GFX10-NEXT: s_endpgm1739;1740; GFX11-LABEL: insertelement_v_v8i8_s_s:1741; GFX11: ; %bb.0:1742; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off1743; GFX11-NEXT: s_lshr_b32 s0, s3, 21744; GFX11-NEXT: s_and_b32 s1, s3, 31745; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 11746; GFX11-NEXT: s_lshl_b32 s1, s1, 31747; GFX11-NEXT: s_and_b32 s2, s2, 0xff1748; GFX11-NEXT: s_lshl_b32 s3, 0xff, s11749; GFX11-NEXT: s_lshl_b32 s1, s2, s11750; GFX11-NEXT: s_not_b32 s2, s31751; GFX11-NEXT: v_cmp_eq_u32_e64 s0, s0, 01752; GFX11-NEXT: s_waitcnt vmcnt(0)1753; GFX11-NEXT: v_cndmask_b32_e32 v2, v0, v1, vcc_lo1754; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)1755; GFX11-NEXT: v_and_or_b32 v4, v2, s2, s11756; GFX11-NEXT: v_mov_b32_e32 v2, 01757; GFX11-NEXT: v_mov_b32_e32 v3, 01758; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v4, s01759; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo1760; GFX11-NEXT: global_store_b64 v[2:3], v[0:1], off1761; GFX11-NEXT: s_endpgm1762 %vec = load <8 x i8>, ptr addrspace(1 ) %ptr1763 %insert = insertelement <8 x i8> %vec, i8 %val, i32 %idx1764 store <8 x i8> %insert, ptr addrspace(1) null1765 ret void1766}1767 1768define amdgpu_ps void @insertelement_s_v8i8_v_s(ptr addrspace(4) inreg %ptr, i8 %val, i32 inreg %idx) {1769; GFX9-LABEL: insertelement_s_v8i8_v_s:1770; GFX9: ; %bb.0:1771; GFX9-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01772; GFX9-NEXT: s_lshr_b32 s2, s4, 21773; GFX9-NEXT: s_cmp_eq_u32 s2, 11774; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v01775; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s2, 01776; GFX9-NEXT: s_waitcnt lgkmcnt(0)1777; GFX9-NEXT: s_cselect_b32 s3, s1, s01778; GFX9-NEXT: s_and_b32 s4, s4, 31779; GFX9-NEXT: s_lshl_b32 s4, s4, 31780; GFX9-NEXT: s_lshl_b32 s5, 0xff, s41781; GFX9-NEXT: s_andn2_b32 s3, s3, s51782; GFX9-NEXT: v_mov_b32_e32 v1, s31783; GFX9-NEXT: v_lshl_or_b32 v4, v0, s4, v11784; GFX9-NEXT: v_mov_b32_e32 v0, s01785; GFX9-NEXT: v_mov_b32_e32 v1, s11786; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc1787; GFX9-NEXT: v_mov_b32_e32 v2, 01788; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s2, 11789; GFX9-NEXT: v_mov_b32_e32 v3, 01790; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc1791; GFX9-NEXT: global_store_dwordx2 v[2:3], v[0:1], off1792; GFX9-NEXT: s_endpgm1793;1794; GFX8-LABEL: insertelement_s_v8i8_v_s:1795; GFX8: ; %bb.0:1796; GFX8-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01797; GFX8-NEXT: s_lshr_b32 s2, s4, 21798; GFX8-NEXT: s_cmp_eq_u32 s2, 11799; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s2, 01800; GFX8-NEXT: v_mov_b32_e32 v2, 01801; GFX8-NEXT: s_waitcnt lgkmcnt(0)1802; GFX8-NEXT: s_cselect_b32 s3, s1, s01803; GFX8-NEXT: s_and_b32 s4, s4, 31804; GFX8-NEXT: s_lshl_b32 s4, s4, 31805; GFX8-NEXT: v_mov_b32_e32 v1, s41806; GFX8-NEXT: s_lshl_b32 s4, 0xff, s41807; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01808; GFX8-NEXT: s_andn2_b32 s3, s3, s41809; GFX8-NEXT: v_or_b32_e32 v4, s3, v01810; GFX8-NEXT: v_mov_b32_e32 v0, s01811; GFX8-NEXT: v_mov_b32_e32 v1, s11812; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc1813; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s2, 11814; GFX8-NEXT: v_mov_b32_e32 v3, 01815; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc1816; GFX8-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1817; GFX8-NEXT: s_endpgm1818;1819; GFX7-LABEL: insertelement_s_v8i8_v_s:1820; GFX7: ; %bb.0:1821; GFX7-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01822; GFX7-NEXT: s_lshr_b32 s2, s4, 21823; GFX7-NEXT: s_cmp_eq_u32 s2, 11824; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v01825; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s2, 01826; GFX7-NEXT: s_waitcnt lgkmcnt(0)1827; GFX7-NEXT: s_cselect_b32 s3, s1, s01828; GFX7-NEXT: s_and_b32 s4, s4, 31829; GFX7-NEXT: s_lshl_b32 s4, s4, 31830; GFX7-NEXT: v_lshlrev_b32_e32 v0, s4, v01831; GFX7-NEXT: s_lshl_b32 s4, 0xff, s41832; GFX7-NEXT: s_andn2_b32 s3, s3, s41833; GFX7-NEXT: v_or_b32_e32 v2, s3, v01834; GFX7-NEXT: v_mov_b32_e32 v0, s01835; GFX7-NEXT: v_mov_b32_e32 v1, s11836; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc1837; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s2, 11838; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc1839; GFX7-NEXT: s_mov_b64 s[0:1], 01840; GFX7-NEXT: s_mov_b32 s2, -11841; GFX7-NEXT: s_mov_b32 s3, 0xf0001842; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 01843; GFX7-NEXT: s_endpgm1844;1845; GFX10-LABEL: insertelement_s_v8i8_v_s:1846; GFX10: ; %bb.0:1847; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01848; GFX10-NEXT: s_lshr_b32 s2, s4, 21849; GFX10-NEXT: v_and_b32_e32 v2, 0xff, v01850; GFX10-NEXT: s_cmp_eq_u32 s2, 11851; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s2, 01852; GFX10-NEXT: s_waitcnt lgkmcnt(0)1853; GFX10-NEXT: s_cselect_b32 s3, s1, s01854; GFX10-NEXT: s_and_b32 s4, s4, 31855; GFX10-NEXT: v_mov_b32_e32 v0, s01856; GFX10-NEXT: s_lshl_b32 s4, s4, 31857; GFX10-NEXT: v_mov_b32_e32 v1, s11858; GFX10-NEXT: s_lshl_b32 s5, 0xff, s41859; GFX10-NEXT: s_andn2_b32 s3, s3, s51860; GFX10-NEXT: v_lshl_or_b32 v4, v2, s4, s31861; GFX10-NEXT: v_mov_b32_e32 v2, 01862; GFX10-NEXT: v_mov_b32_e32 v3, 01863; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc_lo1864; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s2, 11865; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo1866; GFX10-NEXT: global_store_dwordx2 v[2:3], v[0:1], off1867; GFX10-NEXT: s_endpgm1868;1869; GFX11-LABEL: insertelement_s_v8i8_v_s:1870; GFX11: ; %bb.0:1871; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x01872; GFX11-NEXT: s_lshr_b32 s2, s4, 21873; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v01874; GFX11-NEXT: s_cmp_eq_u32 s2, 11875; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s2, 01876; GFX11-NEXT: s_waitcnt lgkmcnt(0)1877; GFX11-NEXT: s_cselect_b32 s3, s1, s01878; GFX11-NEXT: s_and_b32 s4, s4, 31879; GFX11-NEXT: v_mov_b32_e32 v0, s01880; GFX11-NEXT: s_lshl_b32 s4, s4, 31881; GFX11-NEXT: v_mov_b32_e32 v1, s11882; GFX11-NEXT: s_lshl_b32 s5, 0xff, s41883; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1884; GFX11-NEXT: s_and_not1_b32 s3, s3, s51885; GFX11-NEXT: v_lshl_or_b32 v4, v2, s4, s31886; GFX11-NEXT: v_mov_b32_e32 v2, 01887; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1888; GFX11-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_cndmask_b32 v0, v0, v41889; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s2, 11890; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo1891; GFX11-NEXT: global_store_b64 v[2:3], v[0:1], off1892; GFX11-NEXT: s_endpgm1893 %vec = load <8 x i8>, ptr addrspace(4) %ptr1894 %insert = insertelement <8 x i8> %vec, i8 %val, i32 %idx1895 store <8 x i8> %insert, ptr addrspace(1) null1896 ret void1897}1898 1899define amdgpu_ps void @insertelement_s_v8i8_s_v(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 %idx) {1900; GFX9-LABEL: insertelement_s_v8i8_s_v:1901; GFX9: ; %bb.0:1902; GFX9-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01903; GFX9-NEXT: v_lshrrev_b32_e32 v2, 2, v01904; GFX9-NEXT: v_and_b32_e32 v0, 3, v01905; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v21906; GFX9-NEXT: v_lshlrev_b32_e32 v0, 3, v01907; GFX9-NEXT: s_waitcnt lgkmcnt(0)1908; GFX9-NEXT: v_mov_b32_e32 v1, s01909; GFX9-NEXT: v_mov_b32_e32 v3, s11910; GFX9-NEXT: s_and_b32 s2, s4, 0xff1911; GFX9-NEXT: v_mov_b32_e32 v4, 0xff1912; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc1913; GFX9-NEXT: v_lshlrev_b32_e64 v3, v0, s21914; GFX9-NEXT: v_lshlrev_b32_e32 v0, v0, v41915; GFX9-NEXT: v_not_b32_e32 v0, v01916; GFX9-NEXT: v_and_or_b32 v4, v1, v0, v31917; GFX9-NEXT: v_mov_b32_e32 v0, s01918; GFX9-NEXT: v_mov_b32_e32 v1, s11919; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v21920; GFX9-NEXT: v_mov_b32_e32 v2, 01921; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[0:1]1922; GFX9-NEXT: v_mov_b32_e32 v3, 01923; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc1924; GFX9-NEXT: global_store_dwordx2 v[2:3], v[0:1], off1925; GFX9-NEXT: s_endpgm1926;1927; GFX8-LABEL: insertelement_s_v8i8_s_v:1928; GFX8: ; %bb.0:1929; GFX8-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01930; GFX8-NEXT: v_lshrrev_b32_e32 v2, 2, v01931; GFX8-NEXT: v_and_b32_e32 v0, 3, v01932; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v21933; GFX8-NEXT: v_lshlrev_b32_e32 v0, 3, v01934; GFX8-NEXT: s_waitcnt lgkmcnt(0)1935; GFX8-NEXT: v_mov_b32_e32 v1, s01936; GFX8-NEXT: v_mov_b32_e32 v3, s11937; GFX8-NEXT: s_and_b32 s2, s4, 0xff1938; GFX8-NEXT: v_mov_b32_e32 v4, 0xff1939; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc1940; GFX8-NEXT: v_lshlrev_b32_e64 v3, v0, s21941; GFX8-NEXT: v_lshlrev_b32_e32 v0, v0, v41942; GFX8-NEXT: v_bfi_b32 v0, v0, 0, v11943; GFX8-NEXT: v_or_b32_e32 v4, v0, v31944; GFX8-NEXT: v_mov_b32_e32 v0, s01945; GFX8-NEXT: v_mov_b32_e32 v1, s11946; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v21947; GFX8-NEXT: v_mov_b32_e32 v2, 01948; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[0:1]1949; GFX8-NEXT: v_mov_b32_e32 v3, 01950; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc1951; GFX8-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1952; GFX8-NEXT: s_endpgm1953;1954; GFX7-LABEL: insertelement_s_v8i8_s_v:1955; GFX7: ; %bb.0:1956; GFX7-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01957; GFX7-NEXT: v_lshrrev_b32_e32 v2, 2, v01958; GFX7-NEXT: v_and_b32_e32 v0, 3, v01959; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v21960; GFX7-NEXT: v_lshlrev_b32_e32 v0, 3, v01961; GFX7-NEXT: s_waitcnt lgkmcnt(0)1962; GFX7-NEXT: v_mov_b32_e32 v1, s01963; GFX7-NEXT: v_mov_b32_e32 v3, s11964; GFX7-NEXT: s_and_b32 s2, s4, 0xff1965; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc1966; GFX7-NEXT: v_lshl_b32_e32 v3, s2, v01967; GFX7-NEXT: v_lshl_b32_e32 v0, 0xff, v01968; GFX7-NEXT: v_bfi_b32 v0, v0, 0, v11969; GFX7-NEXT: v_or_b32_e32 v3, v0, v31970; GFX7-NEXT: v_mov_b32_e32 v0, s01971; GFX7-NEXT: v_mov_b32_e32 v1, s11972; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v21973; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v3, s[0:1]1974; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc1975; GFX7-NEXT: s_mov_b64 s[0:1], 01976; GFX7-NEXT: s_mov_b32 s2, -11977; GFX7-NEXT: s_mov_b32 s3, 0xf0001978; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 01979; GFX7-NEXT: s_endpgm1980;1981; GFX10-LABEL: insertelement_s_v8i8_s_v:1982; GFX10: ; %bb.0:1983; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x01984; GFX10-NEXT: v_and_b32_e32 v1, 3, v01985; GFX10-NEXT: v_lshrrev_b32_e32 v4, 2, v01986; GFX10-NEXT: s_and_b32 s2, s4, 0xff1987; GFX10-NEXT: v_lshlrev_b32_e32 v1, 3, v11988; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v41989; GFX10-NEXT: v_lshlrev_b32_e64 v2, v1, 0xff1990; GFX10-NEXT: v_lshlrev_b32_e64 v3, v1, s21991; GFX10-NEXT: v_not_b32_e32 v2, v21992; GFX10-NEXT: s_waitcnt lgkmcnt(0)1993; GFX10-NEXT: v_mov_b32_e32 v0, s11994; GFX10-NEXT: v_cndmask_b32_e32 v5, s0, v0, vcc_lo1995; GFX10-NEXT: v_mov_b32_e32 v0, s01996; GFX10-NEXT: v_mov_b32_e32 v1, s11997; GFX10-NEXT: v_cmp_eq_u32_e64 s0, 0, v41998; GFX10-NEXT: v_and_or_b32 v5, v5, v2, v31999; GFX10-NEXT: v_mov_b32_e32 v2, 02000; GFX10-NEXT: v_mov_b32_e32 v3, 02001; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v5, s02002; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc_lo2003; GFX10-NEXT: global_store_dwordx2 v[2:3], v[0:1], off2004; GFX10-NEXT: s_endpgm2005;2006; GFX11-LABEL: insertelement_s_v8i8_s_v:2007; GFX11: ; %bb.0:2008; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x02009; GFX11-NEXT: v_and_b32_e32 v1, 3, v02010; GFX11-NEXT: v_lshrrev_b32_e32 v4, 2, v02011; GFX11-NEXT: s_and_b32 s2, s4, 0xff2012; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)2013; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v42014; GFX11-NEXT: s_waitcnt lgkmcnt(0)2015; GFX11-NEXT: v_dual_mov_b32 v0, s1 :: v_dual_lshlrev_b32 v1, 3, v12016; GFX11-NEXT: v_cndmask_b32_e32 v5, s0, v0, vcc_lo2017; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_4)2018; GFX11-NEXT: v_lshlrev_b32_e64 v2, v1, 0xff2019; GFX11-NEXT: v_lshlrev_b32_e64 v3, v1, s22020; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s12021; GFX11-NEXT: v_cmp_eq_u32_e64 s0, 0, v42022; GFX11-NEXT: v_not_b32_e32 v2, v22023; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)2024; GFX11-NEXT: v_and_or_b32 v5, v5, v2, v32025; GFX11-NEXT: v_mov_b32_e32 v2, 02026; GFX11-NEXT: v_mov_b32_e32 v3, 02027; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v5, s02028; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc_lo2029; GFX11-NEXT: global_store_b64 v[2:3], v[0:1], off2030; GFX11-NEXT: s_endpgm2031 %vec = load <8 x i8>, ptr addrspace(4) %ptr2032 %insert = insertelement <8 x i8> %vec, i8 %val, i32 %idx2033 store <8 x i8> %insert, ptr addrspace(1) null2034 ret void2035}2036 2037define amdgpu_ps void @insertelement_s_v8i8_v_v(ptr addrspace(4) inreg %ptr, i8 %val, i32 %idx) {2038; GFX9-LABEL: insertelement_s_v8i8_v_v:2039; GFX9: ; %bb.0:2040; GFX9-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x02041; GFX9-NEXT: v_lshrrev_b32_e32 v2, 2, v12042; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v22043; GFX9-NEXT: v_and_b32_e32 v1, 3, v12044; GFX9-NEXT: v_lshlrev_b32_e32 v1, 3, v12045; GFX9-NEXT: s_waitcnt lgkmcnt(0)2046; GFX9-NEXT: v_mov_b32_e32 v3, s02047; GFX9-NEXT: v_mov_b32_e32 v4, s12048; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc2049; GFX9-NEXT: v_mov_b32_e32 v4, 0xff2050; GFX9-NEXT: v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02051; GFX9-NEXT: v_lshlrev_b32_e32 v1, v1, v42052; GFX9-NEXT: v_not_b32_e32 v1, v12053; GFX9-NEXT: v_and_or_b32 v4, v3, v1, v02054; GFX9-NEXT: v_mov_b32_e32 v0, s02055; GFX9-NEXT: v_mov_b32_e32 v1, s12056; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v22057; GFX9-NEXT: v_mov_b32_e32 v2, 02058; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[0:1]2059; GFX9-NEXT: v_mov_b32_e32 v3, 02060; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc2061; GFX9-NEXT: global_store_dwordx2 v[2:3], v[0:1], off2062; GFX9-NEXT: s_endpgm2063;2064; GFX8-LABEL: insertelement_s_v8i8_v_v:2065; GFX8: ; %bb.0:2066; GFX8-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x02067; GFX8-NEXT: v_lshrrev_b32_e32 v2, 2, v12068; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v22069; GFX8-NEXT: v_and_b32_e32 v1, 3, v12070; GFX8-NEXT: v_lshlrev_b32_e32 v1, 3, v12071; GFX8-NEXT: s_waitcnt lgkmcnt(0)2072; GFX8-NEXT: v_mov_b32_e32 v3, s02073; GFX8-NEXT: v_mov_b32_e32 v4, s12074; GFX8-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc2075; GFX8-NEXT: v_mov_b32_e32 v4, 0xff2076; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02077; GFX8-NEXT: v_lshlrev_b32_e32 v1, v1, v42078; GFX8-NEXT: v_bfi_b32 v1, v1, 0, v32079; GFX8-NEXT: v_or_b32_e32 v4, v1, v02080; GFX8-NEXT: v_mov_b32_e32 v0, s02081; GFX8-NEXT: v_mov_b32_e32 v1, s12082; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v22083; GFX8-NEXT: v_mov_b32_e32 v2, 02084; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[0:1]2085; GFX8-NEXT: v_mov_b32_e32 v3, 02086; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc2087; GFX8-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2088; GFX8-NEXT: s_endpgm2089;2090; GFX7-LABEL: insertelement_s_v8i8_v_v:2091; GFX7: ; %bb.0:2092; GFX7-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x02093; GFX7-NEXT: v_lshrrev_b32_e32 v2, 2, v12094; GFX7-NEXT: v_and_b32_e32 v1, 3, v12095; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v22096; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v12097; GFX7-NEXT: s_waitcnt lgkmcnt(0)2098; GFX7-NEXT: v_mov_b32_e32 v3, s02099; GFX7-NEXT: v_mov_b32_e32 v4, s12100; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v02101; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc2102; GFX7-NEXT: v_lshlrev_b32_e32 v0, v1, v02103; GFX7-NEXT: v_lshl_b32_e32 v1, 0xff, v12104; GFX7-NEXT: v_bfi_b32 v1, v1, 0, v32105; GFX7-NEXT: v_or_b32_e32 v3, v1, v02106; GFX7-NEXT: v_mov_b32_e32 v0, s02107; GFX7-NEXT: v_mov_b32_e32 v1, s12108; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v22109; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v3, s[0:1]2110; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc2111; GFX7-NEXT: s_mov_b64 s[0:1], 02112; GFX7-NEXT: s_mov_b32 s2, -12113; GFX7-NEXT: s_mov_b32 s3, 0xf0002114; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 02115; GFX7-NEXT: s_endpgm2116;2117; GFX10-LABEL: insertelement_s_v8i8_v_v:2118; GFX10: ; %bb.0:2119; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x02120; GFX10-NEXT: v_and_b32_e32 v2, 3, v12121; GFX10-NEXT: v_lshrrev_b32_e32 v4, 2, v12122; GFX10-NEXT: v_lshlrev_b32_e32 v2, 3, v22123; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v42124; GFX10-NEXT: v_lshlrev_b32_e64 v3, v2, 0xff2125; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02126; GFX10-NEXT: v_not_b32_e32 v3, v32127; GFX10-NEXT: s_waitcnt lgkmcnt(0)2128; GFX10-NEXT: v_mov_b32_e32 v1, s12129; GFX10-NEXT: v_cndmask_b32_e32 v5, s0, v1, vcc_lo2130; GFX10-NEXT: v_mov_b32_e32 v0, s02131; GFX10-NEXT: v_mov_b32_e32 v1, s12132; GFX10-NEXT: v_cmp_eq_u32_e64 s0, 0, v42133; GFX10-NEXT: v_and_or_b32 v5, v5, v3, v22134; GFX10-NEXT: v_mov_b32_e32 v2, 02135; GFX10-NEXT: v_mov_b32_e32 v3, 02136; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v5, s02137; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc_lo2138; GFX10-NEXT: global_store_dwordx2 v[2:3], v[0:1], off2139; GFX10-NEXT: s_endpgm2140;2141; GFX11-LABEL: insertelement_s_v8i8_v_v:2142; GFX11: ; %bb.0:2143; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x02144; GFX11-NEXT: v_and_b32_e32 v2, 3, v12145; GFX11-NEXT: v_lshrrev_b32_e32 v4, 2, v12146; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v02147; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)2148; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v42149; GFX11-NEXT: s_waitcnt lgkmcnt(0)2150; GFX11-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_lshlrev_b32 v2, 3, v22151; GFX11-NEXT: v_cndmask_b32_e32 v5, s0, v1, vcc_lo2152; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_4)2153; GFX11-NEXT: v_lshlrev_b32_e64 v3, v2, 0xff2154; GFX11-NEXT: v_lshlrev_b32_e32 v2, v2, v02155; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s12156; GFX11-NEXT: v_cmp_eq_u32_e64 s0, 0, v42157; GFX11-NEXT: v_not_b32_e32 v3, v32158; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)2159; GFX11-NEXT: v_and_or_b32 v5, v5, v3, v22160; GFX11-NEXT: v_mov_b32_e32 v2, 02161; GFX11-NEXT: v_mov_b32_e32 v3, 02162; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v5, s02163; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc_lo2164; GFX11-NEXT: global_store_b64 v[2:3], v[0:1], off2165; GFX11-NEXT: s_endpgm2166 %vec = load <8 x i8>, ptr addrspace(4) %ptr2167 %insert = insertelement <8 x i8> %vec, i8 %val, i32 %idx2168 store <8 x i8> %insert, ptr addrspace(1) null2169 ret void2170}2171 2172define amdgpu_ps void @insertelement_v_v8i8_s_v(ptr addrspace(1) %ptr, i8 inreg %val, i32 %idx) {2173; GFX9-LABEL: insertelement_v_v8i8_s_v:2174; GFX9: ; %bb.0:2175; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off2176; GFX9-NEXT: v_lshrrev_b32_e32 v6, 2, v22177; GFX9-NEXT: v_and_b32_e32 v2, 3, v22178; GFX9-NEXT: v_mov_b32_e32 v5, 0xff2179; GFX9-NEXT: s_and_b32 s0, s2, 0xff2180; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v22181; GFX9-NEXT: v_lshlrev_b32_e64 v7, v2, s02182; GFX9-NEXT: v_lshlrev_b32_e32 v2, v2, v52183; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v62184; GFX9-NEXT: v_not_b32_e32 v2, v22185; GFX9-NEXT: v_mov_b32_e32 v3, 02186; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v62187; GFX9-NEXT: v_mov_b32_e32 v4, 02188; GFX9-NEXT: s_waitcnt vmcnt(0)2189; GFX9-NEXT: v_cndmask_b32_e32 v5, v0, v1, vcc2190; GFX9-NEXT: v_and_or_b32 v2, v5, v2, v72191; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2192; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2193; GFX9-NEXT: global_store_dwordx2 v[3:4], v[0:1], off2194; GFX9-NEXT: s_endpgm2195;2196; GFX8-LABEL: insertelement_v_v8i8_s_v:2197; GFX8: ; %bb.0:2198; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2199; GFX8-NEXT: v_lshrrev_b32_e32 v6, 2, v22200; GFX8-NEXT: v_and_b32_e32 v2, 3, v22201; GFX8-NEXT: v_mov_b32_e32 v5, 0xff2202; GFX8-NEXT: s_and_b32 s0, s2, 0xff2203; GFX8-NEXT: v_lshlrev_b32_e32 v2, 3, v22204; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v62205; GFX8-NEXT: v_lshlrev_b32_e64 v7, v2, s02206; GFX8-NEXT: v_lshlrev_b32_e32 v2, v2, v52207; GFX8-NEXT: v_mov_b32_e32 v3, 02208; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v62209; GFX8-NEXT: v_mov_b32_e32 v4, 02210; GFX8-NEXT: s_waitcnt vmcnt(0)2211; GFX8-NEXT: v_cndmask_b32_e32 v5, v0, v1, vcc2212; GFX8-NEXT: v_bfi_b32 v2, v2, 0, v52213; GFX8-NEXT: v_or_b32_e32 v2, v2, v72214; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2215; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2216; GFX8-NEXT: flat_store_dwordx2 v[3:4], v[0:1]2217; GFX8-NEXT: s_endpgm2218;2219; GFX7-LABEL: insertelement_v_v8i8_s_v:2220; GFX7: ; %bb.0:2221; GFX7-NEXT: s_mov_b32 s6, 02222; GFX7-NEXT: s_mov_b32 s7, 0xf0002223; GFX7-NEXT: s_mov_b64 s[4:5], 02224; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr642225; GFX7-NEXT: v_lshrrev_b32_e32 v3, 2, v22226; GFX7-NEXT: v_and_b32_e32 v2, 3, v22227; GFX7-NEXT: s_and_b32 s0, s2, 0xff2228; GFX7-NEXT: v_lshlrev_b32_e32 v2, 3, v22229; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v32230; GFX7-NEXT: v_lshl_b32_e32 v4, s0, v22231; GFX7-NEXT: v_lshl_b32_e32 v2, 0xff, v22232; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v32233; GFX7-NEXT: s_mov_b64 s[4:5], 02234; GFX7-NEXT: s_mov_b32 s6, -12235; GFX7-NEXT: s_waitcnt vmcnt(0)2236; GFX7-NEXT: v_cndmask_b32_e32 v5, v0, v1, vcc2237; GFX7-NEXT: v_bfi_b32 v2, v2, 0, v52238; GFX7-NEXT: v_or_b32_e32 v2, v2, v42239; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2240; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2241; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 02242; GFX7-NEXT: s_endpgm2243;2244; GFX10-LABEL: insertelement_v_v8i8_s_v:2245; GFX10: ; %bb.0:2246; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off2247; GFX10-NEXT: v_and_b32_e32 v3, 3, v22248; GFX10-NEXT: v_lshrrev_b32_e32 v5, 2, v22249; GFX10-NEXT: s_and_b32 s0, s2, 0xff2250; GFX10-NEXT: v_lshlrev_b32_e32 v3, 3, v32251; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v52252; GFX10-NEXT: v_lshlrev_b32_e64 v4, v3, 0xff2253; GFX10-NEXT: v_lshlrev_b32_e64 v2, v3, s02254; GFX10-NEXT: v_cmp_eq_u32_e64 s0, 0, v52255; GFX10-NEXT: v_not_b32_e32 v3, v42256; GFX10-NEXT: s_waitcnt vmcnt(0)2257; GFX10-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc_lo2258; GFX10-NEXT: v_and_or_b32 v4, v4, v3, v22259; GFX10-NEXT: v_mov_b32_e32 v2, 02260; GFX10-NEXT: v_mov_b32_e32 v3, 02261; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v4, s02262; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo2263; GFX10-NEXT: global_store_dwordx2 v[2:3], v[0:1], off2264; GFX10-NEXT: s_endpgm2265;2266; GFX11-LABEL: insertelement_v_v8i8_s_v:2267; GFX11: ; %bb.0:2268; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off2269; GFX11-NEXT: v_lshrrev_b32_e32 v5, 2, v22270; GFX11-NEXT: s_and_b32 s0, s2, 0xff2271; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)2272; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v52273; GFX11-NEXT: v_and_b32_e32 v3, 3, v22274; GFX11-NEXT: v_lshlrev_b32_e32 v3, 3, v32275; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)2276; GFX11-NEXT: v_lshlrev_b32_e64 v4, v3, 0xff2277; GFX11-NEXT: v_lshlrev_b32_e64 v2, v3, s02278; GFX11-NEXT: v_cmp_eq_u32_e64 s0, 0, v52279; GFX11-NEXT: v_not_b32_e32 v3, v42280; GFX11-NEXT: s_waitcnt vmcnt(0)2281; GFX11-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc_lo2282; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)2283; GFX11-NEXT: v_and_or_b32 v4, v4, v3, v22284; GFX11-NEXT: v_mov_b32_e32 v2, 02285; GFX11-NEXT: v_mov_b32_e32 v3, 02286; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v4, s02287; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo2288; GFX11-NEXT: global_store_b64 v[2:3], v[0:1], off2289; GFX11-NEXT: s_endpgm2290 %vec = load <8 x i8>, ptr addrspace(1) %ptr2291 %insert = insertelement <8 x i8> %vec, i8 %val, i32 %idx2292 store <8 x i8> %insert, ptr addrspace(1) null2293 ret void2294}2295 2296define amdgpu_ps void @insertelement_v_v8i8_v_s(ptr addrspace(1) %ptr, i8 %val, i32 inreg %idx) {2297; GFX9-LABEL: insertelement_v_v8i8_v_s:2298; GFX9: ; %bb.0:2299; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off2300; GFX9-NEXT: s_and_b32 s1, s2, 32301; GFX9-NEXT: s_lshr_b32 s0, s2, 22302; GFX9-NEXT: s_lshl_b32 s1, s1, 32303; GFX9-NEXT: v_lshlrev_b32_sdwa v2, s1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02304; GFX9-NEXT: s_lshl_b32 s1, 0xff, s12305; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 12306; GFX9-NEXT: s_not_b32 s1, s12307; GFX9-NEXT: v_mov_b32_e32 v3, 02308; GFX9-NEXT: v_mov_b32_e32 v4, 02309; GFX9-NEXT: s_waitcnt vmcnt(0)2310; GFX9-NEXT: v_cndmask_b32_e32 v5, v0, v1, vcc2311; GFX9-NEXT: v_and_or_b32 v2, v5, s1, v22312; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], s0, 02313; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2314; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2315; GFX9-NEXT: global_store_dwordx2 v[3:4], v[0:1], off2316; GFX9-NEXT: s_endpgm2317;2318; GFX8-LABEL: insertelement_v_v8i8_v_s:2319; GFX8: ; %bb.0:2320; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2321; GFX8-NEXT: s_and_b32 s1, s2, 32322; GFX8-NEXT: s_lshr_b32 s0, s2, 22323; GFX8-NEXT: s_lshl_b32 s1, s1, 32324; GFX8-NEXT: v_mov_b32_e32 v5, s12325; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 12326; GFX8-NEXT: s_lshl_b32 s1, 0xff, s12327; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02328; GFX8-NEXT: v_mov_b32_e32 v3, 02329; GFX8-NEXT: v_mov_b32_e32 v4, 02330; GFX8-NEXT: s_waitcnt vmcnt(0)2331; GFX8-NEXT: v_cndmask_b32_e32 v5, v0, v1, vcc2332; GFX8-NEXT: v_bfi_b32 v5, s1, 0, v52333; GFX8-NEXT: v_or_b32_e32 v2, v5, v22334; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], s0, 02335; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2336; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2337; GFX8-NEXT: flat_store_dwordx2 v[3:4], v[0:1]2338; GFX8-NEXT: s_endpgm2339;2340; GFX7-LABEL: insertelement_v_v8i8_v_s:2341; GFX7: ; %bb.0:2342; GFX7-NEXT: s_mov_b32 s6, 02343; GFX7-NEXT: s_mov_b32 s7, 0xf0002344; GFX7-NEXT: s_mov_b64 s[4:5], 02345; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr642346; GFX7-NEXT: s_lshr_b32 s0, s2, 22347; GFX7-NEXT: s_and_b32 s1, s2, 32348; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v22349; GFX7-NEXT: s_lshl_b32 s1, s1, 32350; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 12351; GFX7-NEXT: v_lshlrev_b32_e32 v2, s1, v22352; GFX7-NEXT: s_lshl_b32 s1, 0xff, s12353; GFX7-NEXT: s_mov_b64 s[4:5], 02354; GFX7-NEXT: s_mov_b32 s6, -12355; GFX7-NEXT: s_waitcnt vmcnt(0)2356; GFX7-NEXT: v_cndmask_b32_e32 v3, v0, v1, vcc2357; GFX7-NEXT: v_bfi_b32 v3, s1, 0, v32358; GFX7-NEXT: v_or_b32_e32 v2, v3, v22359; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], s0, 02360; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2361; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2362; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 02363; GFX7-NEXT: s_endpgm2364;2365; GFX10-LABEL: insertelement_v_v8i8_v_s:2366; GFX10: ; %bb.0:2367; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off2368; GFX10-NEXT: s_lshr_b32 s1, s2, 22369; GFX10-NEXT: s_and_b32 s0, s2, 32370; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s1, 12371; GFX10-NEXT: s_lshl_b32 s0, s0, 32372; GFX10-NEXT: v_lshlrev_b32_sdwa v2, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02373; GFX10-NEXT: s_lshl_b32 s0, 0xff, s02374; GFX10-NEXT: s_not_b32 s0, s02375; GFX10-NEXT: s_waitcnt vmcnt(0)2376; GFX10-NEXT: v_cndmask_b32_e32 v3, v0, v1, vcc_lo2377; GFX10-NEXT: v_and_or_b32 v4, v3, s0, v22378; GFX10-NEXT: v_cmp_eq_u32_e64 s0, s1, 02379; GFX10-NEXT: v_mov_b32_e32 v2, 02380; GFX10-NEXT: v_mov_b32_e32 v3, 02381; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo2382; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v4, s02383; GFX10-NEXT: global_store_dwordx2 v[2:3], v[0:1], off2384; GFX10-NEXT: s_endpgm2385;2386; GFX11-LABEL: insertelement_v_v8i8_v_s:2387; GFX11: ; %bb.0:2388; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off2389; GFX11-NEXT: s_lshr_b32 s1, s2, 22390; GFX11-NEXT: s_and_b32 s0, s2, 32391; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s1, 12392; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v22393; GFX11-NEXT: s_lshl_b32 s0, s0, 32394; GFX11-NEXT: s_waitcnt vmcnt(0)2395; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2396; GFX11-NEXT: v_dual_cndmask_b32 v3, v0, v1 :: v_dual_lshlrev_b32 v2, s0, v22397; GFX11-NEXT: s_lshl_b32 s0, 0xff, s02398; GFX11-NEXT: s_not_b32 s0, s02399; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2400; GFX11-NEXT: v_and_or_b32 v4, v3, s0, v22401; GFX11-NEXT: v_cmp_eq_u32_e64 s0, s1, 02402; GFX11-NEXT: v_mov_b32_e32 v2, 02403; GFX11-NEXT: v_mov_b32_e32 v3, 02404; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)2405; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo2406; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v4, s02407; GFX11-NEXT: global_store_b64 v[2:3], v[0:1], off2408; GFX11-NEXT: s_endpgm2409 %vec = load <8 x i8>, ptr addrspace(1) %ptr2410 %insert = insertelement <8 x i8> %vec, i8 %val, i32 %idx2411 store <8 x i8> %insert, ptr addrspace(1) null2412 ret void2413}2414 2415define amdgpu_ps void @insertelement_v_v8i8_v_v(ptr addrspace(1) %ptr, i8 %val, i32 %idx) {2416; GFX9-LABEL: insertelement_v_v8i8_v_v:2417; GFX9: ; %bb.0:2418; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off2419; GFX9-NEXT: v_lshrrev_b32_e32 v7, 2, v32420; GFX9-NEXT: v_and_b32_e32 v3, 3, v32421; GFX9-NEXT: v_mov_b32_e32 v6, 0xff2422; GFX9-NEXT: v_lshlrev_b32_e32 v3, 3, v32423; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02424; GFX9-NEXT: v_lshlrev_b32_e32 v3, v3, v62425; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v72426; GFX9-NEXT: v_not_b32_e32 v3, v32427; GFX9-NEXT: v_mov_b32_e32 v4, 02428; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v72429; GFX9-NEXT: v_mov_b32_e32 v5, 02430; GFX9-NEXT: s_waitcnt vmcnt(0)2431; GFX9-NEXT: v_cndmask_b32_e32 v6, v0, v1, vcc2432; GFX9-NEXT: v_and_or_b32 v2, v6, v3, v22433; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2434; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2435; GFX9-NEXT: global_store_dwordx2 v[4:5], v[0:1], off2436; GFX9-NEXT: s_endpgm2437;2438; GFX8-LABEL: insertelement_v_v8i8_v_v:2439; GFX8: ; %bb.0:2440; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1]2441; GFX8-NEXT: v_lshrrev_b32_e32 v7, 2, v32442; GFX8-NEXT: v_and_b32_e32 v3, 3, v32443; GFX8-NEXT: v_mov_b32_e32 v6, 0xff2444; GFX8-NEXT: v_lshlrev_b32_e32 v3, 3, v32445; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v72446; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02447; GFX8-NEXT: v_lshlrev_b32_e32 v3, v3, v62448; GFX8-NEXT: v_mov_b32_e32 v4, 02449; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v72450; GFX8-NEXT: v_mov_b32_e32 v5, 02451; GFX8-NEXT: s_waitcnt vmcnt(0)2452; GFX8-NEXT: v_cndmask_b32_e32 v6, v0, v1, vcc2453; GFX8-NEXT: v_bfi_b32 v3, v3, 0, v62454; GFX8-NEXT: v_or_b32_e32 v2, v3, v22455; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2456; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2457; GFX8-NEXT: flat_store_dwordx2 v[4:5], v[0:1]2458; GFX8-NEXT: s_endpgm2459;2460; GFX7-LABEL: insertelement_v_v8i8_v_v:2461; GFX7: ; %bb.0:2462; GFX7-NEXT: s_mov_b32 s6, 02463; GFX7-NEXT: s_mov_b32 s7, 0xf0002464; GFX7-NEXT: s_mov_b64 s[4:5], 02465; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr642466; GFX7-NEXT: v_lshrrev_b32_e32 v4, 2, v32467; GFX7-NEXT: v_and_b32_e32 v3, 3, v32468; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v22469; GFX7-NEXT: v_lshlrev_b32_e32 v3, 3, v32470; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v42471; GFX7-NEXT: v_lshlrev_b32_e32 v2, v3, v22472; GFX7-NEXT: v_lshl_b32_e32 v3, 0xff, v32473; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 0, v42474; GFX7-NEXT: s_mov_b64 s[4:5], 02475; GFX7-NEXT: s_mov_b32 s6, -12476; GFX7-NEXT: s_waitcnt vmcnt(0)2477; GFX7-NEXT: v_cndmask_b32_e32 v5, v0, v1, vcc2478; GFX7-NEXT: v_bfi_b32 v3, v3, 0, v52479; GFX7-NEXT: v_or_b32_e32 v2, v3, v22480; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1]2481; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2482; GFX7-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 02483; GFX7-NEXT: s_endpgm2484;2485; GFX10-LABEL: insertelement_v_v8i8_v_v:2486; GFX10: ; %bb.0:2487; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off2488; GFX10-NEXT: v_and_b32_e32 v4, 3, v32489; GFX10-NEXT: v_lshrrev_b32_e32 v6, 2, v32490; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v42491; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v62492; GFX10-NEXT: v_cmp_eq_u32_e64 s0, 0, v62493; GFX10-NEXT: v_lshlrev_b32_e64 v5, v4, 0xff2494; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02495; GFX10-NEXT: v_not_b32_e32 v3, v52496; GFX10-NEXT: s_waitcnt vmcnt(0)2497; GFX10-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc_lo2498; GFX10-NEXT: v_and_or_b32 v4, v4, v3, v22499; GFX10-NEXT: v_mov_b32_e32 v2, 02500; GFX10-NEXT: v_mov_b32_e32 v3, 02501; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v4, s02502; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo2503; GFX10-NEXT: global_store_dwordx2 v[2:3], v[0:1], off2504; GFX10-NEXT: s_endpgm2505;2506; GFX11-LABEL: insertelement_v_v8i8_v_v:2507; GFX11: ; %bb.0:2508; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off2509; GFX11-NEXT: v_and_b32_e32 v4, 3, v32510; GFX11-NEXT: v_lshrrev_b32_e32 v6, 2, v32511; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2512; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v42513; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v62514; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v22515; GFX11-NEXT: v_cmp_eq_u32_e64 s0, 0, v62516; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)2517; GFX11-NEXT: v_lshlrev_b32_e64 v5, v4, 0xff2518; GFX11-NEXT: v_lshlrev_b32_e32 v2, v4, v22519; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)2520; GFX11-NEXT: v_not_b32_e32 v3, v52521; GFX11-NEXT: s_waitcnt vmcnt(0)2522; GFX11-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc_lo2523; GFX11-NEXT: v_and_or_b32 v4, v4, v3, v22524; GFX11-NEXT: v_mov_b32_e32 v2, 02525; GFX11-NEXT: v_mov_b32_e32 v3, 02526; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)2527; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v4, s02528; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo2529; GFX11-NEXT: global_store_b64 v[2:3], v[0:1], off2530; GFX11-NEXT: s_endpgm2531 %vec = load <8 x i8>, ptr addrspace(1) %ptr2532 %insert = insertelement <8 x i8> %vec, i8 %val, i32 %idx2533 store <8 x i8> %insert, ptr addrspace(1) null2534 ret void2535}2536 2537define amdgpu_ps void @insertelement_s_v16i8_s_s(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 inreg %idx) {2538; GFX9-LABEL: insertelement_s_v16i8_s_s:2539; GFX9: ; %bb.0:2540; GFX9-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x02541; GFX9-NEXT: s_lshr_b32 s6, s5, 22542; GFX9-NEXT: s_cmp_eq_u32 s6, 12543; GFX9-NEXT: v_mov_b32_e32 v4, 02544; GFX9-NEXT: v_mov_b32_e32 v5, 02545; GFX9-NEXT: s_waitcnt lgkmcnt(0)2546; GFX9-NEXT: s_cselect_b32 s7, s1, s02547; GFX9-NEXT: s_cmp_eq_u32 s6, 22548; GFX9-NEXT: s_cselect_b32 s7, s2, s72549; GFX9-NEXT: s_cmp_eq_u32 s6, 32550; GFX9-NEXT: s_cselect_b32 s7, s3, s72551; GFX9-NEXT: s_and_b32 s5, s5, 32552; GFX9-NEXT: s_lshl_b32 s5, s5, 32553; GFX9-NEXT: s_and_b32 s4, s4, 0xff2554; GFX9-NEXT: s_lshl_b32 s4, s4, s52555; GFX9-NEXT: s_lshl_b32 s5, 0xff, s52556; GFX9-NEXT: s_andn2_b32 s5, s7, s52557; GFX9-NEXT: s_or_b32 s4, s5, s42558; GFX9-NEXT: s_cmp_eq_u32 s6, 02559; GFX9-NEXT: s_cselect_b32 s0, s4, s02560; GFX9-NEXT: s_cmp_eq_u32 s6, 12561; GFX9-NEXT: s_cselect_b32 s1, s4, s12562; GFX9-NEXT: s_cmp_eq_u32 s6, 22563; GFX9-NEXT: s_cselect_b32 s2, s4, s22564; GFX9-NEXT: s_cmp_eq_u32 s6, 32565; GFX9-NEXT: s_cselect_b32 s3, s4, s32566; GFX9-NEXT: v_mov_b32_e32 v0, s02567; GFX9-NEXT: v_mov_b32_e32 v1, s12568; GFX9-NEXT: v_mov_b32_e32 v2, s22569; GFX9-NEXT: v_mov_b32_e32 v3, s32570; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off2571; GFX9-NEXT: s_endpgm2572;2573; GFX8-LABEL: insertelement_s_v16i8_s_s:2574; GFX8: ; %bb.0:2575; GFX8-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x02576; GFX8-NEXT: s_lshr_b32 s6, s5, 22577; GFX8-NEXT: s_cmp_eq_u32 s6, 12578; GFX8-NEXT: v_mov_b32_e32 v4, 02579; GFX8-NEXT: v_mov_b32_e32 v5, 02580; GFX8-NEXT: s_waitcnt lgkmcnt(0)2581; GFX8-NEXT: s_cselect_b32 s7, s1, s02582; GFX8-NEXT: s_cmp_eq_u32 s6, 22583; GFX8-NEXT: s_cselect_b32 s7, s2, s72584; GFX8-NEXT: s_cmp_eq_u32 s6, 32585; GFX8-NEXT: s_cselect_b32 s7, s3, s72586; GFX8-NEXT: s_and_b32 s5, s5, 32587; GFX8-NEXT: s_lshl_b32 s5, s5, 32588; GFX8-NEXT: s_and_b32 s4, s4, 0xff2589; GFX8-NEXT: s_lshl_b32 s4, s4, s52590; GFX8-NEXT: s_lshl_b32 s5, 0xff, s52591; GFX8-NEXT: s_andn2_b32 s5, s7, s52592; GFX8-NEXT: s_or_b32 s4, s5, s42593; GFX8-NEXT: s_cmp_eq_u32 s6, 02594; GFX8-NEXT: s_cselect_b32 s0, s4, s02595; GFX8-NEXT: s_cmp_eq_u32 s6, 12596; GFX8-NEXT: s_cselect_b32 s1, s4, s12597; GFX8-NEXT: s_cmp_eq_u32 s6, 22598; GFX8-NEXT: s_cselect_b32 s2, s4, s22599; GFX8-NEXT: s_cmp_eq_u32 s6, 32600; GFX8-NEXT: s_cselect_b32 s3, s4, s32601; GFX8-NEXT: v_mov_b32_e32 v0, s02602; GFX8-NEXT: v_mov_b32_e32 v1, s12603; GFX8-NEXT: v_mov_b32_e32 v2, s22604; GFX8-NEXT: v_mov_b32_e32 v3, s32605; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2606; GFX8-NEXT: s_endpgm2607;2608; GFX7-LABEL: insertelement_s_v16i8_s_s:2609; GFX7: ; %bb.0:2610; GFX7-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x02611; GFX7-NEXT: s_lshr_b32 s6, s5, 22612; GFX7-NEXT: s_cmp_eq_u32 s6, 12613; GFX7-NEXT: s_waitcnt lgkmcnt(0)2614; GFX7-NEXT: s_cselect_b32 s7, s1, s02615; GFX7-NEXT: s_cmp_eq_u32 s6, 22616; GFX7-NEXT: s_cselect_b32 s7, s2, s72617; GFX7-NEXT: s_cmp_eq_u32 s6, 32618; GFX7-NEXT: s_cselect_b32 s7, s3, s72619; GFX7-NEXT: s_and_b32 s5, s5, 32620; GFX7-NEXT: s_lshl_b32 s5, s5, 32621; GFX7-NEXT: s_and_b32 s4, s4, 0xff2622; GFX7-NEXT: s_lshl_b32 s4, s4, s52623; GFX7-NEXT: s_lshl_b32 s5, 0xff, s52624; GFX7-NEXT: s_andn2_b32 s5, s7, s52625; GFX7-NEXT: s_or_b32 s4, s5, s42626; GFX7-NEXT: s_cmp_eq_u32 s6, 02627; GFX7-NEXT: s_cselect_b32 s0, s4, s02628; GFX7-NEXT: s_cmp_eq_u32 s6, 12629; GFX7-NEXT: s_cselect_b32 s1, s4, s12630; GFX7-NEXT: s_cmp_eq_u32 s6, 22631; GFX7-NEXT: s_cselect_b32 s2, s4, s22632; GFX7-NEXT: s_cmp_eq_u32 s6, 32633; GFX7-NEXT: s_cselect_b32 s3, s4, s32634; GFX7-NEXT: v_mov_b32_e32 v0, s02635; GFX7-NEXT: s_mov_b64 s[4:5], 02636; GFX7-NEXT: v_mov_b32_e32 v1, s12637; GFX7-NEXT: v_mov_b32_e32 v2, s22638; GFX7-NEXT: v_mov_b32_e32 v3, s32639; GFX7-NEXT: s_mov_b32 s6, -12640; GFX7-NEXT: s_mov_b32 s7, 0xf0002641; GFX7-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 02642; GFX7-NEXT: s_endpgm2643;2644; GFX10-LABEL: insertelement_s_v16i8_s_s:2645; GFX10: ; %bb.0:2646; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x02647; GFX10-NEXT: s_lshr_b32 s6, s5, 22648; GFX10-NEXT: v_mov_b32_e32 v4, 02649; GFX10-NEXT: s_cmp_eq_u32 s6, 12650; GFX10-NEXT: v_mov_b32_e32 v5, 02651; GFX10-NEXT: s_waitcnt lgkmcnt(0)2652; GFX10-NEXT: s_cselect_b32 s7, s1, s02653; GFX10-NEXT: s_cmp_eq_u32 s6, 22654; GFX10-NEXT: s_cselect_b32 s7, s2, s72655; GFX10-NEXT: s_cmp_eq_u32 s6, 32656; GFX10-NEXT: s_cselect_b32 s7, s3, s72657; GFX10-NEXT: s_and_b32 s5, s5, 32658; GFX10-NEXT: s_and_b32 s4, s4, 0xff2659; GFX10-NEXT: s_lshl_b32 s5, s5, 32660; GFX10-NEXT: s_lshl_b32 s8, 0xff, s52661; GFX10-NEXT: s_lshl_b32 s4, s4, s52662; GFX10-NEXT: s_andn2_b32 s5, s7, s82663; GFX10-NEXT: s_or_b32 s4, s5, s42664; GFX10-NEXT: s_cmp_eq_u32 s6, 02665; GFX10-NEXT: s_cselect_b32 s0, s4, s02666; GFX10-NEXT: s_cmp_eq_u32 s6, 12667; GFX10-NEXT: s_cselect_b32 s1, s4, s12668; GFX10-NEXT: s_cmp_eq_u32 s6, 22669; GFX10-NEXT: s_cselect_b32 s2, s4, s22670; GFX10-NEXT: s_cmp_eq_u32 s6, 32671; GFX10-NEXT: s_cselect_b32 s3, s4, s32672; GFX10-NEXT: v_mov_b32_e32 v0, s02673; GFX10-NEXT: v_mov_b32_e32 v1, s12674; GFX10-NEXT: v_mov_b32_e32 v2, s22675; GFX10-NEXT: v_mov_b32_e32 v3, s32676; GFX10-NEXT: global_store_dwordx4 v[4:5], v[0:3], off2677; GFX10-NEXT: s_endpgm2678;2679; GFX11-LABEL: insertelement_s_v16i8_s_s:2680; GFX11: ; %bb.0:2681; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x02682; GFX11-NEXT: s_lshr_b32 s6, s5, 22683; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2684; GFX11-NEXT: s_cmp_eq_u32 s6, 12685; GFX11-NEXT: s_waitcnt lgkmcnt(0)2686; GFX11-NEXT: s_cselect_b32 s7, s1, s02687; GFX11-NEXT: s_cmp_eq_u32 s6, 22688; GFX11-NEXT: s_cselect_b32 s7, s2, s72689; GFX11-NEXT: s_cmp_eq_u32 s6, 32690; GFX11-NEXT: s_cselect_b32 s7, s3, s72691; GFX11-NEXT: s_and_b32 s5, s5, 32692; GFX11-NEXT: s_and_b32 s4, s4, 0xff2693; GFX11-NEXT: s_lshl_b32 s5, s5, 32694; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)2695; GFX11-NEXT: s_lshl_b32 s8, 0xff, s52696; GFX11-NEXT: s_lshl_b32 s4, s4, s52697; GFX11-NEXT: s_and_not1_b32 s5, s7, s82698; GFX11-NEXT: s_or_b32 s4, s5, s42699; GFX11-NEXT: s_cmp_eq_u32 s6, 02700; GFX11-NEXT: s_cselect_b32 s0, s4, s02701; GFX11-NEXT: s_cmp_eq_u32 s6, 12702; GFX11-NEXT: s_cselect_b32 s1, s4, s12703; GFX11-NEXT: s_cmp_eq_u32 s6, 22704; GFX11-NEXT: s_cselect_b32 s2, s4, s22705; GFX11-NEXT: s_cmp_eq_u32 s6, 32706; GFX11-NEXT: s_cselect_b32 s3, s4, s32707; GFX11-NEXT: v_mov_b32_e32 v4, 02708; GFX11-NEXT: v_dual_mov_b32 v5, 0 :: v_dual_mov_b32 v0, s02709; GFX11-NEXT: v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s22710; GFX11-NEXT: v_mov_b32_e32 v3, s32711; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off2712; GFX11-NEXT: s_endpgm2713 %vec = load <16 x i8>, ptr addrspace(4) %ptr2714 %insert = insertelement <16 x i8> %vec, i8 %val, i32 %idx2715 store <16 x i8> %insert, ptr addrspace(1) null2716 ret void2717}2718 2719define amdgpu_ps void @insertelement_v_v16i8_s_s(ptr addrspace(1) %ptr, i8 inreg %val, i32 inreg %idx) {2720; GFX9-LABEL: insertelement_v_v16i8_s_s:2721; GFX9: ; %bb.0:2722; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off2723; GFX9-NEXT: s_and_b32 s0, s3, 32724; GFX9-NEXT: s_lshr_b32 s4, s3, 22725; GFX9-NEXT: s_and_b32 s1, s2, 0xff2726; GFX9-NEXT: s_lshl_b32 s0, s0, 32727; GFX9-NEXT: s_lshl_b32 s1, s1, s02728; GFX9-NEXT: s_lshl_b32 s0, 0xff, s02729; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s4, 12730; GFX9-NEXT: s_not_b32 s5, s02731; GFX9-NEXT: v_mov_b32_e32 v6, s12732; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], s4, 22733; GFX9-NEXT: v_cmp_eq_u32_e64 s[2:3], s4, 32734; GFX9-NEXT: v_mov_b32_e32 v4, 02735; GFX9-NEXT: v_mov_b32_e32 v5, 02736; GFX9-NEXT: s_waitcnt vmcnt(0)2737; GFX9-NEXT: v_cndmask_b32_e32 v7, v0, v1, vcc2738; GFX9-NEXT: v_cndmask_b32_e64 v7, v7, v2, s[0:1]2739; GFX9-NEXT: v_cndmask_b32_e64 v7, v7, v3, s[2:3]2740; GFX9-NEXT: v_and_or_b32 v6, v7, s5, v62741; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], s4, 02742; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v6, s[4:5]2743; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc2744; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1]2745; GFX9-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[2:3]2746; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off2747; GFX9-NEXT: s_endpgm2748;2749; GFX8-LABEL: insertelement_v_v16i8_s_s:2750; GFX8: ; %bb.0:2751; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1]2752; GFX8-NEXT: s_lshr_b32 s4, s3, 22753; GFX8-NEXT: s_and_b32 s0, s3, 32754; GFX8-NEXT: s_and_b32 s1, s2, 0xff2755; GFX8-NEXT: s_lshl_b32 s0, s0, 32756; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s4, 12757; GFX8-NEXT: s_lshl_b32 s5, s1, s02758; GFX8-NEXT: s_lshl_b32 s6, 0xff, s02759; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], s4, 22760; GFX8-NEXT: v_cmp_eq_u32_e64 s[2:3], s4, 32761; GFX8-NEXT: v_mov_b32_e32 v4, 02762; GFX8-NEXT: v_mov_b32_e32 v5, 02763; GFX8-NEXT: s_waitcnt vmcnt(0)2764; GFX8-NEXT: v_cndmask_b32_e32 v6, v0, v1, vcc2765; GFX8-NEXT: v_cndmask_b32_e64 v6, v6, v2, s[0:1]2766; GFX8-NEXT: v_cndmask_b32_e64 v6, v6, v3, s[2:3]2767; GFX8-NEXT: v_bfi_b32 v6, s6, 0, v62768; GFX8-NEXT: v_or_b32_e32 v6, s5, v62769; GFX8-NEXT: v_cmp_eq_u32_e64 s[4:5], s4, 02770; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v6, s[4:5]2771; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc2772; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1]2773; GFX8-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[2:3]2774; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2775; GFX8-NEXT: s_endpgm2776;2777; GFX7-LABEL: insertelement_v_v16i8_s_s:2778; GFX7: ; %bb.0:2779; GFX7-NEXT: s_mov_b32 s10, 02780; GFX7-NEXT: s_mov_b32 s11, 0xf0002781; GFX7-NEXT: s_mov_b64 s[8:9], 02782; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[8:11], 0 addr642783; GFX7-NEXT: s_lshr_b32 s4, s3, 22784; GFX7-NEXT: s_and_b32 s0, s3, 32785; GFX7-NEXT: s_and_b32 s1, s2, 0xff2786; GFX7-NEXT: s_lshl_b32 s0, s0, 32787; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s4, 12788; GFX7-NEXT: s_lshl_b32 s5, s1, s02789; GFX7-NEXT: s_lshl_b32 s6, 0xff, s02790; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], s4, 22791; GFX7-NEXT: v_cmp_eq_u32_e64 s[2:3], s4, 32792; GFX7-NEXT: s_mov_b64 s[8:9], 02793; GFX7-NEXT: s_mov_b32 s10, -12794; GFX7-NEXT: s_waitcnt vmcnt(0)2795; GFX7-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc2796; GFX7-NEXT: v_cndmask_b32_e64 v4, v4, v2, s[0:1]2797; GFX7-NEXT: v_cndmask_b32_e64 v4, v4, v3, s[2:3]2798; GFX7-NEXT: v_bfi_b32 v4, s6, 0, v42799; GFX7-NEXT: v_or_b32_e32 v4, s5, v42800; GFX7-NEXT: v_cmp_eq_u32_e64 s[4:5], s4, 02801; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[4:5]2802; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc2803; GFX7-NEXT: v_cndmask_b32_e64 v2, v2, v4, s[0:1]2804; GFX7-NEXT: v_cndmask_b32_e64 v3, v3, v4, s[2:3]2805; GFX7-NEXT: buffer_store_dwordx4 v[0:3], off, s[8:11], 02806; GFX7-NEXT: s_endpgm2807;2808; GFX10-LABEL: insertelement_v_v16i8_s_s:2809; GFX10: ; %bb.0:2810; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off2811; GFX10-NEXT: s_lshr_b32 s4, s3, 22812; GFX10-NEXT: s_and_b32 s1, s3, 32813; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s4, 12814; GFX10-NEXT: v_cmp_eq_u32_e64 s0, s4, 22815; GFX10-NEXT: s_lshl_b32 s3, s1, 32816; GFX10-NEXT: v_cmp_eq_u32_e64 s1, s4, 32817; GFX10-NEXT: s_and_b32 s2, s2, 0xff2818; GFX10-NEXT: s_lshl_b32 s5, 0xff, s32819; GFX10-NEXT: s_lshl_b32 s2, s2, s32820; GFX10-NEXT: s_not_b32 s3, s52821; GFX10-NEXT: s_waitcnt vmcnt(0)2822; GFX10-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc_lo2823; GFX10-NEXT: v_cndmask_b32_e64 v4, v4, v2, s02824; GFX10-NEXT: v_cndmask_b32_e64 v4, v4, v3, s12825; GFX10-NEXT: v_and_or_b32 v6, v4, s3, s22826; GFX10-NEXT: v_cmp_eq_u32_e64 s2, s4, 02827; GFX10-NEXT: v_mov_b32_e32 v4, 02828; GFX10-NEXT: v_mov_b32_e32 v5, 02829; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc_lo2830; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v6, s22831; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, v6, s02832; GFX10-NEXT: v_cndmask_b32_e64 v3, v3, v6, s12833; GFX10-NEXT: global_store_dwordx4 v[4:5], v[0:3], off2834; GFX10-NEXT: s_endpgm2835;2836; GFX11-LABEL: insertelement_v_v16i8_s_s:2837; GFX11: ; %bb.0:2838; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off2839; GFX11-NEXT: s_lshr_b32 s4, s3, 22840; GFX11-NEXT: s_and_b32 s1, s3, 32841; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s4, 12842; GFX11-NEXT: v_cmp_eq_u32_e64 s0, s4, 22843; GFX11-NEXT: s_lshl_b32 s3, s1, 32844; GFX11-NEXT: v_cmp_eq_u32_e64 s1, s4, 32845; GFX11-NEXT: s_and_b32 s2, s2, 0xff2846; GFX11-NEXT: s_lshl_b32 s5, 0xff, s32847; GFX11-NEXT: s_lshl_b32 s2, s2, s32848; GFX11-NEXT: s_not_b32 s3, s52849; GFX11-NEXT: s_waitcnt vmcnt(0)2850; GFX11-NEXT: v_cndmask_b32_e32 v4, v0, v1, vcc_lo2851; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2852; GFX11-NEXT: v_cndmask_b32_e64 v4, v4, v2, s02853; GFX11-NEXT: v_cndmask_b32_e64 v4, v4, v3, s12854; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)2855; GFX11-NEXT: v_and_or_b32 v6, v4, s3, s22856; GFX11-NEXT: v_cmp_eq_u32_e64 s2, s4, 02857; GFX11-NEXT: v_mov_b32_e32 v4, 02858; GFX11-NEXT: v_mov_b32_e32 v5, 02859; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc_lo2860; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4)2861; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v6, s22862; GFX11-NEXT: v_cndmask_b32_e64 v2, v2, v6, s02863; GFX11-NEXT: v_cndmask_b32_e64 v3, v3, v6, s12864; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off2865; GFX11-NEXT: s_endpgm2866 %vec = load <16 x i8>, ptr addrspace(1 ) %ptr2867 %insert = insertelement <16 x i8> %vec, i8 %val, i32 %idx2868 store <16 x i8> %insert, ptr addrspace(1) null2869 ret void2870}2871 2872define amdgpu_ps void @insertelement_s_v16i8_v_s(ptr addrspace(4) inreg %ptr, i8 %val, i32 inreg %idx) {2873; GFX9-LABEL: insertelement_s_v16i8_v_s:2874; GFX9: ; %bb.0:2875; GFX9-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x02876; GFX9-NEXT: s_lshr_b32 s5, s4, 22877; GFX9-NEXT: s_cmp_eq_u32 s5, 12878; GFX9-NEXT: v_and_b32_e32 v0, 0xff, v02879; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s5, 02880; GFX9-NEXT: s_waitcnt lgkmcnt(0)2881; GFX9-NEXT: s_cselect_b32 s6, s1, s02882; GFX9-NEXT: s_cmp_eq_u32 s5, 22883; GFX9-NEXT: s_cselect_b32 s6, s2, s62884; GFX9-NEXT: s_cmp_eq_u32 s5, 32885; GFX9-NEXT: s_cselect_b32 s6, s3, s62886; GFX9-NEXT: s_and_b32 s4, s4, 32887; GFX9-NEXT: s_lshl_b32 s4, s4, 32888; GFX9-NEXT: s_lshl_b32 s7, 0xff, s42889; GFX9-NEXT: s_andn2_b32 s6, s6, s72890; GFX9-NEXT: v_mov_b32_e32 v1, s62891; GFX9-NEXT: v_lshl_or_b32 v6, v0, s4, v12892; GFX9-NEXT: v_mov_b32_e32 v0, s02893; GFX9-NEXT: v_mov_b32_e32 v1, s12894; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v6, vcc2895; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s5, 12896; GFX9-NEXT: v_mov_b32_e32 v2, s22897; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc2898; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s5, 22899; GFX9-NEXT: v_mov_b32_e32 v3, s32900; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v6, vcc2901; GFX9-NEXT: v_mov_b32_e32 v4, 02902; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s5, 32903; GFX9-NEXT: v_mov_b32_e32 v5, 02904; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v6, vcc2905; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off2906; GFX9-NEXT: s_endpgm2907;2908; GFX8-LABEL: insertelement_s_v16i8_v_s:2909; GFX8: ; %bb.0:2910; GFX8-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x02911; GFX8-NEXT: s_lshr_b32 s5, s4, 22912; GFX8-NEXT: s_cmp_eq_u32 s5, 12913; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s5, 02914; GFX8-NEXT: v_mov_b32_e32 v4, 02915; GFX8-NEXT: s_waitcnt lgkmcnt(0)2916; GFX8-NEXT: s_cselect_b32 s6, s1, s02917; GFX8-NEXT: s_cmp_eq_u32 s5, 22918; GFX8-NEXT: s_cselect_b32 s6, s2, s62919; GFX8-NEXT: s_cmp_eq_u32 s5, 32920; GFX8-NEXT: s_cselect_b32 s6, s3, s62921; GFX8-NEXT: s_and_b32 s4, s4, 32922; GFX8-NEXT: s_lshl_b32 s4, s4, 32923; GFX8-NEXT: v_mov_b32_e32 v1, s42924; GFX8-NEXT: s_lshl_b32 s4, 0xff, s42925; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_02926; GFX8-NEXT: s_andn2_b32 s4, s6, s42927; GFX8-NEXT: v_or_b32_e32 v6, s4, v02928; GFX8-NEXT: v_mov_b32_e32 v0, s02929; GFX8-NEXT: v_mov_b32_e32 v1, s12930; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v6, vcc2931; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s5, 12932; GFX8-NEXT: v_mov_b32_e32 v2, s22933; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc2934; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s5, 22935; GFX8-NEXT: v_mov_b32_e32 v3, s32936; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v6, vcc2937; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s5, 32938; GFX8-NEXT: v_mov_b32_e32 v5, 02939; GFX8-NEXT: v_cndmask_b32_e32 v3, v3, v6, vcc2940; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]2941; GFX8-NEXT: s_endpgm2942;2943; GFX7-LABEL: insertelement_s_v16i8_v_s:2944; GFX7: ; %bb.0:2945; GFX7-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x02946; GFX7-NEXT: s_lshr_b32 s5, s4, 22947; GFX7-NEXT: s_cmp_eq_u32 s5, 12948; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v02949; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s5, 02950; GFX7-NEXT: s_waitcnt lgkmcnt(0)2951; GFX7-NEXT: s_cselect_b32 s6, s1, s02952; GFX7-NEXT: s_cmp_eq_u32 s5, 22953; GFX7-NEXT: s_cselect_b32 s6, s2, s62954; GFX7-NEXT: s_cmp_eq_u32 s5, 32955; GFX7-NEXT: s_cselect_b32 s6, s3, s62956; GFX7-NEXT: s_and_b32 s4, s4, 32957; GFX7-NEXT: s_lshl_b32 s4, s4, 32958; GFX7-NEXT: v_lshlrev_b32_e32 v0, s4, v02959; GFX7-NEXT: s_lshl_b32 s4, 0xff, s42960; GFX7-NEXT: s_andn2_b32 s4, s6, s42961; GFX7-NEXT: v_or_b32_e32 v4, s4, v02962; GFX7-NEXT: v_mov_b32_e32 v0, s02963; GFX7-NEXT: v_mov_b32_e32 v1, s12964; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc2965; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s5, 12966; GFX7-NEXT: v_mov_b32_e32 v2, s22967; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc2968; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s5, 22969; GFX7-NEXT: v_mov_b32_e32 v3, s32970; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc2971; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s5, 32972; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc2973; GFX7-NEXT: s_mov_b64 s[0:1], 02974; GFX7-NEXT: s_mov_b32 s2, -12975; GFX7-NEXT: s_mov_b32 s3, 0xf0002976; GFX7-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 02977; GFX7-NEXT: s_endpgm2978;2979; GFX10-LABEL: insertelement_s_v16i8_v_s:2980; GFX10: ; %bb.0:2981; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x02982; GFX10-NEXT: s_lshr_b32 s5, s4, 22983; GFX10-NEXT: v_and_b32_e32 v4, 0xff, v02984; GFX10-NEXT: s_cmp_eq_u32 s5, 12985; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s5, 02986; GFX10-NEXT: s_waitcnt lgkmcnt(0)2987; GFX10-NEXT: s_cselect_b32 s6, s1, s02988; GFX10-NEXT: s_cmp_eq_u32 s5, 22989; GFX10-NEXT: v_mov_b32_e32 v0, s02990; GFX10-NEXT: s_cselect_b32 s6, s2, s62991; GFX10-NEXT: s_cmp_eq_u32 s5, 32992; GFX10-NEXT: v_mov_b32_e32 v1, s12993; GFX10-NEXT: s_cselect_b32 s6, s3, s62994; GFX10-NEXT: s_and_b32 s4, s4, 32995; GFX10-NEXT: v_mov_b32_e32 v2, s22996; GFX10-NEXT: s_lshl_b32 s4, s4, 32997; GFX10-NEXT: v_mov_b32_e32 v3, s32998; GFX10-NEXT: s_lshl_b32 s7, 0xff, s42999; GFX10-NEXT: s_andn2_b32 s6, s6, s73000; GFX10-NEXT: v_lshl_or_b32 v6, v4, s4, s63001; GFX10-NEXT: v_mov_b32_e32 v4, 03002; GFX10-NEXT: v_mov_b32_e32 v5, 03003; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v6, vcc_lo3004; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s5, 13005; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc_lo3006; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s5, 23007; GFX10-NEXT: v_cndmask_b32_e32 v2, v2, v6, vcc_lo3008; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s5, 33009; GFX10-NEXT: v_cndmask_b32_e32 v3, v3, v6, vcc_lo3010; GFX10-NEXT: global_store_dwordx4 v[4:5], v[0:3], off3011; GFX10-NEXT: s_endpgm3012;3013; GFX11-LABEL: insertelement_s_v16i8_v_s:3014; GFX11: ; %bb.0:3015; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x03016; GFX11-NEXT: s_lshr_b32 s5, s4, 23017; GFX11-NEXT: v_and_b32_e32 v4, 0xff, v03018; GFX11-NEXT: s_cmp_eq_u32 s5, 13019; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s5, 03020; GFX11-NEXT: s_waitcnt lgkmcnt(0)3021; GFX11-NEXT: s_cselect_b32 s6, s1, s03022; GFX11-NEXT: s_cmp_eq_u32 s5, 23023; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v3, s33024; GFX11-NEXT: s_cselect_b32 s6, s2, s63025; GFX11-NEXT: s_cmp_eq_u32 s5, 33026; GFX11-NEXT: v_mov_b32_e32 v1, s13027; GFX11-NEXT: s_cselect_b32 s6, s3, s63028; GFX11-NEXT: s_and_b32 s4, s4, 33029; GFX11-NEXT: v_mov_b32_e32 v2, s23030; GFX11-NEXT: s_lshl_b32 s4, s4, 33031; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3032; GFX11-NEXT: s_lshl_b32 s7, 0xff, s43033; GFX11-NEXT: s_and_not1_b32 s6, s6, s73034; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)3035; GFX11-NEXT: v_lshl_or_b32 v6, v4, s4, s63036; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v6, vcc_lo3037; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s5, 13038; GFX11-NEXT: v_mov_b32_e32 v4, 03039; GFX11-NEXT: v_mov_b32_e32 v5, 03040; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc_lo3041; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s5, 23042; GFX11-NEXT: v_cndmask_b32_e32 v2, v2, v6, vcc_lo3043; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s5, 33044; GFX11-NEXT: v_cndmask_b32_e32 v3, v3, v6, vcc_lo3045; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off3046; GFX11-NEXT: s_endpgm3047 %vec = load <16 x i8>, ptr addrspace(4) %ptr3048 %insert = insertelement <16 x i8> %vec, i8 %val, i32 %idx3049 store <16 x i8> %insert, ptr addrspace(1) null3050 ret void3051}3052 3053define amdgpu_ps void @insertelement_s_v16i8_s_v(ptr addrspace(4) inreg %ptr, i8 inreg %val, i32 %idx) {3054; GFX9-LABEL: insertelement_s_v16i8_s_v:3055; GFX9: ; %bb.0:3056; GFX9-NEXT: s_load_dwordx4 s[8:11], s[2:3], 0x03057; GFX9-NEXT: v_lshrrev_b32_e32 v4, 2, v03058; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v43059; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v43060; GFX9-NEXT: v_and_b32_e32 v0, 3, v03061; GFX9-NEXT: s_waitcnt lgkmcnt(0)3062; GFX9-NEXT: v_mov_b32_e32 v1, s83063; GFX9-NEXT: v_mov_b32_e32 v2, s93064; GFX9-NEXT: v_mov_b32_e32 v3, s103065; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc3066; GFX9-NEXT: v_cndmask_b32_e64 v1, v1, v3, s[0:1]3067; GFX9-NEXT: v_lshlrev_b32_e32 v0, 3, v03068; GFX9-NEXT: s_and_b32 s4, s4, 0xff3069; GFX9-NEXT: v_mov_b32_e32 v3, 0xff3070; GFX9-NEXT: v_mov_b32_e32 v5, s113071; GFX9-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v43072; GFX9-NEXT: v_lshlrev_b32_e64 v2, v0, s43073; GFX9-NEXT: v_lshlrev_b32_e32 v0, v0, v33074; GFX9-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[2:3]3075; GFX9-NEXT: v_not_b32_e32 v0, v03076; GFX9-NEXT: v_and_or_b32 v6, v1, v0, v23077; GFX9-NEXT: v_mov_b32_e32 v0, s83078; GFX9-NEXT: v_mov_b32_e32 v1, s93079; GFX9-NEXT: v_mov_b32_e32 v2, s103080; GFX9-NEXT: v_mov_b32_e32 v3, s113081; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v43082; GFX9-NEXT: v_mov_b32_e32 v4, 03083; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v6, s[4:5]3084; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc3085; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1]3086; GFX9-NEXT: v_mov_b32_e32 v5, 03087; GFX9-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[2:3]3088; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off3089; GFX9-NEXT: s_endpgm3090;3091; GFX8-LABEL: insertelement_s_v16i8_s_v:3092; GFX8: ; %bb.0:3093; GFX8-NEXT: s_load_dwordx4 s[8:11], s[2:3], 0x03094; GFX8-NEXT: v_lshrrev_b32_e32 v4, 2, v03095; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v43096; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v43097; GFX8-NEXT: v_and_b32_e32 v0, 3, v03098; GFX8-NEXT: s_waitcnt lgkmcnt(0)3099; GFX8-NEXT: v_mov_b32_e32 v1, s83100; GFX8-NEXT: v_mov_b32_e32 v2, s93101; GFX8-NEXT: v_mov_b32_e32 v3, s103102; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc3103; GFX8-NEXT: v_mov_b32_e32 v5, s113104; GFX8-NEXT: v_cndmask_b32_e64 v1, v1, v3, s[0:1]3105; GFX8-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v43106; GFX8-NEXT: v_lshlrev_b32_e32 v0, 3, v03107; GFX8-NEXT: s_and_b32 s4, s4, 0xff3108; GFX8-NEXT: v_mov_b32_e32 v3, 0xff3109; GFX8-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[2:3]3110; GFX8-NEXT: v_lshlrev_b32_e64 v2, v0, s43111; GFX8-NEXT: v_lshlrev_b32_e32 v0, v0, v33112; GFX8-NEXT: v_bfi_b32 v0, v0, 0, v13113; GFX8-NEXT: v_or_b32_e32 v6, v0, v23114; GFX8-NEXT: v_mov_b32_e32 v0, s83115; GFX8-NEXT: v_mov_b32_e32 v1, s93116; GFX8-NEXT: v_mov_b32_e32 v2, s103117; GFX8-NEXT: v_mov_b32_e32 v3, s113118; GFX8-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v43119; GFX8-NEXT: v_mov_b32_e32 v4, 03120; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v6, s[4:5]3121; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc3122; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1]3123; GFX8-NEXT: v_mov_b32_e32 v5, 03124; GFX8-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[2:3]3125; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]3126; GFX8-NEXT: s_endpgm3127;3128; GFX7-LABEL: insertelement_s_v16i8_s_v:3129; GFX7: ; %bb.0:3130; GFX7-NEXT: s_load_dwordx4 s[8:11], s[2:3], 0x03131; GFX7-NEXT: v_lshrrev_b32_e32 v4, 2, v03132; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v43133; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v43134; GFX7-NEXT: v_and_b32_e32 v0, 3, v03135; GFX7-NEXT: s_waitcnt lgkmcnt(0)3136; GFX7-NEXT: v_mov_b32_e32 v1, s83137; GFX7-NEXT: v_mov_b32_e32 v2, s93138; GFX7-NEXT: v_mov_b32_e32 v3, s103139; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc3140; GFX7-NEXT: v_mov_b32_e32 v5, s113141; GFX7-NEXT: v_cndmask_b32_e64 v1, v1, v3, s[0:1]3142; GFX7-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v43143; GFX7-NEXT: v_lshlrev_b32_e32 v0, 3, v03144; GFX7-NEXT: s_and_b32 s4, s4, 0xff3145; GFX7-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[2:3]3146; GFX7-NEXT: v_lshl_b32_e32 v2, s4, v03147; GFX7-NEXT: v_lshl_b32_e32 v0, 0xff, v03148; GFX7-NEXT: v_bfi_b32 v0, v0, 0, v13149; GFX7-NEXT: v_or_b32_e32 v5, v0, v23150; GFX7-NEXT: v_mov_b32_e32 v0, s83151; GFX7-NEXT: v_mov_b32_e32 v1, s93152; GFX7-NEXT: v_mov_b32_e32 v2, s103153; GFX7-NEXT: v_mov_b32_e32 v3, s113154; GFX7-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v43155; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v5, s[4:5]3156; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc3157; GFX7-NEXT: v_cndmask_b32_e64 v2, v2, v5, s[0:1]3158; GFX7-NEXT: v_cndmask_b32_e64 v3, v3, v5, s[2:3]3159; GFX7-NEXT: s_mov_b64 s[0:1], 03160; GFX7-NEXT: s_mov_b32 s2, -13161; GFX7-NEXT: s_mov_b32 s3, 0xf0003162; GFX7-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 03163; GFX7-NEXT: s_endpgm3164;3165; GFX10-LABEL: insertelement_s_v16i8_s_v:3166; GFX10: ; %bb.0:3167; GFX10-NEXT: s_load_dwordx4 s[8:11], s[2:3], 0x03168; GFX10-NEXT: v_lshrrev_b32_e32 v6, 2, v03169; GFX10-NEXT: v_and_b32_e32 v1, 3, v03170; GFX10-NEXT: s_and_b32 s1, s4, 0xff3171; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v63172; GFX10-NEXT: v_lshlrev_b32_e32 v1, 3, v13173; GFX10-NEXT: v_cmp_eq_u32_e64 s0, 2, v63174; GFX10-NEXT: v_cmp_eq_u32_e64 s2, 0, v63175; GFX10-NEXT: v_lshlrev_b32_e64 v2, v1, 0xff3176; GFX10-NEXT: v_lshlrev_b32_e64 v4, v1, s13177; GFX10-NEXT: v_cmp_eq_u32_e64 s1, 3, v63178; GFX10-NEXT: v_not_b32_e32 v5, v23179; GFX10-NEXT: s_waitcnt lgkmcnt(0)3180; GFX10-NEXT: v_mov_b32_e32 v0, s93181; GFX10-NEXT: v_cndmask_b32_e32 v0, s8, v0, vcc_lo3182; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, s10, s03183; GFX10-NEXT: v_cndmask_b32_e64 v7, v0, s11, s13184; GFX10-NEXT: v_mov_b32_e32 v0, s83185; GFX10-NEXT: v_mov_b32_e32 v1, s93186; GFX10-NEXT: v_mov_b32_e32 v2, s103187; GFX10-NEXT: v_mov_b32_e32 v3, s113188; GFX10-NEXT: v_and_or_b32 v7, v7, v5, v43189; GFX10-NEXT: v_mov_b32_e32 v4, 03190; GFX10-NEXT: v_mov_b32_e32 v5, 03191; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v7, s23192; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v7, vcc_lo3193; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, v7, s03194; GFX10-NEXT: v_cndmask_b32_e64 v3, v3, v7, s13195; GFX10-NEXT: global_store_dwordx4 v[4:5], v[0:3], off3196; GFX10-NEXT: s_endpgm3197;3198; GFX11-LABEL: insertelement_s_v16i8_s_v:3199; GFX11: ; %bb.0:3200; GFX11-NEXT: s_load_b128 s[8:11], s[2:3], 0x03201; GFX11-NEXT: v_lshrrev_b32_e32 v6, 2, v03202; GFX11-NEXT: v_and_b32_e32 v1, 3, v03203; GFX11-NEXT: s_and_b32 s1, s4, 0xff3204; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_1)3205; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v63206; GFX11-NEXT: v_cmp_eq_u32_e64 s0, 2, v63207; GFX11-NEXT: v_cmp_eq_u32_e64 s2, 0, v63208; GFX11-NEXT: s_waitcnt lgkmcnt(0)3209; GFX11-NEXT: v_dual_mov_b32 v0, s9 :: v_dual_lshlrev_b32 v1, 3, v13210; GFX11-NEXT: v_cndmask_b32_e32 v0, s8, v0, vcc_lo3211; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)3212; GFX11-NEXT: v_lshlrev_b32_e64 v2, v1, 0xff3213; GFX11-NEXT: v_lshlrev_b32_e64 v4, v1, s13214; GFX11-NEXT: v_cmp_eq_u32_e64 s1, 3, v63215; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, s10, s03216; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)3217; GFX11-NEXT: v_not_b32_e32 v5, v23218; GFX11-NEXT: v_cndmask_b32_e64 v7, v0, s11, s13219; GFX11-NEXT: v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v1, s93220; GFX11-NEXT: v_dual_mov_b32 v2, s10 :: v_dual_mov_b32 v3, s113221; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)3222; GFX11-NEXT: v_and_or_b32 v7, v7, v5, v43223; GFX11-NEXT: v_mov_b32_e32 v4, 03224; GFX11-NEXT: v_mov_b32_e32 v5, 03225; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v7, s23226; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v7, vcc_lo3227; GFX11-NEXT: v_cndmask_b32_e64 v2, v2, v7, s03228; GFX11-NEXT: v_cndmask_b32_e64 v3, v3, v7, s13229; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off3230; GFX11-NEXT: s_endpgm3231 %vec = load <16 x i8>, ptr addrspace(4) %ptr3232 %insert = insertelement <16 x i8> %vec, i8 %val, i32 %idx3233 store <16 x i8> %insert, ptr addrspace(1) null3234 ret void3235}3236 3237define amdgpu_ps void @insertelement_s_v16i8_v_v(ptr addrspace(4) inreg %ptr, i8 %val, i32 %idx) {3238; GFX9-LABEL: insertelement_s_v16i8_v_v:3239; GFX9: ; %bb.0:3240; GFX9-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03241; GFX9-NEXT: v_lshrrev_b32_e32 v4, 2, v13242; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v43243; GFX9-NEXT: v_and_b32_e32 v1, 3, v13244; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v43245; GFX9-NEXT: s_waitcnt lgkmcnt(0)3246; GFX9-NEXT: v_mov_b32_e32 v2, s43247; GFX9-NEXT: v_mov_b32_e32 v3, s53248; GFX9-NEXT: v_mov_b32_e32 v5, s63249; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v3, vcc3250; GFX9-NEXT: v_lshlrev_b32_e32 v1, 3, v13251; GFX9-NEXT: v_mov_b32_e32 v3, 0xff3252; GFX9-NEXT: v_mov_b32_e32 v6, s73253; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v5, s[0:1]3254; GFX9-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v43255; GFX9-NEXT: v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03256; GFX9-NEXT: v_lshlrev_b32_e32 v1, v1, v33257; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[2:3]3258; GFX9-NEXT: v_not_b32_e32 v1, v13259; GFX9-NEXT: v_and_or_b32 v6, v2, v1, v03260; GFX9-NEXT: v_mov_b32_e32 v0, s43261; GFX9-NEXT: v_mov_b32_e32 v1, s53262; GFX9-NEXT: v_mov_b32_e32 v2, s63263; GFX9-NEXT: v_mov_b32_e32 v3, s73264; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v43265; GFX9-NEXT: v_mov_b32_e32 v4, 03266; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v6, s[4:5]3267; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc3268; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1]3269; GFX9-NEXT: v_mov_b32_e32 v5, 03270; GFX9-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[2:3]3271; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off3272; GFX9-NEXT: s_endpgm3273;3274; GFX8-LABEL: insertelement_s_v16i8_v_v:3275; GFX8: ; %bb.0:3276; GFX8-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03277; GFX8-NEXT: v_lshrrev_b32_e32 v4, 2, v13278; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v43279; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v43280; GFX8-NEXT: v_and_b32_e32 v1, 3, v13281; GFX8-NEXT: s_waitcnt lgkmcnt(0)3282; GFX8-NEXT: v_mov_b32_e32 v2, s43283; GFX8-NEXT: v_mov_b32_e32 v3, s53284; GFX8-NEXT: v_mov_b32_e32 v5, s63285; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v3, vcc3286; GFX8-NEXT: v_mov_b32_e32 v6, s73287; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v5, s[0:1]3288; GFX8-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v43289; GFX8-NEXT: v_lshlrev_b32_e32 v1, 3, v13290; GFX8-NEXT: v_mov_b32_e32 v3, 0xff3291; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[2:3]3292; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03293; GFX8-NEXT: v_lshlrev_b32_e32 v1, v1, v33294; GFX8-NEXT: v_bfi_b32 v1, v1, 0, v23295; GFX8-NEXT: v_or_b32_e32 v6, v1, v03296; GFX8-NEXT: v_mov_b32_e32 v0, s43297; GFX8-NEXT: v_mov_b32_e32 v1, s53298; GFX8-NEXT: v_mov_b32_e32 v2, s63299; GFX8-NEXT: v_mov_b32_e32 v3, s73300; GFX8-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v43301; GFX8-NEXT: v_mov_b32_e32 v4, 03302; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v6, s[4:5]3303; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc3304; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1]3305; GFX8-NEXT: v_mov_b32_e32 v5, 03306; GFX8-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[2:3]3307; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]3308; GFX8-NEXT: s_endpgm3309;3310; GFX7-LABEL: insertelement_s_v16i8_v_v:3311; GFX7: ; %bb.0:3312; GFX7-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03313; GFX7-NEXT: v_lshrrev_b32_e32 v4, 2, v13314; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v43315; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v43316; GFX7-NEXT: v_and_b32_e32 v1, 3, v13317; GFX7-NEXT: s_waitcnt lgkmcnt(0)3318; GFX7-NEXT: v_mov_b32_e32 v2, s43319; GFX7-NEXT: v_mov_b32_e32 v3, s53320; GFX7-NEXT: v_mov_b32_e32 v5, s63321; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v3, vcc3322; GFX7-NEXT: v_mov_b32_e32 v6, s73323; GFX7-NEXT: v_cndmask_b32_e64 v2, v2, v5, s[0:1]3324; GFX7-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v43325; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v13326; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v03327; GFX7-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[2:3]3328; GFX7-NEXT: v_lshlrev_b32_e32 v0, v1, v03329; GFX7-NEXT: v_lshl_b32_e32 v1, 0xff, v13330; GFX7-NEXT: v_bfi_b32 v1, v1, 0, v23331; GFX7-NEXT: v_or_b32_e32 v5, v1, v03332; GFX7-NEXT: v_mov_b32_e32 v0, s43333; GFX7-NEXT: v_mov_b32_e32 v1, s53334; GFX7-NEXT: v_mov_b32_e32 v2, s63335; GFX7-NEXT: v_mov_b32_e32 v3, s73336; GFX7-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v43337; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v5, s[4:5]3338; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc3339; GFX7-NEXT: v_cndmask_b32_e64 v2, v2, v5, s[0:1]3340; GFX7-NEXT: v_cndmask_b32_e64 v3, v3, v5, s[2:3]3341; GFX7-NEXT: s_mov_b64 s[0:1], 03342; GFX7-NEXT: s_mov_b32 s2, -13343; GFX7-NEXT: s_mov_b32 s3, 0xf0003344; GFX7-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 03345; GFX7-NEXT: s_endpgm3346;3347; GFX10-LABEL: insertelement_s_v16i8_v_v:3348; GFX10: ; %bb.0:3349; GFX10-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03350; GFX10-NEXT: v_lshrrev_b32_e32 v6, 2, v13351; GFX10-NEXT: v_and_b32_e32 v2, 3, v13352; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v63353; GFX10-NEXT: v_lshlrev_b32_e32 v2, 3, v23354; GFX10-NEXT: v_cmp_eq_u32_e64 s0, 2, v63355; GFX10-NEXT: v_cmp_eq_u32_e64 s1, 3, v63356; GFX10-NEXT: s_mov_b32 null, 03357; GFX10-NEXT: v_cmp_eq_u32_e64 s2, 0, v63358; GFX10-NEXT: v_lshlrev_b32_e64 v3, v2, 0xff3359; GFX10-NEXT: v_lshlrev_b32_sdwa v4, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03360; GFX10-NEXT: v_not_b32_e32 v5, v33361; GFX10-NEXT: s_waitcnt lgkmcnt(0)3362; GFX10-NEXT: v_mov_b32_e32 v1, s53363; GFX10-NEXT: v_cndmask_b32_e32 v1, s4, v1, vcc_lo3364; GFX10-NEXT: v_cndmask_b32_e64 v1, v1, s6, s03365; GFX10-NEXT: v_cndmask_b32_e64 v7, v1, s7, s13366; GFX10-NEXT: v_mov_b32_e32 v0, s43367; GFX10-NEXT: v_mov_b32_e32 v1, s53368; GFX10-NEXT: v_mov_b32_e32 v2, s63369; GFX10-NEXT: v_mov_b32_e32 v3, s73370; GFX10-NEXT: v_and_or_b32 v7, v7, v5, v43371; GFX10-NEXT: v_mov_b32_e32 v4, 03372; GFX10-NEXT: v_mov_b32_e32 v5, 03373; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v7, s23374; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v7, vcc_lo3375; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, v7, s03376; GFX10-NEXT: v_cndmask_b32_e64 v3, v3, v7, s13377; GFX10-NEXT: global_store_dwordx4 v[4:5], v[0:3], off3378; GFX10-NEXT: s_endpgm3379;3380; GFX11-LABEL: insertelement_s_v16i8_v_v:3381; GFX11: ; %bb.0:3382; GFX11-NEXT: s_load_b128 s[4:7], s[2:3], 0x03383; GFX11-NEXT: v_lshrrev_b32_e32 v6, 2, v13384; GFX11-NEXT: v_and_b32_e32 v2, 3, v13385; GFX11-NEXT: v_and_b32_e32 v0, 0xff, v03386; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)3387; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v63388; GFX11-NEXT: v_cmp_eq_u32_e64 s0, 2, v63389; GFX11-NEXT: v_cmp_eq_u32_e64 s1, 3, v63390; GFX11-NEXT: v_cmp_eq_u32_e64 s2, 0, v63391; GFX11-NEXT: s_waitcnt lgkmcnt(0)3392; GFX11-NEXT: v_dual_mov_b32 v1, s5 :: v_dual_lshlrev_b32 v2, 3, v23393; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)3394; GFX11-NEXT: v_cndmask_b32_e32 v1, s4, v1, vcc_lo3395; GFX11-NEXT: v_lshlrev_b32_e64 v3, v2, 0xff3396; GFX11-NEXT: v_lshlrev_b32_e32 v4, v2, v03397; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)3398; GFX11-NEXT: v_cndmask_b32_e64 v1, v1, s6, s03399; GFX11-NEXT: v_not_b32_e32 v5, v33400; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)3401; GFX11-NEXT: v_cndmask_b32_e64 v7, v1, s7, s13402; GFX11-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s53403; GFX11-NEXT: v_mov_b32_e32 v3, s73404; GFX11-NEXT: v_and_or_b32 v7, v7, v5, v43405; GFX11-NEXT: v_mov_b32_e32 v2, s63406; GFX11-NEXT: v_mov_b32_e32 v4, 03407; GFX11-NEXT: v_mov_b32_e32 v5, 03408; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4)3409; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v7, s23410; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v7, vcc_lo3411; GFX11-NEXT: v_cndmask_b32_e64 v2, v2, v7, s03412; GFX11-NEXT: v_cndmask_b32_e64 v3, v3, v7, s13413; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off3414; GFX11-NEXT: s_endpgm3415 %vec = load <16 x i8>, ptr addrspace(4) %ptr3416 %insert = insertelement <16 x i8> %vec, i8 %val, i32 %idx3417 store <16 x i8> %insert, ptr addrspace(1) null3418 ret void3419}3420 3421define amdgpu_ps void @insertelement_v_v16i8_s_v(ptr addrspace(1) %ptr, i8 inreg %val, i32 %idx) {3422; GFX9-LABEL: insertelement_v_v16i8_s_v:3423; GFX9: ; %bb.0:3424; GFX9-NEXT: global_load_dwordx4 v[3:6], v[0:1], off3425; GFX9-NEXT: v_lshrrev_b32_e32 v1, 2, v23426; GFX9-NEXT: v_and_b32_e32 v2, 3, v23427; GFX9-NEXT: v_mov_b32_e32 v0, 0xff3428; GFX9-NEXT: s_and_b32 s0, s2, 0xff3429; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v23430; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v13431; GFX9-NEXT: v_lshlrev_b32_e64 v9, v2, s03432; GFX9-NEXT: v_lshlrev_b32_e32 v0, v2, v03433; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v13434; GFX9-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v13435; GFX9-NEXT: v_not_b32_e32 v0, v03436; GFX9-NEXT: v_mov_b32_e32 v7, 03437; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13438; GFX9-NEXT: v_mov_b32_e32 v8, 03439; GFX9-NEXT: s_waitcnt vmcnt(0)3440; GFX9-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc3441; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v5, s[0:1]3442; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[2:3]3443; GFX9-NEXT: v_and_or_b32 v9, v2, v0, v93444; GFX9-NEXT: v_cndmask_b32_e64 v0, v3, v9, s[4:5]3445; GFX9-NEXT: v_cndmask_b32_e32 v1, v4, v9, vcc3446; GFX9-NEXT: v_cndmask_b32_e64 v2, v5, v9, s[0:1]3447; GFX9-NEXT: v_cndmask_b32_e64 v3, v6, v9, s[2:3]3448; GFX9-NEXT: global_store_dwordx4 v[7:8], v[0:3], off3449; GFX9-NEXT: s_endpgm3450;3451; GFX8-LABEL: insertelement_v_v16i8_s_v:3452; GFX8: ; %bb.0:3453; GFX8-NEXT: flat_load_dwordx4 v[3:6], v[0:1]3454; GFX8-NEXT: v_lshrrev_b32_e32 v1, 2, v23455; GFX8-NEXT: v_and_b32_e32 v2, 3, v23456; GFX8-NEXT: v_mov_b32_e32 v0, 0xff3457; GFX8-NEXT: s_and_b32 s0, s2, 0xff3458; GFX8-NEXT: v_lshlrev_b32_e32 v2, 3, v23459; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v13460; GFX8-NEXT: v_lshlrev_b32_e64 v9, v2, s03461; GFX8-NEXT: v_lshlrev_b32_e32 v0, v2, v03462; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v13463; GFX8-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v13464; GFX8-NEXT: v_mov_b32_e32 v7, 03465; GFX8-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13466; GFX8-NEXT: v_mov_b32_e32 v8, 03467; GFX8-NEXT: s_waitcnt vmcnt(0)3468; GFX8-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc3469; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v5, s[0:1]3470; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[2:3]3471; GFX8-NEXT: v_bfi_b32 v0, v0, 0, v23472; GFX8-NEXT: v_or_b32_e32 v9, v0, v93473; GFX8-NEXT: v_cndmask_b32_e64 v0, v3, v9, s[4:5]3474; GFX8-NEXT: v_cndmask_b32_e32 v1, v4, v9, vcc3475; GFX8-NEXT: v_cndmask_b32_e64 v2, v5, v9, s[0:1]3476; GFX8-NEXT: v_cndmask_b32_e64 v3, v6, v9, s[2:3]3477; GFX8-NEXT: flat_store_dwordx4 v[7:8], v[0:3]3478; GFX8-NEXT: s_endpgm3479;3480; GFX7-LABEL: insertelement_v_v16i8_s_v:3481; GFX7: ; %bb.0:3482; GFX7-NEXT: s_mov_b32 s10, 03483; GFX7-NEXT: s_mov_b32 s11, 0xf0003484; GFX7-NEXT: s_mov_b64 s[8:9], 03485; GFX7-NEXT: buffer_load_dwordx4 v[3:6], v[0:1], s[8:11], 0 addr643486; GFX7-NEXT: v_lshrrev_b32_e32 v0, 2, v23487; GFX7-NEXT: v_and_b32_e32 v1, 3, v23488; GFX7-NEXT: s_and_b32 s0, s2, 0xff3489; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v13490; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v03491; GFX7-NEXT: v_lshl_b32_e32 v2, s0, v13492; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v03493; GFX7-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v03494; GFX7-NEXT: v_lshl_b32_e32 v1, 0xff, v13495; GFX7-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v03496; GFX7-NEXT: s_mov_b64 s[8:9], 03497; GFX7-NEXT: s_mov_b32 s10, -13498; GFX7-NEXT: s_waitcnt vmcnt(0)3499; GFX7-NEXT: v_cndmask_b32_e32 v7, v3, v4, vcc3500; GFX7-NEXT: v_cndmask_b32_e64 v7, v7, v5, s[0:1]3501; GFX7-NEXT: v_cndmask_b32_e64 v7, v7, v6, s[2:3]3502; GFX7-NEXT: v_bfi_b32 v1, v1, 0, v73503; GFX7-NEXT: v_or_b32_e32 v7, v1, v23504; GFX7-NEXT: v_cndmask_b32_e64 v0, v3, v7, s[4:5]3505; GFX7-NEXT: v_cndmask_b32_e32 v1, v4, v7, vcc3506; GFX7-NEXT: v_cndmask_b32_e64 v2, v5, v7, s[0:1]3507; GFX7-NEXT: v_cndmask_b32_e64 v3, v6, v7, s[2:3]3508; GFX7-NEXT: buffer_store_dwordx4 v[0:3], off, s[8:11], 03509; GFX7-NEXT: s_endpgm3510;3511; GFX10-LABEL: insertelement_v_v16i8_s_v:3512; GFX10: ; %bb.0:3513; GFX10-NEXT: global_load_dwordx4 v[3:6], v[0:1], off3514; GFX10-NEXT: v_lshrrev_b32_e32 v1, 2, v23515; GFX10-NEXT: v_and_b32_e32 v0, 3, v23516; GFX10-NEXT: s_and_b32 s1, s2, 0xff3517; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v13518; GFX10-NEXT: v_lshlrev_b32_e32 v0, 3, v03519; GFX10-NEXT: v_cmp_eq_u32_e64 s0, 2, v13520; GFX10-NEXT: v_cmp_eq_u32_e64 s2, 0, v13521; GFX10-NEXT: v_lshlrev_b32_e64 v7, v0, 0xff3522; GFX10-NEXT: v_lshlrev_b32_e64 v0, v0, s13523; GFX10-NEXT: v_cmp_eq_u32_e64 s1, 3, v13524; GFX10-NEXT: v_not_b32_e32 v7, v73525; GFX10-NEXT: s_waitcnt vmcnt(0)3526; GFX10-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc_lo3527; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, v5, s03528; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, v6, s13529; GFX10-NEXT: v_and_or_b32 v9, v2, v7, v03530; GFX10-NEXT: v_mov_b32_e32 v7, 03531; GFX10-NEXT: v_mov_b32_e32 v8, 03532; GFX10-NEXT: v_cndmask_b32_e64 v0, v3, v9, s23533; GFX10-NEXT: v_cndmask_b32_e32 v1, v4, v9, vcc_lo3534; GFX10-NEXT: v_cndmask_b32_e64 v2, v5, v9, s03535; GFX10-NEXT: v_cndmask_b32_e64 v3, v6, v9, s13536; GFX10-NEXT: global_store_dwordx4 v[7:8], v[0:3], off3537; GFX10-NEXT: s_endpgm3538;3539; GFX11-LABEL: insertelement_v_v16i8_s_v:3540; GFX11: ; %bb.0:3541; GFX11-NEXT: global_load_b128 v[3:6], v[0:1], off3542; GFX11-NEXT: v_lshrrev_b32_e32 v1, 2, v23543; GFX11-NEXT: v_and_b32_e32 v0, 3, v23544; GFX11-NEXT: s_and_b32 s1, s2, 0xff3545; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3546; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v13547; GFX11-NEXT: v_lshlrev_b32_e32 v0, 3, v03548; GFX11-NEXT: v_cmp_eq_u32_e64 s0, 2, v13549; GFX11-NEXT: v_cmp_eq_u32_e64 s2, 0, v13550; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)3551; GFX11-NEXT: v_lshlrev_b32_e64 v7, v0, 0xff3552; GFX11-NEXT: v_lshlrev_b32_e64 v0, v0, s13553; GFX11-NEXT: v_cmp_eq_u32_e64 s1, 3, v13554; GFX11-NEXT: v_not_b32_e32 v7, v73555; GFX11-NEXT: s_waitcnt vmcnt(0)3556; GFX11-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc_lo3557; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3558; GFX11-NEXT: v_cndmask_b32_e64 v2, v2, v5, s03559; GFX11-NEXT: v_cndmask_b32_e64 v2, v2, v6, s13560; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)3561; GFX11-NEXT: v_and_or_b32 v9, v2, v7, v03562; GFX11-NEXT: v_mov_b32_e32 v7, 03563; GFX11-NEXT: v_mov_b32_e32 v8, 03564; GFX11-NEXT: v_cndmask_b32_e64 v0, v3, v9, s23565; GFX11-NEXT: v_cndmask_b32_e32 v1, v4, v9, vcc_lo3566; GFX11-NEXT: v_cndmask_b32_e64 v2, v5, v9, s03567; GFX11-NEXT: v_cndmask_b32_e64 v3, v6, v9, s13568; GFX11-NEXT: global_store_b128 v[7:8], v[0:3], off3569; GFX11-NEXT: s_endpgm3570 %vec = load <16 x i8>, ptr addrspace(1) %ptr3571 %insert = insertelement <16 x i8> %vec, i8 %val, i32 %idx3572 store <16 x i8> %insert, ptr addrspace(1) null3573 ret void3574}3575 3576define amdgpu_ps void @insertelement_v_v16i8_v_s(ptr addrspace(1) %ptr, i8 %val, i32 inreg %idx) {3577; GFX9-LABEL: insertelement_v_v16i8_v_s:3578; GFX9: ; %bb.0:3579; GFX9-NEXT: global_load_dwordx4 v[3:6], v[0:1], off3580; GFX9-NEXT: s_and_b32 s0, s2, 33581; GFX9-NEXT: s_lshr_b32 s4, s2, 23582; GFX9-NEXT: s_lshl_b32 s0, s0, 33583; GFX9-NEXT: v_lshlrev_b32_sdwa v0, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03584; GFX9-NEXT: s_lshl_b32 s0, 0xff, s03585; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s4, 13586; GFX9-NEXT: s_not_b32 s5, s03587; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], s4, 23588; GFX9-NEXT: v_cmp_eq_u32_e64 s[2:3], s4, 33589; GFX9-NEXT: v_mov_b32_e32 v7, 03590; GFX9-NEXT: v_mov_b32_e32 v8, 03591; GFX9-NEXT: s_waitcnt vmcnt(0)3592; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc3593; GFX9-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[0:1]3594; GFX9-NEXT: v_cndmask_b32_e64 v1, v1, v6, s[2:3]3595; GFX9-NEXT: v_and_or_b32 v9, v1, s5, v03596; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], s4, 03597; GFX9-NEXT: v_cndmask_b32_e64 v0, v3, v9, s[4:5]3598; GFX9-NEXT: v_cndmask_b32_e32 v1, v4, v9, vcc3599; GFX9-NEXT: v_cndmask_b32_e64 v2, v5, v9, s[0:1]3600; GFX9-NEXT: v_cndmask_b32_e64 v3, v6, v9, s[2:3]3601; GFX9-NEXT: global_store_dwordx4 v[7:8], v[0:3], off3602; GFX9-NEXT: s_endpgm3603;3604; GFX8-LABEL: insertelement_v_v16i8_v_s:3605; GFX8: ; %bb.0:3606; GFX8-NEXT: flat_load_dwordx4 v[3:6], v[0:1]3607; GFX8-NEXT: s_lshr_b32 s4, s2, 23608; GFX8-NEXT: s_and_b32 s0, s2, 33609; GFX8-NEXT: s_lshl_b32 s0, s0, 33610; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s4, 13611; GFX8-NEXT: v_mov_b32_e32 v0, s03612; GFX8-NEXT: s_lshl_b32 s5, 0xff, s03613; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], s4, 23614; GFX8-NEXT: v_cmp_eq_u32_e64 s[2:3], s4, 33615; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03616; GFX8-NEXT: v_mov_b32_e32 v7, 03617; GFX8-NEXT: v_mov_b32_e32 v8, 03618; GFX8-NEXT: s_waitcnt vmcnt(0)3619; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc3620; GFX8-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[0:1]3621; GFX8-NEXT: v_cndmask_b32_e64 v1, v1, v6, s[2:3]3622; GFX8-NEXT: v_bfi_b32 v1, s5, 0, v13623; GFX8-NEXT: v_or_b32_e32 v9, v1, v03624; GFX8-NEXT: v_cmp_eq_u32_e64 s[4:5], s4, 03625; GFX8-NEXT: v_cndmask_b32_e64 v0, v3, v9, s[4:5]3626; GFX8-NEXT: v_cndmask_b32_e32 v1, v4, v9, vcc3627; GFX8-NEXT: v_cndmask_b32_e64 v2, v5, v9, s[0:1]3628; GFX8-NEXT: v_cndmask_b32_e64 v3, v6, v9, s[2:3]3629; GFX8-NEXT: flat_store_dwordx4 v[7:8], v[0:3]3630; GFX8-NEXT: s_endpgm3631;3632; GFX7-LABEL: insertelement_v_v16i8_v_s:3633; GFX7: ; %bb.0:3634; GFX7-NEXT: s_mov_b32 s10, 03635; GFX7-NEXT: s_mov_b32 s11, 0xf0003636; GFX7-NEXT: s_mov_b64 s[8:9], 03637; GFX7-NEXT: buffer_load_dwordx4 v[3:6], v[0:1], s[8:11], 0 addr643638; GFX7-NEXT: s_lshr_b32 s4, s2, 23639; GFX7-NEXT: s_and_b32 s0, s2, 33640; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v23641; GFX7-NEXT: s_lshl_b32 s0, s0, 33642; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s4, 13643; GFX7-NEXT: v_lshlrev_b32_e32 v0, s0, v03644; GFX7-NEXT: s_lshl_b32 s5, 0xff, s03645; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], s4, 23646; GFX7-NEXT: v_cmp_eq_u32_e64 s[2:3], s4, 33647; GFX7-NEXT: s_mov_b64 s[8:9], 03648; GFX7-NEXT: s_mov_b32 s10, -13649; GFX7-NEXT: s_waitcnt vmcnt(0)3650; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc3651; GFX7-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[0:1]3652; GFX7-NEXT: v_cndmask_b32_e64 v1, v1, v6, s[2:3]3653; GFX7-NEXT: v_bfi_b32 v1, s5, 0, v13654; GFX7-NEXT: v_or_b32_e32 v7, v1, v03655; GFX7-NEXT: v_cmp_eq_u32_e64 s[4:5], s4, 03656; GFX7-NEXT: v_cndmask_b32_e64 v0, v3, v7, s[4:5]3657; GFX7-NEXT: v_cndmask_b32_e32 v1, v4, v7, vcc3658; GFX7-NEXT: v_cndmask_b32_e64 v2, v5, v7, s[0:1]3659; GFX7-NEXT: v_cndmask_b32_e64 v3, v6, v7, s[2:3]3660; GFX7-NEXT: buffer_store_dwordx4 v[0:3], off, s[8:11], 03661; GFX7-NEXT: s_endpgm3662;3663; GFX10-LABEL: insertelement_v_v16i8_v_s:3664; GFX10: ; %bb.0:3665; GFX10-NEXT: global_load_dwordx4 v[3:6], v[0:1], off3666; GFX10-NEXT: s_lshr_b32 s3, s2, 23667; GFX10-NEXT: s_and_b32 s1, s2, 33668; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s3, 13669; GFX10-NEXT: v_cmp_eq_u32_e64 s0, s3, 23670; GFX10-NEXT: s_lshl_b32 s2, s1, 33671; GFX10-NEXT: v_cmp_eq_u32_e64 s1, s3, 33672; GFX10-NEXT: v_lshlrev_b32_sdwa v1, s2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03673; GFX10-NEXT: s_lshl_b32 s2, 0xff, s23674; GFX10-NEXT: v_mov_b32_e32 v7, 03675; GFX10-NEXT: s_not_b32 s2, s23676; GFX10-NEXT: v_mov_b32_e32 v8, 03677; GFX10-NEXT: s_waitcnt vmcnt(0)3678; GFX10-NEXT: v_cndmask_b32_e32 v0, v3, v4, vcc_lo3679; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v5, s03680; GFX10-NEXT: v_cndmask_b32_e64 v0, v0, v6, s13681; GFX10-NEXT: v_and_or_b32 v9, v0, s2, v13682; GFX10-NEXT: v_cmp_eq_u32_e64 s2, s3, 03683; GFX10-NEXT: v_cndmask_b32_e32 v1, v4, v9, vcc_lo3684; GFX10-NEXT: v_cndmask_b32_e64 v0, v3, v9, s23685; GFX10-NEXT: v_cndmask_b32_e64 v2, v5, v9, s03686; GFX10-NEXT: v_cndmask_b32_e64 v3, v6, v9, s13687; GFX10-NEXT: global_store_dwordx4 v[7:8], v[0:3], off3688; GFX10-NEXT: s_endpgm3689;3690; GFX11-LABEL: insertelement_v_v16i8_v_s:3691; GFX11: ; %bb.0:3692; GFX11-NEXT: global_load_b128 v[3:6], v[0:1], off3693; GFX11-NEXT: s_lshr_b32 s3, s2, 23694; GFX11-NEXT: s_and_b32 s1, s2, 33695; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s3, 13696; GFX11-NEXT: v_cmp_eq_u32_e64 s0, s3, 23697; GFX11-NEXT: s_lshl_b32 s2, s1, 33698; GFX11-NEXT: v_cmp_eq_u32_e64 s1, s3, 33699; GFX11-NEXT: v_mov_b32_e32 v7, 03700; GFX11-NEXT: v_dual_mov_b32 v8, 0 :: v_dual_and_b32 v1, 0xff, v23701; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)3702; GFX11-NEXT: v_lshlrev_b32_e32 v1, s2, v13703; GFX11-NEXT: s_lshl_b32 s2, 0xff, s23704; GFX11-NEXT: s_not_b32 s2, s23705; GFX11-NEXT: s_waitcnt vmcnt(0)3706; GFX11-NEXT: v_cndmask_b32_e32 v0, v3, v4, vcc_lo3707; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3708; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v5, s03709; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, v6, s13710; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)3711; GFX11-NEXT: v_and_or_b32 v9, v0, s2, v13712; GFX11-NEXT: v_cmp_eq_u32_e64 s2, s3, 03713; GFX11-NEXT: v_cndmask_b32_e32 v1, v4, v9, vcc_lo3714; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)3715; GFX11-NEXT: v_cndmask_b32_e64 v0, v3, v9, s23716; GFX11-NEXT: v_cndmask_b32_e64 v2, v5, v9, s03717; GFX11-NEXT: v_cndmask_b32_e64 v3, v6, v9, s13718; GFX11-NEXT: global_store_b128 v[7:8], v[0:3], off3719; GFX11-NEXT: s_endpgm3720 %vec = load <16 x i8>, ptr addrspace(1) %ptr3721 %insert = insertelement <16 x i8> %vec, i8 %val, i32 %idx3722 store <16 x i8> %insert, ptr addrspace(1) null3723 ret void3724}3725 3726define amdgpu_ps void @insertelement_v_v16i8_v_v(ptr addrspace(1) %ptr, i8 %val, i32 %idx) {3727; GFX9-LABEL: insertelement_v_v16i8_v_v:3728; GFX9: ; %bb.0:3729; GFX9-NEXT: global_load_dwordx4 v[4:7], v[0:1], off3730; GFX9-NEXT: v_lshrrev_b32_e32 v1, 2, v33731; GFX9-NEXT: v_and_b32_e32 v3, 3, v33732; GFX9-NEXT: v_mov_b32_e32 v0, 0xff3733; GFX9-NEXT: v_lshlrev_b32_e32 v3, 3, v33734; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v13735; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03736; GFX9-NEXT: v_lshlrev_b32_e32 v0, v3, v03737; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v13738; GFX9-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v13739; GFX9-NEXT: v_not_b32_e32 v0, v03740; GFX9-NEXT: v_mov_b32_e32 v8, 03741; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13742; GFX9-NEXT: v_mov_b32_e32 v9, 03743; GFX9-NEXT: s_waitcnt vmcnt(0)3744; GFX9-NEXT: v_cndmask_b32_e32 v3, v4, v5, vcc3745; GFX9-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[0:1]3746; GFX9-NEXT: v_cndmask_b32_e64 v3, v3, v7, s[2:3]3747; GFX9-NEXT: v_and_or_b32 v3, v3, v0, v23748; GFX9-NEXT: v_cndmask_b32_e64 v0, v4, v3, s[4:5]3749; GFX9-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc3750; GFX9-NEXT: v_cndmask_b32_e64 v2, v6, v3, s[0:1]3751; GFX9-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[2:3]3752; GFX9-NEXT: global_store_dwordx4 v[8:9], v[0:3], off3753; GFX9-NEXT: s_endpgm3754;3755; GFX8-LABEL: insertelement_v_v16i8_v_v:3756; GFX8: ; %bb.0:3757; GFX8-NEXT: flat_load_dwordx4 v[4:7], v[0:1]3758; GFX8-NEXT: v_lshrrev_b32_e32 v1, 2, v33759; GFX8-NEXT: v_and_b32_e32 v3, 3, v33760; GFX8-NEXT: v_mov_b32_e32 v0, 0xff3761; GFX8-NEXT: v_lshlrev_b32_e32 v3, 3, v33762; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v13763; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03764; GFX8-NEXT: v_lshlrev_b32_e32 v0, v3, v03765; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v13766; GFX8-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v13767; GFX8-NEXT: v_mov_b32_e32 v8, 03768; GFX8-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13769; GFX8-NEXT: v_mov_b32_e32 v9, 03770; GFX8-NEXT: s_waitcnt vmcnt(0)3771; GFX8-NEXT: v_cndmask_b32_e32 v3, v4, v5, vcc3772; GFX8-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[0:1]3773; GFX8-NEXT: v_cndmask_b32_e64 v3, v3, v7, s[2:3]3774; GFX8-NEXT: v_bfi_b32 v0, v0, 0, v33775; GFX8-NEXT: v_or_b32_e32 v3, v0, v23776; GFX8-NEXT: v_cndmask_b32_e64 v0, v4, v3, s[4:5]3777; GFX8-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc3778; GFX8-NEXT: v_cndmask_b32_e64 v2, v6, v3, s[0:1]3779; GFX8-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[2:3]3780; GFX8-NEXT: flat_store_dwordx4 v[8:9], v[0:3]3781; GFX8-NEXT: s_endpgm3782;3783; GFX7-LABEL: insertelement_v_v16i8_v_v:3784; GFX7: ; %bb.0:3785; GFX7-NEXT: s_mov_b32 s10, 03786; GFX7-NEXT: s_mov_b32 s11, 0xf0003787; GFX7-NEXT: s_mov_b64 s[8:9], 03788; GFX7-NEXT: buffer_load_dwordx4 v[4:7], v[0:1], s[8:11], 0 addr643789; GFX7-NEXT: v_lshrrev_b32_e32 v0, 2, v33790; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v03791; GFX7-NEXT: v_and_b32_e32 v1, 3, v33792; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v03793; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v23794; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v13795; GFX7-NEXT: v_cmp_eq_u32_e64 s[2:3], 3, v03796; GFX7-NEXT: v_lshlrev_b32_e32 v2, v1, v23797; GFX7-NEXT: v_lshl_b32_e32 v1, 0xff, v13798; GFX7-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v03799; GFX7-NEXT: s_mov_b64 s[8:9], 03800; GFX7-NEXT: s_mov_b32 s10, -13801; GFX7-NEXT: s_waitcnt vmcnt(0)3802; GFX7-NEXT: v_cndmask_b32_e32 v3, v4, v5, vcc3803; GFX7-NEXT: v_cndmask_b32_e64 v3, v3, v6, s[0:1]3804; GFX7-NEXT: v_cndmask_b32_e64 v3, v3, v7, s[2:3]3805; GFX7-NEXT: v_bfi_b32 v1, v1, 0, v33806; GFX7-NEXT: v_or_b32_e32 v3, v1, v23807; GFX7-NEXT: v_cndmask_b32_e64 v0, v4, v3, s[4:5]3808; GFX7-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc3809; GFX7-NEXT: v_cndmask_b32_e64 v2, v6, v3, s[0:1]3810; GFX7-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[2:3]3811; GFX7-NEXT: buffer_store_dwordx4 v[0:3], off, s[8:11], 03812; GFX7-NEXT: s_endpgm3813;3814; GFX10-LABEL: insertelement_v_v16i8_v_v:3815; GFX10: ; %bb.0:3816; GFX10-NEXT: global_load_dwordx4 v[4:7], v[0:1], off3817; GFX10-NEXT: v_lshrrev_b32_e32 v1, 2, v33818; GFX10-NEXT: v_and_b32_e32 v0, 3, v33819; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v13820; GFX10-NEXT: v_lshlrev_b32_e32 v0, 3, v03821; GFX10-NEXT: v_cmp_eq_u32_e64 s0, 2, v13822; GFX10-NEXT: v_cmp_eq_u32_e64 s1, 3, v13823; GFX10-NEXT: v_cmp_eq_u32_e64 s2, 0, v13824; GFX10-NEXT: v_lshlrev_b32_e64 v8, v0, 0xff3825; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_03826; GFX10-NEXT: v_not_b32_e32 v2, v83827; GFX10-NEXT: v_mov_b32_e32 v8, 03828; GFX10-NEXT: v_mov_b32_e32 v9, 03829; GFX10-NEXT: s_waitcnt vmcnt(0)3830; GFX10-NEXT: v_cndmask_b32_e32 v3, v4, v5, vcc_lo3831; GFX10-NEXT: v_cndmask_b32_e64 v3, v3, v6, s03832; GFX10-NEXT: v_cndmask_b32_e64 v3, v3, v7, s13833; GFX10-NEXT: v_and_or_b32 v3, v3, v2, v03834; GFX10-NEXT: v_cndmask_b32_e64 v0, v4, v3, s23835; GFX10-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc_lo3836; GFX10-NEXT: v_cndmask_b32_e64 v2, v6, v3, s03837; GFX10-NEXT: v_cndmask_b32_e64 v3, v7, v3, s13838; GFX10-NEXT: global_store_dwordx4 v[8:9], v[0:3], off3839; GFX10-NEXT: s_endpgm3840;3841; GFX11-LABEL: insertelement_v_v16i8_v_v:3842; GFX11: ; %bb.0:3843; GFX11-NEXT: global_load_b128 v[4:7], v[0:1], off3844; GFX11-NEXT: v_lshrrev_b32_e32 v1, 2, v33845; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3846; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v13847; GFX11-NEXT: v_and_b32_e32 v0, 3, v33848; GFX11-NEXT: v_cmp_eq_u32_e64 s0, 2, v13849; GFX11-NEXT: v_and_b32_e32 v2, 0xff, v23850; GFX11-NEXT: v_cmp_eq_u32_e64 s1, 3, v13851; GFX11-NEXT: v_cmp_eq_u32_e64 s2, 0, v13852; GFX11-NEXT: s_waitcnt vmcnt(0)3853; GFX11-NEXT: v_dual_cndmask_b32 v3, v4, v5 :: v_dual_lshlrev_b32 v0, 3, v03854; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)3855; GFX11-NEXT: v_cndmask_b32_e64 v3, v3, v6, s03856; GFX11-NEXT: v_lshlrev_b32_e64 v8, v0, 0xff3857; GFX11-NEXT: v_lshlrev_b32_e32 v0, v0, v23858; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)3859; GFX11-NEXT: v_cndmask_b32_e64 v3, v3, v7, s13860; GFX11-NEXT: v_not_b32_e32 v2, v83861; GFX11-NEXT: v_mov_b32_e32 v8, 03862; GFX11-NEXT: v_mov_b32_e32 v9, 03863; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)3864; GFX11-NEXT: v_and_or_b32 v3, v3, v2, v03865; GFX11-NEXT: v_cndmask_b32_e64 v0, v4, v3, s23866; GFX11-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc_lo3867; GFX11-NEXT: v_cndmask_b32_e64 v2, v6, v3, s03868; GFX11-NEXT: v_cndmask_b32_e64 v3, v7, v3, s13869; GFX11-NEXT: global_store_b128 v[8:9], v[0:3], off3870; GFX11-NEXT: s_endpgm3871 %vec = load <16 x i8>, ptr addrspace(1) %ptr3872 %insert = insertelement <16 x i8> %vec, i8 %val, i32 %idx3873 store <16 x i8> %insert, ptr addrspace(1) null3874 ret void3875}3876