3137 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx700 < %s | FileCheck -check-prefixes=GFX7 %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx803 < %s | FileCheck -check-prefixes=GFX8 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx906 < %s | FileCheck -check-prefixes=GFX9-DL %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1011 < %s | FileCheck -check-prefixes=GFX10-DL-XNACK %s7; RUN: llc -mtriple=amdgcn -mcpu=gfx1012 < %s | FileCheck -check-prefixes=GFX10-DL-XNACK %s8; RUN: llc -mtriple=amdgcn -mcpu=gfx1030 < %s | FileCheck -check-prefixes=GFX10-DL-NOXNACK %s9; RUN: llc -mtriple=amdgcn -mcpu=gfx1031 < %s | FileCheck -check-prefixes=GFX10-DL-NOXNACK %s10 11define amdgpu_kernel void @idot8_acc32(ptr addrspace(1) %src1,12; GFX7-LABEL: idot8_acc32:13; GFX7: ; %bb.0: ; %entry14; GFX7-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD015; GFX7-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD116; GFX7-NEXT: s_mov_b32 s14, -117; GFX7-NEXT: s_mov_b32 s15, 0xe8f00018; GFX7-NEXT: s_add_u32 s12, s12, s1119; GFX7-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x920; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd21; GFX7-NEXT: s_mov_b32 s3, 0xf00022; GFX7-NEXT: s_mov_b32 s6, 023; GFX7-NEXT: s_mov_b32 s7, s324; GFX7-NEXT: s_waitcnt lgkmcnt(0)25; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]26; GFX7-NEXT: v_lshlrev_b32_e32 v0, 2, v027; GFX7-NEXT: v_mov_b32_e32 v1, 028; GFX7-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr6429; GFX7-NEXT: s_mov_b64 s[4:5], s[10:11]30; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr6431; GFX7-NEXT: s_load_dword s4, s[0:1], 0x032; GFX7-NEXT: s_mov_b32 s2, -133; GFX7-NEXT: s_addc_u32 s13, s13, 034; GFX7-NEXT: s_waitcnt vmcnt(1)35; GFX7-NEXT: v_bfe_i32 v1, v2, 0, 436; GFX7-NEXT: v_bfe_i32 v3, v2, 4, 437; GFX7-NEXT: s_waitcnt vmcnt(0)38; GFX7-NEXT: v_bfe_i32 v9, v0, 0, 439; GFX7-NEXT: v_bfe_i32 v10, v0, 4, 440; GFX7-NEXT: s_waitcnt lgkmcnt(0)41; GFX7-NEXT: v_mad_i32_i24 v1, v1, v9, s442; GFX7-NEXT: v_bfe_i32 v4, v2, 8, 443; GFX7-NEXT: v_bfe_i32 v11, v0, 8, 444; GFX7-NEXT: v_mad_i32_i24 v1, v3, v10, v145; GFX7-NEXT: v_bfe_i32 v5, v2, 12, 446; GFX7-NEXT: v_bfe_i32 v12, v0, 12, 447; GFX7-NEXT: v_mad_i32_i24 v1, v4, v11, v148; GFX7-NEXT: v_bfe_i32 v6, v2, 16, 449; GFX7-NEXT: v_bfe_i32 v13, v0, 16, 450; GFX7-NEXT: v_mad_i32_i24 v1, v5, v12, v151; GFX7-NEXT: v_bfe_i32 v7, v2, 20, 452; GFX7-NEXT: v_bfe_i32 v14, v0, 20, 453; GFX7-NEXT: v_mad_i32_i24 v1, v6, v13, v154; GFX7-NEXT: v_bfe_i32 v8, v2, 24, 455; GFX7-NEXT: v_bfe_i32 v15, v0, 24, 456; GFX7-NEXT: v_mad_i32_i24 v1, v7, v14, v157; GFX7-NEXT: v_ashrrev_i32_e32 v2, 28, v258; GFX7-NEXT: v_ashrrev_i32_e32 v0, 28, v059; GFX7-NEXT: v_mad_i32_i24 v1, v8, v15, v160; GFX7-NEXT: v_mad_i32_i24 v0, v2, v0, v161; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 062; GFX7-NEXT: s_endpgm63;64; GFX8-LABEL: idot8_acc32:65; GFX8: ; %bb.0: ; %entry66; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2467; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x3468; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v069; GFX8-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD070; GFX8-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD171; GFX8-NEXT: s_waitcnt lgkmcnt(0)72; GFX8-NEXT: v_mov_b32_e32 v1, s173; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v274; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc75; GFX8-NEXT: flat_load_dword v3, v[0:1]76; GFX8-NEXT: v_mov_b32_e32 v1, s377; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v278; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc79; GFX8-NEXT: flat_load_dword v0, v[0:1]80; GFX8-NEXT: s_load_dword s0, s[4:5], 0x081; GFX8-NEXT: s_mov_b32 s14, -182; GFX8-NEXT: s_mov_b32 s15, 0xe8000083; GFX8-NEXT: s_add_u32 s12, s12, s1184; GFX8-NEXT: s_addc_u32 s13, s13, 085; GFX8-NEXT: s_waitcnt vmcnt(1)86; GFX8-NEXT: v_bfe_i32 v1, v3, 0, 487; GFX8-NEXT: v_bfe_i32 v4, v3, 4, 488; GFX8-NEXT: v_bfe_i32 v6, v3, 8, 489; GFX8-NEXT: v_bfe_i32 v8, v3, 12, 490; GFX8-NEXT: v_bfe_i32 v10, v3, 16, 491; GFX8-NEXT: v_bfe_i32 v12, v3, 20, 492; GFX8-NEXT: s_waitcnt vmcnt(0)93; GFX8-NEXT: v_bfe_i32 v2, v0, 0, 494; GFX8-NEXT: v_bfe_i32 v5, v0, 4, 495; GFX8-NEXT: s_waitcnt lgkmcnt(0)96; GFX8-NEXT: v_mad_i32_i24 v1, v1, v2, s097; GFX8-NEXT: v_bfe_i32 v7, v0, 8, 498; GFX8-NEXT: v_mad_i32_i24 v1, v4, v5, v199; GFX8-NEXT: v_bfe_i32 v9, v0, 12, 4100; GFX8-NEXT: v_mad_i32_i24 v1, v6, v7, v1101; GFX8-NEXT: v_bfe_i32 v11, v0, 16, 4102; GFX8-NEXT: v_mad_i32_i24 v1, v8, v9, v1103; GFX8-NEXT: v_bfe_i32 v13, v0, 20, 4104; GFX8-NEXT: v_mad_i32_i24 v1, v10, v11, v1105; GFX8-NEXT: v_bfe_i32 v14, v3, 24, 4106; GFX8-NEXT: v_bfe_i32 v15, v0, 24, 4107; GFX8-NEXT: v_mad_i32_i24 v1, v12, v13, v1108; GFX8-NEXT: v_ashrrev_i32_e32 v3, 28, v3109; GFX8-NEXT: v_ashrrev_i32_e32 v0, 28, v0110; GFX8-NEXT: v_mad_i32_i24 v1, v14, v15, v1111; GFX8-NEXT: v_mad_i32_i24 v2, v3, v0, v1112; GFX8-NEXT: v_mov_b32_e32 v0, s4113; GFX8-NEXT: v_mov_b32_e32 v1, s5114; GFX8-NEXT: flat_store_dword v[0:1], v2115; GFX8-NEXT: s_endpgm116;117; GFX9-LABEL: idot8_acc32:118; GFX9: ; %bb.0: ; %entry119; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24120; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34121; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0122; GFX9-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0123; GFX9-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1124; GFX9-NEXT: s_waitcnt lgkmcnt(0)125; GFX9-NEXT: global_load_dword v1, v0, s[0:1]126; GFX9-NEXT: global_load_dword v2, v0, s[2:3]127; GFX9-NEXT: s_load_dword s0, s[6:7], 0x0128; GFX9-NEXT: s_mov_b32 s14, -1129; GFX9-NEXT: s_mov_b32 s15, 0xe00000130; GFX9-NEXT: s_add_u32 s12, s12, s11131; GFX9-NEXT: v_mov_b32_e32 v0, 0132; GFX9-NEXT: s_addc_u32 s13, s13, 0133; GFX9-NEXT: s_waitcnt vmcnt(1)134; GFX9-NEXT: v_bfe_i32 v3, v1, 0, 4135; GFX9-NEXT: s_waitcnt vmcnt(0)136; GFX9-NEXT: v_bfe_i32 v4, v2, 0, 4137; GFX9-NEXT: v_bfe_i32 v5, v1, 4, 4138; GFX9-NEXT: v_bfe_i32 v6, v2, 4, 4139; GFX9-NEXT: v_bfe_i32 v7, v1, 8, 4140; GFX9-NEXT: v_bfe_i32 v8, v2, 8, 4141; GFX9-NEXT: v_bfe_i32 v9, v1, 12, 4142; GFX9-NEXT: v_bfe_i32 v10, v2, 12, 4143; GFX9-NEXT: v_bfe_i32 v11, v1, 16, 4144; GFX9-NEXT: v_bfe_i32 v12, v2, 16, 4145; GFX9-NEXT: v_bfe_i32 v13, v1, 20, 4146; GFX9-NEXT: v_bfe_i32 v14, v2, 20, 4147; GFX9-NEXT: v_bfe_i32 v15, v1, 24, 4148; GFX9-NEXT: v_bfe_i32 v16, v2, 24, 4149; GFX9-NEXT: v_ashrrev_i32_e32 v1, 28, v1150; GFX9-NEXT: v_ashrrev_i32_e32 v2, 28, v2151; GFX9-NEXT: v_mul_i32_i24_e32 v3, v3, v4152; GFX9-NEXT: v_mul_i32_i24_e32 v4, v5, v6153; GFX9-NEXT: v_mul_i32_i24_e32 v5, v7, v8154; GFX9-NEXT: v_mul_i32_i24_e32 v6, v9, v10155; GFX9-NEXT: v_mul_i32_i24_e32 v1, v1, v2156; GFX9-NEXT: s_waitcnt lgkmcnt(0)157; GFX9-NEXT: v_add3_u32 v2, v3, s0, v4158; GFX9-NEXT: v_mul_i32_i24_e32 v7, v11, v12159; GFX9-NEXT: v_mul_i32_i24_e32 v8, v13, v14160; GFX9-NEXT: v_add3_u32 v2, v2, v5, v6161; GFX9-NEXT: v_mul_i32_i24_e32 v9, v15, v16162; GFX9-NEXT: v_add3_u32 v2, v2, v7, v8163; GFX9-NEXT: v_add3_u32 v1, v2, v9, v1164; GFX9-NEXT: global_store_dword v0, v1, s[6:7]165; GFX9-NEXT: s_endpgm166;167; GFX9-DL-LABEL: idot8_acc32:168; GFX9-DL: ; %bb.0: ; %entry169; GFX9-DL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24170; GFX9-DL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34171; GFX9-DL-NEXT: v_lshlrev_b32_e32 v0, 2, v0172; GFX9-DL-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0173; GFX9-DL-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1174; GFX9-DL-NEXT: s_waitcnt lgkmcnt(0)175; GFX9-DL-NEXT: global_load_dword v1, v0, s[0:1]176; GFX9-DL-NEXT: global_load_dword v2, v0, s[2:3]177; GFX9-DL-NEXT: s_load_dword s0, s[6:7], 0x0178; GFX9-DL-NEXT: s_mov_b32 s14, -1179; GFX9-DL-NEXT: s_mov_b32 s15, 0xe00000180; GFX9-DL-NEXT: s_add_u32 s12, s12, s11181; GFX9-DL-NEXT: v_mov_b32_e32 v0, 0182; GFX9-DL-NEXT: s_addc_u32 s13, s13, 0183; GFX9-DL-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)184; GFX9-DL-NEXT: v_dot8_i32_i4 v1, v1, v2, s0185; GFX9-DL-NEXT: global_store_dword v0, v1, s[6:7]186; GFX9-DL-NEXT: s_endpgm187;188; GFX10-DL-XNACK-LABEL: idot8_acc32:189; GFX10-DL-XNACK: ; %bb.0: ; %entry190; GFX10-DL-XNACK-NEXT: s_clause 0x1191; GFX10-DL-XNACK-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24192; GFX10-DL-XNACK-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34193; GFX10-DL-XNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v0194; GFX10-DL-XNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0195; GFX10-DL-XNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1196; GFX10-DL-XNACK-NEXT: s_mov_b32 s14, -1197; GFX10-DL-XNACK-NEXT: s_mov_b32 s15, 0x31c16000198; GFX10-DL-XNACK-NEXT: s_add_u32 s12, s12, s11199; GFX10-DL-XNACK-NEXT: s_addc_u32 s13, s13, 0200; GFX10-DL-XNACK-NEXT: s_waitcnt lgkmcnt(0)201; GFX10-DL-XNACK-NEXT: s_clause 0x1202; GFX10-DL-XNACK-NEXT: global_load_dword v1, v0, s[0:1]203; GFX10-DL-XNACK-NEXT: global_load_dword v2, v0, s[2:3]204; GFX10-DL-XNACK-NEXT: s_waitcnt_depctr depctr_vm_vsrc(0)205; GFX10-DL-XNACK-NEXT: s_load_dword s0, s[6:7], 0x0206; GFX10-DL-XNACK-NEXT: v_mov_b32_e32 v0, 0207; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)208; GFX10-DL-XNACK-NEXT: v_dot8_i32_i4 v1, v1, v2, s0209; GFX10-DL-XNACK-NEXT: global_store_dword v0, v1, s[6:7]210; GFX10-DL-XNACK-NEXT: s_endpgm211;212; GFX10-DL-NOXNACK-LABEL: idot8_acc32:213; GFX10-DL-NOXNACK: ; %bb.0: ; %entry214; GFX10-DL-NOXNACK-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24215; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v0216; GFX10-DL-NOXNACK-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34217; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0218; GFX10-DL-NOXNACK-NEXT: v_mov_b32_e32 v2, 0219; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1220; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s14, -1221; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s15, 0x31c16000222; GFX10-DL-NOXNACK-NEXT: s_add_u32 s12, s12, s11223; GFX10-DL-NOXNACK-NEXT: s_addc_u32 s13, s13, 0224; GFX10-DL-NOXNACK-NEXT: s_waitcnt lgkmcnt(0)225; GFX10-DL-NOXNACK-NEXT: s_clause 0x1226; GFX10-DL-NOXNACK-NEXT: global_load_dword v1, v0, s[0:1]227; GFX10-DL-NOXNACK-NEXT: global_load_dword v0, v0, s[2:3]228; GFX10-DL-NOXNACK-NEXT: s_load_dword s0, s[4:5], 0x0229; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)230; GFX10-DL-NOXNACK-NEXT: v_dot8_i32_i4 v0, v1, v0, s0231; GFX10-DL-NOXNACK-NEXT: global_store_dword v2, v0, s[4:5]232; GFX10-DL-NOXNACK-NEXT: s_endpgm233 ptr addrspace(1) %src2,234 ptr addrspace(1) nocapture %dst) {235entry:236 %idx = call i32 @llvm.amdgcn.workitem.id.x()237 %gep1 = getelementptr <8 x i4>, ptr addrspace(1) %src1, i32 %idx238 %vec1 = load <8 x i4>, ptr addrspace(1) %gep1239 %gep2 = getelementptr <8 x i4>, ptr addrspace(1) %src2, i32 %idx240 %vec2 = load <8 x i4>, ptr addrspace(1) %gep2241 242 %v1e0 = extractelement <8 x i4> %vec1, i64 0243 %cv1e0 = sext i4 %v1e0 to i32244 %v2e0 = extractelement <8 x i4> %vec2, i64 0245 %cv2e0 = sext i4 %v2e0 to i32246 %mul0 = mul nuw nsw i32 %cv1e0, %cv2e0247 248 %v1e1 = extractelement <8 x i4> %vec1, i64 1249 %cv1e1 = sext i4 %v1e1 to i32250 %v2e1 = extractelement <8 x i4> %vec2, i64 1251 %cv2e1 = sext i4 %v2e1 to i32252 %mul1 = mul nuw nsw i32 %cv1e1, %cv2e1253 254 %v1e2 = extractelement <8 x i4> %vec1, i64 2255 %cv1e2 = sext i4 %v1e2 to i32256 %v2e2 = extractelement <8 x i4> %vec2, i64 2257 %cv2e2 = sext i4 %v2e2 to i32258 %mul2 = mul nuw nsw i32 %cv1e2, %cv2e2259 260 %v1e3 = extractelement <8 x i4> %vec1, i64 3261 %cv1e3 = sext i4 %v1e3 to i32262 %v2e3 = extractelement <8 x i4> %vec2, i64 3263 %cv2e3 = sext i4 %v2e3 to i32264 %mul3 = mul nuw nsw i32 %cv1e3, %cv2e3265 266 %v1e4 = extractelement <8 x i4> %vec1, i64 4267 %cv1e4 = sext i4 %v1e4 to i32268 %v2e4 = extractelement <8 x i4> %vec2, i64 4269 %cv2e4 = sext i4 %v2e4 to i32270 %mul4 = mul nuw nsw i32 %cv1e4, %cv2e4271 272 %v1e5 = extractelement <8 x i4> %vec1, i64 5273 %cv1e5 = sext i4 %v1e5 to i32274 %v2e5 = extractelement <8 x i4> %vec2, i64 5275 %cv2e5 = sext i4 %v2e5 to i32276 %mul5 = mul nuw nsw i32 %cv1e5, %cv2e5277 278 %v1e6 = extractelement <8 x i4> %vec1, i64 6279 %cv1e6 = sext i4 %v1e6 to i32280 %v2e6 = extractelement <8 x i4> %vec2, i64 6281 %cv2e6 = sext i4 %v2e6 to i32282 %mul6 = mul nuw nsw i32 %cv1e6, %cv2e6283 284 %v1e7 = extractelement <8 x i4> %vec1, i64 7285 %cv1e7 = sext i4 %v1e7 to i32286 %v2e7 = extractelement <8 x i4> %vec2, i64 7287 %cv2e7 = sext i4 %v2e7 to i32288 %mul7 = mul nuw nsw i32 %cv1e7, %cv2e7289 290 %acc = load i32, ptr addrspace(1) %dst, align 4291 %add1 = add i32 %mul0, %acc292 %add2 = add i32 %add1, %mul1293 %add3 = add i32 %add2, %mul2294 %add4 = add i32 %add3, %mul3295 %add5 = add i32 %add4, %mul4296 %add6 = add i32 %add5, %mul5297 %add7 = add i32 %add6, %mul6298 %add8 = add i32 %add7, %mul7299 300 store i32 %add8, ptr addrspace(1) %dst, align 4301 ret void302}303 304; TODO: Once the unnecessary zero extentions of the elements are removed;305; pattern recognizer will kick in.306define amdgpu_kernel void @idot8_acc16(ptr addrspace(1) %src1,307; GFX7-LABEL: idot8_acc16:308; GFX7: ; %bb.0: ; %entry309; GFX7-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0310; GFX7-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1311; GFX7-NEXT: s_mov_b32 s14, -1312; GFX7-NEXT: s_mov_b32 s15, 0xe8f000313; GFX7-NEXT: s_add_u32 s12, s12, s11314; GFX7-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x9315; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd316; GFX7-NEXT: s_mov_b32 s3, 0xf000317; GFX7-NEXT: s_mov_b32 s6, 0318; GFX7-NEXT: s_mov_b32 s7, s3319; GFX7-NEXT: s_waitcnt lgkmcnt(0)320; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]321; GFX7-NEXT: v_lshlrev_b32_e32 v0, 2, v0322; GFX7-NEXT: v_mov_b32_e32 v1, 0323; GFX7-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64324; GFX7-NEXT: s_mov_b64 s[4:5], s[10:11]325; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64326; GFX7-NEXT: s_mov_b32 s2, -1327; GFX7-NEXT: buffer_load_ushort v1, off, s[0:3], 0328; GFX7-NEXT: s_addc_u32 s13, s13, 0329; GFX7-NEXT: s_waitcnt vmcnt(2)330; GFX7-NEXT: v_bfe_i32 v3, v2, 0, 4331; GFX7-NEXT: v_bfe_i32 v4, v2, 4, 4332; GFX7-NEXT: s_waitcnt vmcnt(1)333; GFX7-NEXT: v_bfe_i32 v10, v0, 0, 4334; GFX7-NEXT: v_and_b32_e32 v3, 0xffff, v3335; GFX7-NEXT: v_bfe_i32 v11, v0, 4, 4336; GFX7-NEXT: v_and_b32_e32 v10, 0xffff, v10337; GFX7-NEXT: v_bfe_i32 v5, v2, 8, 4338; GFX7-NEXT: v_and_b32_e32 v4, 0xffff, v4339; GFX7-NEXT: v_bfe_i32 v12, v0, 8, 4340; GFX7-NEXT: v_and_b32_e32 v11, 0xffff, v11341; GFX7-NEXT: s_waitcnt vmcnt(0)342; GFX7-NEXT: v_mad_u32_u24 v1, v3, v10, v1343; GFX7-NEXT: v_bfe_i32 v6, v2, 12, 4344; GFX7-NEXT: v_and_b32_e32 v5, 0xffff, v5345; GFX7-NEXT: v_bfe_i32 v13, v0, 12, 4346; GFX7-NEXT: v_and_b32_e32 v12, 0xffff, v12347; GFX7-NEXT: v_mad_u32_u24 v1, v4, v11, v1348; GFX7-NEXT: v_bfe_i32 v7, v2, 16, 4349; GFX7-NEXT: v_and_b32_e32 v6, 0xffff, v6350; GFX7-NEXT: v_bfe_i32 v14, v0, 16, 4351; GFX7-NEXT: v_and_b32_e32 v13, 0xffff, v13352; GFX7-NEXT: v_mad_u32_u24 v1, v5, v12, v1353; GFX7-NEXT: v_bfe_i32 v8, v2, 20, 4354; GFX7-NEXT: v_and_b32_e32 v7, 0xffff, v7355; GFX7-NEXT: v_bfe_i32 v15, v0, 20, 4356; GFX7-NEXT: v_and_b32_e32 v14, 0xffff, v14357; GFX7-NEXT: v_mad_u32_u24 v1, v6, v13, v1358; GFX7-NEXT: v_bfe_i32 v9, v2, 24, 4359; GFX7-NEXT: v_and_b32_e32 v8, 0xffff, v8360; GFX7-NEXT: v_bfe_i32 v16, v0, 24, 4361; GFX7-NEXT: v_and_b32_e32 v15, 0xffff, v15362; GFX7-NEXT: v_mad_u32_u24 v1, v7, v14, v1363; GFX7-NEXT: v_ashrrev_i32_e32 v2, 28, v2364; GFX7-NEXT: v_and_b32_e32 v9, 0xffff, v9365; GFX7-NEXT: v_ashrrev_i32_e32 v0, 28, v0366; GFX7-NEXT: v_and_b32_e32 v16, 0xffff, v16367; GFX7-NEXT: v_mad_u32_u24 v1, v8, v15, v1368; GFX7-NEXT: v_and_b32_e32 v2, 0xffff, v2369; GFX7-NEXT: v_and_b32_e32 v0, 0xffff, v0370; GFX7-NEXT: v_mad_u32_u24 v1, v9, v16, v1371; GFX7-NEXT: v_mad_u32_u24 v0, v2, v0, v1372; GFX7-NEXT: buffer_store_short v0, off, s[0:3], 0373; GFX7-NEXT: s_endpgm374;375; GFX8-LABEL: idot8_acc16:376; GFX8: ; %bb.0: ; %entry377; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24378; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34379; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v0380; GFX8-NEXT: v_mov_b32_e32 v5, 12381; GFX8-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0382; GFX8-NEXT: s_waitcnt lgkmcnt(0)383; GFX8-NEXT: v_mov_b32_e32 v1, s1384; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v2385; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc386; GFX8-NEXT: flat_load_dword v3, v[0:1]387; GFX8-NEXT: v_mov_b32_e32 v1, s3388; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v2389; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc390; GFX8-NEXT: flat_load_dword v2, v[0:1]391; GFX8-NEXT: v_mov_b32_e32 v0, s4392; GFX8-NEXT: v_mov_b32_e32 v1, s5393; GFX8-NEXT: flat_load_ushort v4, v[0:1]394; GFX8-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1395; GFX8-NEXT: s_mov_b32 s14, -1396; GFX8-NEXT: s_mov_b32 s15, 0xe80000397; GFX8-NEXT: s_add_u32 s12, s12, s11398; GFX8-NEXT: s_addc_u32 s13, s13, 0399; GFX8-NEXT: s_waitcnt vmcnt(2)400; GFX8-NEXT: v_lshrrev_b32_e32 v10, 4, v3401; GFX8-NEXT: v_lshlrev_b16_e32 v16, 12, v3402; GFX8-NEXT: v_lshrrev_b32_e32 v6, 28, v3403; GFX8-NEXT: v_lshrrev_b32_e32 v7, 20, v3404; GFX8-NEXT: v_lshrrev_b32_e32 v8, 12, v3405; GFX8-NEXT: v_lshrrev_b32_e32 v9, 8, v3406; GFX8-NEXT: s_waitcnt vmcnt(1)407; GFX8-NEXT: v_lshrrev_b32_e32 v15, 4, v2408; GFX8-NEXT: v_lshlrev_b16_e32 v17, 12, v2409; GFX8-NEXT: v_lshrrev_b32_e32 v11, 28, v2410; GFX8-NEXT: v_lshrrev_b32_e32 v12, 20, v2411; GFX8-NEXT: v_lshrrev_b32_e32 v13, 12, v2412; GFX8-NEXT: v_lshrrev_b32_e32 v14, 8, v2413; GFX8-NEXT: v_lshlrev_b16_sdwa v18, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1414; GFX8-NEXT: v_lshlrev_b16_sdwa v19, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1415; GFX8-NEXT: v_lshlrev_b16_sdwa v3, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3416; GFX8-NEXT: v_lshlrev_b16_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3417; GFX8-NEXT: v_ashrrev_i16_e32 v5, 12, v16418; GFX8-NEXT: v_ashrrev_i16_e32 v16, 12, v17419; GFX8-NEXT: v_lshlrev_b16_e32 v10, 12, v10420; GFX8-NEXT: v_lshlrev_b16_e32 v15, 12, v15421; GFX8-NEXT: v_lshlrev_b16_e32 v9, 12, v9422; GFX8-NEXT: v_lshlrev_b16_e32 v14, 12, v14423; GFX8-NEXT: v_ashrrev_i16_e32 v10, 12, v10424; GFX8-NEXT: v_ashrrev_i16_e32 v15, 12, v15425; GFX8-NEXT: s_waitcnt vmcnt(0)426; GFX8-NEXT: v_mad_u16 v4, v5, v16, v4427; GFX8-NEXT: v_lshlrev_b16_e32 v8, 12, v8428; GFX8-NEXT: v_lshlrev_b16_e32 v13, 12, v13429; GFX8-NEXT: v_ashrrev_i16_e32 v9, 12, v9430; GFX8-NEXT: v_ashrrev_i16_e32 v14, 12, v14431; GFX8-NEXT: v_mad_u16 v4, v10, v15, v4432; GFX8-NEXT: v_ashrrev_i16_e32 v8, 12, v8433; GFX8-NEXT: v_ashrrev_i16_e32 v13, 12, v13434; GFX8-NEXT: v_mad_u16 v4, v9, v14, v4435; GFX8-NEXT: v_ashrrev_i16_e32 v17, 12, v18436; GFX8-NEXT: v_ashrrev_i16_e32 v18, 12, v19437; GFX8-NEXT: v_lshlrev_b16_e32 v7, 12, v7438; GFX8-NEXT: v_lshlrev_b16_e32 v12, 12, v12439; GFX8-NEXT: v_mad_u16 v4, v8, v13, v4440; GFX8-NEXT: v_ashrrev_i16_e32 v7, 12, v7441; GFX8-NEXT: v_ashrrev_i16_e32 v12, 12, v12442; GFX8-NEXT: v_mad_u16 v4, v17, v18, v4443; GFX8-NEXT: v_ashrrev_i16_e32 v3, 12, v3444; GFX8-NEXT: v_ashrrev_i16_e32 v2, 12, v2445; GFX8-NEXT: v_lshlrev_b16_e32 v6, 12, v6446; GFX8-NEXT: v_lshlrev_b16_e32 v11, 12, v11447; GFX8-NEXT: v_mad_u16 v4, v7, v12, v4448; GFX8-NEXT: v_ashrrev_i16_e32 v6, 12, v6449; GFX8-NEXT: v_ashrrev_i16_e32 v11, 12, v11450; GFX8-NEXT: v_mad_u16 v2, v3, v2, v4451; GFX8-NEXT: v_mad_u16 v2, v6, v11, v2452; GFX8-NEXT: flat_store_short v[0:1], v2453; GFX8-NEXT: s_endpgm454;455; GFX9-LABEL: idot8_acc16:456; GFX9: ; %bb.0: ; %entry457; GFX9-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0458; GFX9-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1459; GFX9-NEXT: s_mov_b32 s14, -1460; GFX9-NEXT: s_mov_b32 s15, 0xe00000461; GFX9-NEXT: s_add_u32 s12, s12, s11462; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24463; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34464; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0465; GFX9-NEXT: v_mov_b32_e32 v4, 12466; GFX9-NEXT: s_waitcnt lgkmcnt(0)467; GFX9-NEXT: global_load_dword v1, v0, s[8:9]468; GFX9-NEXT: global_load_dword v2, v0, s[10:11]469; GFX9-NEXT: v_mov_b32_e32 v0, 0470; GFX9-NEXT: global_load_ushort v3, v0, s[0:1]471; GFX9-NEXT: s_addc_u32 s13, s13, 0472; GFX9-NEXT: s_waitcnt vmcnt(2)473; GFX9-NEXT: v_lshrrev_b32_e32 v9, 4, v1474; GFX9-NEXT: s_waitcnt vmcnt(1)475; GFX9-NEXT: v_lshrrev_b32_e32 v14, 4, v2476; GFX9-NEXT: v_lshlrev_b16_e32 v15, 12, v1477; GFX9-NEXT: v_lshlrev_b16_e32 v16, 12, v2478; GFX9-NEXT: v_lshrrev_b32_e32 v5, 28, v1479; GFX9-NEXT: v_lshrrev_b32_e32 v6, 20, v1480; GFX9-NEXT: v_lshrrev_b32_e32 v7, 12, v1481; GFX9-NEXT: v_lshrrev_b32_e32 v8, 8, v1482; GFX9-NEXT: v_lshrrev_b32_e32 v10, 28, v2483; GFX9-NEXT: v_lshrrev_b32_e32 v11, 20, v2484; GFX9-NEXT: v_lshrrev_b32_e32 v12, 12, v2485; GFX9-NEXT: v_lshrrev_b32_e32 v13, 8, v2486; GFX9-NEXT: v_lshlrev_b16_sdwa v17, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1487; GFX9-NEXT: v_lshlrev_b16_sdwa v18, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1488; GFX9-NEXT: v_lshlrev_b16_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3489; GFX9-NEXT: v_lshlrev_b16_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3490; GFX9-NEXT: v_ashrrev_i16_e32 v4, 12, v15491; GFX9-NEXT: v_ashrrev_i16_e32 v15, 12, v16492; GFX9-NEXT: v_lshlrev_b16_e32 v9, 12, v9493; GFX9-NEXT: v_lshlrev_b16_e32 v14, 12, v14494; GFX9-NEXT: v_lshlrev_b16_e32 v8, 12, v8495; GFX9-NEXT: v_lshlrev_b16_e32 v13, 12, v13496; GFX9-NEXT: v_ashrrev_i16_e32 v9, 12, v9497; GFX9-NEXT: v_ashrrev_i16_e32 v14, 12, v14498; GFX9-NEXT: s_waitcnt vmcnt(0)499; GFX9-NEXT: v_mad_legacy_u16 v3, v4, v15, v3500; GFX9-NEXT: v_lshlrev_b16_e32 v7, 12, v7501; GFX9-NEXT: v_lshlrev_b16_e32 v12, 12, v12502; GFX9-NEXT: v_ashrrev_i16_e32 v8, 12, v8503; GFX9-NEXT: v_ashrrev_i16_e32 v13, 12, v13504; GFX9-NEXT: v_mad_legacy_u16 v3, v9, v14, v3505; GFX9-NEXT: v_ashrrev_i16_e32 v7, 12, v7506; GFX9-NEXT: v_ashrrev_i16_e32 v12, 12, v12507; GFX9-NEXT: v_mad_legacy_u16 v3, v8, v13, v3508; GFX9-NEXT: v_ashrrev_i16_e32 v16, 12, v17509; GFX9-NEXT: v_ashrrev_i16_e32 v17, 12, v18510; GFX9-NEXT: v_lshlrev_b16_e32 v6, 12, v6511; GFX9-NEXT: v_lshlrev_b16_e32 v11, 12, v11512; GFX9-NEXT: v_mad_legacy_u16 v3, v7, v12, v3513; GFX9-NEXT: v_ashrrev_i16_e32 v6, 12, v6514; GFX9-NEXT: v_ashrrev_i16_e32 v11, 12, v11515; GFX9-NEXT: v_mad_legacy_u16 v3, v16, v17, v3516; GFX9-NEXT: v_ashrrev_i16_e32 v1, 12, v1517; GFX9-NEXT: v_ashrrev_i16_e32 v2, 12, v2518; GFX9-NEXT: v_lshlrev_b16_e32 v5, 12, v5519; GFX9-NEXT: v_lshlrev_b16_e32 v10, 12, v10520; GFX9-NEXT: v_mad_legacy_u16 v3, v6, v11, v3521; GFX9-NEXT: v_ashrrev_i16_e32 v5, 12, v5522; GFX9-NEXT: v_ashrrev_i16_e32 v10, 12, v10523; GFX9-NEXT: v_mad_legacy_u16 v1, v1, v2, v3524; GFX9-NEXT: v_mad_legacy_u16 v1, v5, v10, v1525; GFX9-NEXT: global_store_short v0, v1, s[0:1]526; GFX9-NEXT: s_endpgm527;528; GFX9-DL-LABEL: idot8_acc16:529; GFX9-DL: ; %bb.0: ; %entry530; GFX9-DL-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0531; GFX9-DL-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1532; GFX9-DL-NEXT: s_mov_b32 s14, -1533; GFX9-DL-NEXT: s_mov_b32 s15, 0xe00000534; GFX9-DL-NEXT: s_add_u32 s12, s12, s11535; GFX9-DL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24536; GFX9-DL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34537; GFX9-DL-NEXT: v_lshlrev_b32_e32 v0, 2, v0538; GFX9-DL-NEXT: v_mov_b32_e32 v4, 12539; GFX9-DL-NEXT: s_waitcnt lgkmcnt(0)540; GFX9-DL-NEXT: global_load_dword v1, v0, s[8:9]541; GFX9-DL-NEXT: global_load_dword v2, v0, s[10:11]542; GFX9-DL-NEXT: v_mov_b32_e32 v0, 0543; GFX9-DL-NEXT: global_load_ushort v3, v0, s[0:1]544; GFX9-DL-NEXT: s_addc_u32 s13, s13, 0545; GFX9-DL-NEXT: s_waitcnt vmcnt(2)546; GFX9-DL-NEXT: v_lshrrev_b32_e32 v9, 4, v1547; GFX9-DL-NEXT: s_waitcnt vmcnt(1)548; GFX9-DL-NEXT: v_lshrrev_b32_e32 v14, 4, v2549; GFX9-DL-NEXT: v_lshlrev_b16_e32 v15, 12, v1550; GFX9-DL-NEXT: v_lshlrev_b16_e32 v16, 12, v2551; GFX9-DL-NEXT: v_lshrrev_b32_e32 v5, 28, v1552; GFX9-DL-NEXT: v_lshrrev_b32_e32 v6, 20, v1553; GFX9-DL-NEXT: v_lshrrev_b32_e32 v7, 12, v1554; GFX9-DL-NEXT: v_lshrrev_b32_e32 v8, 8, v1555; GFX9-DL-NEXT: v_lshrrev_b32_e32 v10, 28, v2556; GFX9-DL-NEXT: v_lshrrev_b32_e32 v11, 20, v2557; GFX9-DL-NEXT: v_lshrrev_b32_e32 v12, 12, v2558; GFX9-DL-NEXT: v_lshrrev_b32_e32 v13, 8, v2559; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v17, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1560; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v18, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1561; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3562; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3563; GFX9-DL-NEXT: v_ashrrev_i16_e32 v4, 12, v15564; GFX9-DL-NEXT: v_ashrrev_i16_e32 v15, 12, v16565; GFX9-DL-NEXT: v_lshlrev_b16_e32 v9, 12, v9566; GFX9-DL-NEXT: v_lshlrev_b16_e32 v14, 12, v14567; GFX9-DL-NEXT: v_lshlrev_b16_e32 v8, 12, v8568; GFX9-DL-NEXT: v_lshlrev_b16_e32 v13, 12, v13569; GFX9-DL-NEXT: v_ashrrev_i16_e32 v9, 12, v9570; GFX9-DL-NEXT: v_ashrrev_i16_e32 v14, 12, v14571; GFX9-DL-NEXT: s_waitcnt vmcnt(0)572; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v4, v15, v3573; GFX9-DL-NEXT: v_lshlrev_b16_e32 v7, 12, v7574; GFX9-DL-NEXT: v_lshlrev_b16_e32 v12, 12, v12575; GFX9-DL-NEXT: v_ashrrev_i16_e32 v8, 12, v8576; GFX9-DL-NEXT: v_ashrrev_i16_e32 v13, 12, v13577; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v9, v14, v3578; GFX9-DL-NEXT: v_ashrrev_i16_e32 v7, 12, v7579; GFX9-DL-NEXT: v_ashrrev_i16_e32 v12, 12, v12580; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v8, v13, v3581; GFX9-DL-NEXT: v_ashrrev_i16_e32 v16, 12, v17582; GFX9-DL-NEXT: v_ashrrev_i16_e32 v17, 12, v18583; GFX9-DL-NEXT: v_lshlrev_b16_e32 v6, 12, v6584; GFX9-DL-NEXT: v_lshlrev_b16_e32 v11, 12, v11585; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v7, v12, v3586; GFX9-DL-NEXT: v_ashrrev_i16_e32 v6, 12, v6587; GFX9-DL-NEXT: v_ashrrev_i16_e32 v11, 12, v11588; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v16, v17, v3589; GFX9-DL-NEXT: v_ashrrev_i16_e32 v1, 12, v1590; GFX9-DL-NEXT: v_ashrrev_i16_e32 v2, 12, v2591; GFX9-DL-NEXT: v_lshlrev_b16_e32 v5, 12, v5592; GFX9-DL-NEXT: v_lshlrev_b16_e32 v10, 12, v10593; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v6, v11, v3594; GFX9-DL-NEXT: v_ashrrev_i16_e32 v5, 12, v5595; GFX9-DL-NEXT: v_ashrrev_i16_e32 v10, 12, v10596; GFX9-DL-NEXT: v_mad_legacy_u16 v1, v1, v2, v3597; GFX9-DL-NEXT: v_mad_legacy_u16 v1, v5, v10, v1598; GFX9-DL-NEXT: global_store_short v0, v1, s[0:1]599; GFX9-DL-NEXT: s_endpgm600;601; GFX10-DL-XNACK-LABEL: idot8_acc16:602; GFX10-DL-XNACK: ; %bb.0: ; %entry603; GFX10-DL-XNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0604; GFX10-DL-XNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1605; GFX10-DL-XNACK-NEXT: s_mov_b32 s14, -1606; GFX10-DL-XNACK-NEXT: s_mov_b32 s15, 0x31c16000607; GFX10-DL-XNACK-NEXT: s_add_u32 s12, s12, s11608; GFX10-DL-XNACK-NEXT: s_clause 0x1609; GFX10-DL-XNACK-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24610; GFX10-DL-XNACK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34611; GFX10-DL-XNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v0612; GFX10-DL-XNACK-NEXT: s_addc_u32 s13, s13, 0613; GFX10-DL-XNACK-NEXT: s_waitcnt lgkmcnt(0)614; GFX10-DL-XNACK-NEXT: s_clause 0x1615; GFX10-DL-XNACK-NEXT: global_load_dword v1, v0, s[8:9]616; GFX10-DL-XNACK-NEXT: global_load_dword v2, v0, s[10:11]617; GFX10-DL-XNACK-NEXT: v_mov_b32_e32 v0, 0618; GFX10-DL-XNACK-NEXT: global_load_ushort v3, v0, s[0:1]619; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(2)620; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v4, 28, v1621; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v5, 24, v1622; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v6, 20, v1623; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v7, 16, v1624; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v8, 12, v1625; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v9, 8, v1626; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v10, 4, v1627; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v1, 12, v1628; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(1)629; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v16, 4, v2630; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v17, 12, v2631; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v11, 28, v2632; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v12, 24, v2633; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v13, 20, v2634; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v14, 16, v2635; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v15, 12, v2636; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v2, 8, v2637; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v1, 12, v1638; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v10, 12, v10639; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v16, 12, v16640; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v17, 12, v17641; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v9, 12, v9642; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v2, 12, v2643; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v10, 12, v10644; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v16, 12, v16645; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(0)646; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v1, v17, v3647; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v3, 12, v9648; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v2, 12, v2649; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v8, 12, v8650; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v9, 12, v15651; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v10, v16, v1652; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v7, 12, v7653; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v10, 12, v14654; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v8, 12, v8655; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v9, 12, v9656; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v3, v2, v1657; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v2, 12, v7658; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v3, 12, v10659; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v6, 12, v6660; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v7, 12, v13661; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v8, v9, v1662; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v5, 12, v5663; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v8, 12, v12664; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v6, 12, v6665; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v7, 12, v7666; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v2, v3, v1667; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v2, 12, v5668; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v3, 12, v8669; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v4, 12, v4670; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v5, 12, v11671; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v6, v7, v1672; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v4, 12, v4673; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v5, 12, v5674; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v2, v3, v1675; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v4, v5, v1676; GFX10-DL-XNACK-NEXT: global_store_short v0, v1, s[0:1]677; GFX10-DL-XNACK-NEXT: s_endpgm678;679; GFX10-DL-NOXNACK-LABEL: idot8_acc16:680; GFX10-DL-NOXNACK: ; %bb.0: ; %entry681; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0682; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1683; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s14, -1684; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s15, 0x31c16000685; GFX10-DL-NOXNACK-NEXT: s_add_u32 s12, s12, s11686; GFX10-DL-NOXNACK-NEXT: s_clause 0x1687; GFX10-DL-NOXNACK-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24688; GFX10-DL-NOXNACK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34689; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v0690; GFX10-DL-NOXNACK-NEXT: v_mov_b32_e32 v2, 0691; GFX10-DL-NOXNACK-NEXT: s_addc_u32 s13, s13, 0692; GFX10-DL-NOXNACK-NEXT: s_waitcnt lgkmcnt(0)693; GFX10-DL-NOXNACK-NEXT: s_clause 0x1694; GFX10-DL-NOXNACK-NEXT: global_load_dword v1, v0, s[8:9]695; GFX10-DL-NOXNACK-NEXT: global_load_dword v0, v0, s[10:11]696; GFX10-DL-NOXNACK-NEXT: global_load_ushort v3, v2, s[0:1]697; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(2)698; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v4, 28, v1699; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v5, 24, v1700; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v6, 20, v1701; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v7, 16, v1702; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v8, 12, v1703; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v9, 8, v1704; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v10, 4, v1705; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v1, 12, v1706; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(1)707; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v16, 4, v0708; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v17, 12, v0709; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v11, 28, v0710; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v12, 24, v0711; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v13, 20, v0712; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v14, 16, v0713; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v15, 12, v0714; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v0, 8, v0715; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v1, 12, v1716; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v10, 12, v10717; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v16, 12, v16718; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v17, 12, v17719; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v9, 12, v9720; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v0, 12, v0721; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v10, 12, v10722; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v16, 12, v16723; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(0)724; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v1, v1, v17, v3725; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v3, 12, v9726; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v0, 12, v0727; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v8, 12, v8728; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v9, 12, v15729; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v1, v10, v16, v1730; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v7, 12, v7731; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v10, 12, v14732; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v8, 12, v8733; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v9, 12, v9734; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v3, v0, v1735; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v1, 12, v7736; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v3, 12, v10737; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v6, 12, v6738; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v7, 12, v13739; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v8, v9, v0740; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v5, 12, v5741; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v8, 12, v12742; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v6, 12, v6743; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v7, 12, v7744; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v1, v3, v0745; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v1, 12, v5746; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v3, 12, v8747; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v4, 12, v4748; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v5, 12, v11749; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v6, v7, v0750; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v4, 12, v4751; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v5, 12, v5752; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v1, v3, v0753; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v4, v5, v0754; GFX10-DL-NOXNACK-NEXT: global_store_short v2, v0, s[0:1]755; GFX10-DL-NOXNACK-NEXT: s_endpgm756 ptr addrspace(1) %src2,757 ptr addrspace(1) nocapture %dst) {758entry:759 %idx = call i32 @llvm.amdgcn.workitem.id.x()760 %gep1 = getelementptr <8 x i4>, ptr addrspace(1) %src1, i32 %idx761 %vec1 = load <8 x i4>, ptr addrspace(1) %gep1762 %gep2 = getelementptr <8 x i4>, ptr addrspace(1) %src2, i32 %idx763 %vec2 = load <8 x i4>, ptr addrspace(1) %gep2764 765 %v1e0 = extractelement <8 x i4> %vec1, i64 0766 %cv1e0 = sext i4 %v1e0 to i16767 %v2e0 = extractelement <8 x i4> %vec2, i64 0768 %cv2e0 = sext i4 %v2e0 to i16769 %mul0 = mul nuw nsw i16 %cv1e0, %cv2e0770 771 %v1e1 = extractelement <8 x i4> %vec1, i64 1772 %cv1e1 = sext i4 %v1e1 to i16773 %v2e1 = extractelement <8 x i4> %vec2, i64 1774 %cv2e1 = sext i4 %v2e1 to i16775 %mul1 = mul nuw nsw i16 %cv1e1, %cv2e1776 777 %v1e2 = extractelement <8 x i4> %vec1, i64 2778 %cv1e2 = sext i4 %v1e2 to i16779 %v2e2 = extractelement <8 x i4> %vec2, i64 2780 %cv2e2 = sext i4 %v2e2 to i16781 %mul2 = mul nuw nsw i16 %cv1e2, %cv2e2782 783 %v1e3 = extractelement <8 x i4> %vec1, i64 3784 %cv1e3 = sext i4 %v1e3 to i16785 %v2e3 = extractelement <8 x i4> %vec2, i64 3786 %cv2e3 = sext i4 %v2e3 to i16787 %mul3 = mul nuw nsw i16 %cv1e3, %cv2e3788 789 %v1e4 = extractelement <8 x i4> %vec1, i64 4790 %cv1e4 = sext i4 %v1e4 to i16791 %v2e4 = extractelement <8 x i4> %vec2, i64 4792 %cv2e4 = sext i4 %v2e4 to i16793 %mul4 = mul nuw nsw i16 %cv1e4, %cv2e4794 795 %v1e5 = extractelement <8 x i4> %vec1, i64 5796 %cv1e5 = sext i4 %v1e5 to i16797 %v2e5 = extractelement <8 x i4> %vec2, i64 5798 %cv2e5 = sext i4 %v2e5 to i16799 %mul5 = mul nuw nsw i16 %cv1e5, %cv2e5800 801 %v1e6 = extractelement <8 x i4> %vec1, i64 6802 %cv1e6 = sext i4 %v1e6 to i16803 %v2e6 = extractelement <8 x i4> %vec2, i64 6804 %cv2e6 = sext i4 %v2e6 to i16805 %mul6 = mul nuw nsw i16 %cv1e6, %cv2e6806 807 %v1e7 = extractelement <8 x i4> %vec1, i64 7808 %cv1e7 = sext i4 %v1e7 to i16809 %v2e7 = extractelement <8 x i4> %vec2, i64 7810 %cv2e7 = sext i4 %v2e7 to i16811 %mul7 = mul nuw nsw i16 %cv1e7, %cv2e7812 813 %acc = load i16, ptr addrspace(1) %dst, align 4814 %add1 = add i16 %mul0, %acc815 %add2 = add i16 %add1, %mul1816 %add3 = add i16 %add2, %mul2817 %add4 = add i16 %add3, %mul3818 %add5 = add i16 %add4, %mul4819 %add6 = add i16 %add5, %mul5820 %add7 = add i16 %add6, %mul6821 %add8 = add i16 %add7, %mul7822 823 store i16 %add8, ptr addrspace(1) %dst, align 4824 ret void825}826 827; TODO: Support this pattern.828define amdgpu_kernel void @idot8_acc8(ptr addrspace(1) %src1,829; GFX7-LABEL: idot8_acc8:830; GFX7: ; %bb.0: ; %entry831; GFX7-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0832; GFX7-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1833; GFX7-NEXT: s_mov_b32 s14, -1834; GFX7-NEXT: s_mov_b32 s15, 0xe8f000835; GFX7-NEXT: s_add_u32 s12, s12, s11836; GFX7-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x9837; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd838; GFX7-NEXT: s_mov_b32 s3, 0xf000839; GFX7-NEXT: s_mov_b32 s6, 0840; GFX7-NEXT: s_mov_b32 s7, s3841; GFX7-NEXT: s_waitcnt lgkmcnt(0)842; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]843; GFX7-NEXT: v_lshlrev_b32_e32 v0, 2, v0844; GFX7-NEXT: v_mov_b32_e32 v1, 0845; GFX7-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64846; GFX7-NEXT: s_mov_b64 s[4:5], s[10:11]847; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64848; GFX7-NEXT: s_mov_b32 s2, -1849; GFX7-NEXT: buffer_load_ubyte v1, off, s[0:3], 0850; GFX7-NEXT: s_addc_u32 s13, s13, 0851; GFX7-NEXT: s_waitcnt vmcnt(2)852; GFX7-NEXT: v_bfe_i32 v3, v2, 0, 4853; GFX7-NEXT: v_bfe_i32 v4, v2, 4, 4854; GFX7-NEXT: s_waitcnt vmcnt(1)855; GFX7-NEXT: v_bfe_i32 v10, v0, 0, 4856; GFX7-NEXT: v_and_b32_e32 v3, 0xff, v3857; GFX7-NEXT: v_bfe_i32 v11, v0, 4, 4858; GFX7-NEXT: v_and_b32_e32 v10, 0xff, v10859; GFX7-NEXT: v_bfe_i32 v5, v2, 8, 4860; GFX7-NEXT: v_and_b32_e32 v4, 0xff, v4861; GFX7-NEXT: v_bfe_i32 v12, v0, 8, 4862; GFX7-NEXT: v_and_b32_e32 v11, 0xff, v11863; GFX7-NEXT: s_waitcnt vmcnt(0)864; GFX7-NEXT: v_mad_u32_u24 v1, v3, v10, v1865; GFX7-NEXT: v_bfe_i32 v6, v2, 12, 4866; GFX7-NEXT: v_and_b32_e32 v5, 0xff, v5867; GFX7-NEXT: v_bfe_i32 v13, v0, 12, 4868; GFX7-NEXT: v_and_b32_e32 v12, 0xff, v12869; GFX7-NEXT: v_mad_u32_u24 v1, v4, v11, v1870; GFX7-NEXT: v_bfe_i32 v7, v2, 16, 4871; GFX7-NEXT: v_and_b32_e32 v6, 0xff, v6872; GFX7-NEXT: v_bfe_i32 v14, v0, 16, 4873; GFX7-NEXT: v_and_b32_e32 v13, 0xff, v13874; GFX7-NEXT: v_mad_u32_u24 v1, v5, v12, v1875; GFX7-NEXT: v_bfe_i32 v8, v2, 20, 4876; GFX7-NEXT: v_and_b32_e32 v7, 0xff, v7877; GFX7-NEXT: v_bfe_i32 v15, v0, 20, 4878; GFX7-NEXT: v_and_b32_e32 v14, 0xff, v14879; GFX7-NEXT: v_mad_u32_u24 v1, v6, v13, v1880; GFX7-NEXT: v_bfe_i32 v9, v2, 24, 4881; GFX7-NEXT: v_and_b32_e32 v8, 0xff, v8882; GFX7-NEXT: v_bfe_i32 v16, v0, 24, 4883; GFX7-NEXT: v_and_b32_e32 v15, 0xff, v15884; GFX7-NEXT: v_mad_u32_u24 v1, v7, v14, v1885; GFX7-NEXT: v_ashrrev_i32_e32 v2, 28, v2886; GFX7-NEXT: v_and_b32_e32 v9, 0xff, v9887; GFX7-NEXT: v_ashrrev_i32_e32 v0, 28, v0888; GFX7-NEXT: v_and_b32_e32 v16, 0xff, v16889; GFX7-NEXT: v_mad_u32_u24 v1, v8, v15, v1890; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v2891; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v0892; GFX7-NEXT: v_mad_u32_u24 v1, v9, v16, v1893; GFX7-NEXT: v_mad_u32_u24 v0, v2, v0, v1894; GFX7-NEXT: buffer_store_byte v0, off, s[0:3], 0895; GFX7-NEXT: s_endpgm896;897; GFX8-LABEL: idot8_acc8:898; GFX8: ; %bb.0: ; %entry899; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24900; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34901; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v0902; GFX8-NEXT: v_mov_b32_e32 v5, 12903; GFX8-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0904; GFX8-NEXT: s_waitcnt lgkmcnt(0)905; GFX8-NEXT: v_mov_b32_e32 v1, s1906; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v2907; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc908; GFX8-NEXT: flat_load_dword v3, v[0:1]909; GFX8-NEXT: v_mov_b32_e32 v1, s3910; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v2911; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc912; GFX8-NEXT: flat_load_dword v2, v[0:1]913; GFX8-NEXT: v_mov_b32_e32 v0, s4914; GFX8-NEXT: v_mov_b32_e32 v1, s5915; GFX8-NEXT: flat_load_ubyte v4, v[0:1]916; GFX8-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1917; GFX8-NEXT: s_mov_b32 s14, -1918; GFX8-NEXT: s_mov_b32 s15, 0xe80000919; GFX8-NEXT: s_add_u32 s12, s12, s11920; GFX8-NEXT: s_addc_u32 s13, s13, 0921; GFX8-NEXT: s_waitcnt vmcnt(2)922; GFX8-NEXT: v_lshrrev_b32_e32 v10, 4, v3923; GFX8-NEXT: v_lshlrev_b16_e32 v16, 12, v3924; GFX8-NEXT: v_lshrrev_b32_e32 v6, 28, v3925; GFX8-NEXT: v_lshrrev_b32_e32 v7, 20, v3926; GFX8-NEXT: v_lshrrev_b32_e32 v8, 12, v3927; GFX8-NEXT: v_lshrrev_b32_e32 v9, 8, v3928; GFX8-NEXT: s_waitcnt vmcnt(1)929; GFX8-NEXT: v_lshrrev_b32_e32 v15, 4, v2930; GFX8-NEXT: v_lshlrev_b16_e32 v17, 12, v2931; GFX8-NEXT: v_lshrrev_b32_e32 v11, 28, v2932; GFX8-NEXT: v_lshrrev_b32_e32 v12, 20, v2933; GFX8-NEXT: v_lshrrev_b32_e32 v13, 12, v2934; GFX8-NEXT: v_lshrrev_b32_e32 v14, 8, v2935; GFX8-NEXT: v_lshlrev_b16_sdwa v18, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1936; GFX8-NEXT: v_lshlrev_b16_sdwa v19, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1937; GFX8-NEXT: v_lshlrev_b16_sdwa v3, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3938; GFX8-NEXT: v_lshlrev_b16_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3939; GFX8-NEXT: v_ashrrev_i16_e32 v5, 12, v16940; GFX8-NEXT: v_ashrrev_i16_e32 v16, 12, v17941; GFX8-NEXT: v_lshlrev_b16_e32 v10, 12, v10942; GFX8-NEXT: v_lshlrev_b16_e32 v15, 12, v15943; GFX8-NEXT: v_lshlrev_b16_e32 v9, 12, v9944; GFX8-NEXT: v_lshlrev_b16_e32 v14, 12, v14945; GFX8-NEXT: v_ashrrev_i16_e32 v10, 12, v10946; GFX8-NEXT: v_ashrrev_i16_e32 v15, 12, v15947; GFX8-NEXT: s_waitcnt vmcnt(0)948; GFX8-NEXT: v_mad_u16 v4, v5, v16, v4949; GFX8-NEXT: v_lshlrev_b16_e32 v8, 12, v8950; GFX8-NEXT: v_lshlrev_b16_e32 v13, 12, v13951; GFX8-NEXT: v_ashrrev_i16_e32 v9, 12, v9952; GFX8-NEXT: v_ashrrev_i16_e32 v14, 12, v14953; GFX8-NEXT: v_mad_u16 v4, v10, v15, v4954; GFX8-NEXT: v_ashrrev_i16_e32 v8, 12, v8955; GFX8-NEXT: v_ashrrev_i16_e32 v13, 12, v13956; GFX8-NEXT: v_mad_u16 v4, v9, v14, v4957; GFX8-NEXT: v_ashrrev_i16_e32 v17, 12, v18958; GFX8-NEXT: v_ashrrev_i16_e32 v18, 12, v19959; GFX8-NEXT: v_lshlrev_b16_e32 v7, 12, v7960; GFX8-NEXT: v_lshlrev_b16_e32 v12, 12, v12961; GFX8-NEXT: v_mad_u16 v4, v8, v13, v4962; GFX8-NEXT: v_ashrrev_i16_e32 v7, 12, v7963; GFX8-NEXT: v_ashrrev_i16_e32 v12, 12, v12964; GFX8-NEXT: v_mad_u16 v4, v17, v18, v4965; GFX8-NEXT: v_ashrrev_i16_e32 v3, 12, v3966; GFX8-NEXT: v_ashrrev_i16_e32 v2, 12, v2967; GFX8-NEXT: v_lshlrev_b16_e32 v6, 12, v6968; GFX8-NEXT: v_lshlrev_b16_e32 v11, 12, v11969; GFX8-NEXT: v_mad_u16 v4, v7, v12, v4970; GFX8-NEXT: v_ashrrev_i16_e32 v6, 12, v6971; GFX8-NEXT: v_ashrrev_i16_e32 v11, 12, v11972; GFX8-NEXT: v_mad_u16 v2, v3, v2, v4973; GFX8-NEXT: v_mad_u16 v2, v6, v11, v2974; GFX8-NEXT: flat_store_byte v[0:1], v2975; GFX8-NEXT: s_endpgm976;977; GFX9-LABEL: idot8_acc8:978; GFX9: ; %bb.0: ; %entry979; GFX9-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0980; GFX9-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1981; GFX9-NEXT: s_mov_b32 s14, -1982; GFX9-NEXT: s_mov_b32 s15, 0xe00000983; GFX9-NEXT: s_add_u32 s12, s12, s11984; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24985; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34986; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0987; GFX9-NEXT: v_mov_b32_e32 v4, 12988; GFX9-NEXT: s_waitcnt lgkmcnt(0)989; GFX9-NEXT: global_load_dword v1, v0, s[8:9]990; GFX9-NEXT: global_load_dword v2, v0, s[10:11]991; GFX9-NEXT: v_mov_b32_e32 v0, 0992; GFX9-NEXT: global_load_ubyte v3, v0, s[0:1]993; GFX9-NEXT: s_addc_u32 s13, s13, 0994; GFX9-NEXT: s_waitcnt vmcnt(2)995; GFX9-NEXT: v_lshrrev_b32_e32 v9, 4, v1996; GFX9-NEXT: s_waitcnt vmcnt(1)997; GFX9-NEXT: v_lshrrev_b32_e32 v14, 4, v2998; GFX9-NEXT: v_lshlrev_b16_e32 v15, 12, v1999; GFX9-NEXT: v_lshlrev_b16_e32 v16, 12, v21000; GFX9-NEXT: v_lshrrev_b32_e32 v5, 28, v11001; GFX9-NEXT: v_lshrrev_b32_e32 v6, 20, v11002; GFX9-NEXT: v_lshrrev_b32_e32 v7, 12, v11003; GFX9-NEXT: v_lshrrev_b32_e32 v8, 8, v11004; GFX9-NEXT: v_lshrrev_b32_e32 v10, 28, v21005; GFX9-NEXT: v_lshrrev_b32_e32 v11, 20, v21006; GFX9-NEXT: v_lshrrev_b32_e32 v12, 12, v21007; GFX9-NEXT: v_lshrrev_b32_e32 v13, 8, v21008; GFX9-NEXT: v_lshlrev_b16_sdwa v17, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_11009; GFX9-NEXT: v_lshlrev_b16_sdwa v18, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_11010; GFX9-NEXT: v_lshlrev_b16_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_31011; GFX9-NEXT: v_lshlrev_b16_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_31012; GFX9-NEXT: v_ashrrev_i16_e32 v4, 12, v151013; GFX9-NEXT: v_ashrrev_i16_e32 v15, 12, v161014; GFX9-NEXT: v_lshlrev_b16_e32 v9, 12, v91015; GFX9-NEXT: v_lshlrev_b16_e32 v14, 12, v141016; GFX9-NEXT: v_lshlrev_b16_e32 v8, 12, v81017; GFX9-NEXT: v_lshlrev_b16_e32 v13, 12, v131018; GFX9-NEXT: v_ashrrev_i16_e32 v9, 12, v91019; GFX9-NEXT: v_ashrrev_i16_e32 v14, 12, v141020; GFX9-NEXT: s_waitcnt vmcnt(0)1021; GFX9-NEXT: v_mad_legacy_u16 v3, v4, v15, v31022; GFX9-NEXT: v_lshlrev_b16_e32 v7, 12, v71023; GFX9-NEXT: v_lshlrev_b16_e32 v12, 12, v121024; GFX9-NEXT: v_ashrrev_i16_e32 v8, 12, v81025; GFX9-NEXT: v_ashrrev_i16_e32 v13, 12, v131026; GFX9-NEXT: v_mad_legacy_u16 v3, v9, v14, v31027; GFX9-NEXT: v_ashrrev_i16_e32 v7, 12, v71028; GFX9-NEXT: v_ashrrev_i16_e32 v12, 12, v121029; GFX9-NEXT: v_mad_legacy_u16 v3, v8, v13, v31030; GFX9-NEXT: v_ashrrev_i16_e32 v16, 12, v171031; GFX9-NEXT: v_ashrrev_i16_e32 v17, 12, v181032; GFX9-NEXT: v_lshlrev_b16_e32 v6, 12, v61033; GFX9-NEXT: v_lshlrev_b16_e32 v11, 12, v111034; GFX9-NEXT: v_mad_legacy_u16 v3, v7, v12, v31035; GFX9-NEXT: v_ashrrev_i16_e32 v6, 12, v61036; GFX9-NEXT: v_ashrrev_i16_e32 v11, 12, v111037; GFX9-NEXT: v_mad_legacy_u16 v3, v16, v17, v31038; GFX9-NEXT: v_ashrrev_i16_e32 v1, 12, v11039; GFX9-NEXT: v_ashrrev_i16_e32 v2, 12, v21040; GFX9-NEXT: v_lshlrev_b16_e32 v5, 12, v51041; GFX9-NEXT: v_lshlrev_b16_e32 v10, 12, v101042; GFX9-NEXT: v_mad_legacy_u16 v3, v6, v11, v31043; GFX9-NEXT: v_ashrrev_i16_e32 v5, 12, v51044; GFX9-NEXT: v_ashrrev_i16_e32 v10, 12, v101045; GFX9-NEXT: v_mad_legacy_u16 v1, v1, v2, v31046; GFX9-NEXT: v_mad_legacy_u16 v1, v5, v10, v11047; GFX9-NEXT: global_store_byte v0, v1, s[0:1]1048; GFX9-NEXT: s_endpgm1049;1050; GFX9-DL-LABEL: idot8_acc8:1051; GFX9-DL: ; %bb.0: ; %entry1052; GFX9-DL-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01053; GFX9-DL-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11054; GFX9-DL-NEXT: s_mov_b32 s14, -11055; GFX9-DL-NEXT: s_mov_b32 s15, 0xe000001056; GFX9-DL-NEXT: s_add_u32 s12, s12, s111057; GFX9-DL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x241058; GFX9-DL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x341059; GFX9-DL-NEXT: v_lshlrev_b32_e32 v0, 2, v01060; GFX9-DL-NEXT: v_mov_b32_e32 v4, 121061; GFX9-DL-NEXT: s_waitcnt lgkmcnt(0)1062; GFX9-DL-NEXT: global_load_dword v1, v0, s[8:9]1063; GFX9-DL-NEXT: global_load_dword v2, v0, s[10:11]1064; GFX9-DL-NEXT: v_mov_b32_e32 v0, 01065; GFX9-DL-NEXT: global_load_ubyte v3, v0, s[0:1]1066; GFX9-DL-NEXT: s_addc_u32 s13, s13, 01067; GFX9-DL-NEXT: s_waitcnt vmcnt(2)1068; GFX9-DL-NEXT: v_lshrrev_b32_e32 v9, 4, v11069; GFX9-DL-NEXT: s_waitcnt vmcnt(1)1070; GFX9-DL-NEXT: v_lshrrev_b32_e32 v14, 4, v21071; GFX9-DL-NEXT: v_lshlrev_b16_e32 v15, 12, v11072; GFX9-DL-NEXT: v_lshlrev_b16_e32 v16, 12, v21073; GFX9-DL-NEXT: v_lshrrev_b32_e32 v5, 28, v11074; GFX9-DL-NEXT: v_lshrrev_b32_e32 v6, 20, v11075; GFX9-DL-NEXT: v_lshrrev_b32_e32 v7, 12, v11076; GFX9-DL-NEXT: v_lshrrev_b32_e32 v8, 8, v11077; GFX9-DL-NEXT: v_lshrrev_b32_e32 v10, 28, v21078; GFX9-DL-NEXT: v_lshrrev_b32_e32 v11, 20, v21079; GFX9-DL-NEXT: v_lshrrev_b32_e32 v12, 12, v21080; GFX9-DL-NEXT: v_lshrrev_b32_e32 v13, 8, v21081; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v17, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_11082; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v18, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_11083; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_31084; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_31085; GFX9-DL-NEXT: v_ashrrev_i16_e32 v4, 12, v151086; GFX9-DL-NEXT: v_ashrrev_i16_e32 v15, 12, v161087; GFX9-DL-NEXT: v_lshlrev_b16_e32 v9, 12, v91088; GFX9-DL-NEXT: v_lshlrev_b16_e32 v14, 12, v141089; GFX9-DL-NEXT: v_lshlrev_b16_e32 v8, 12, v81090; GFX9-DL-NEXT: v_lshlrev_b16_e32 v13, 12, v131091; GFX9-DL-NEXT: v_ashrrev_i16_e32 v9, 12, v91092; GFX9-DL-NEXT: v_ashrrev_i16_e32 v14, 12, v141093; GFX9-DL-NEXT: s_waitcnt vmcnt(0)1094; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v4, v15, v31095; GFX9-DL-NEXT: v_lshlrev_b16_e32 v7, 12, v71096; GFX9-DL-NEXT: v_lshlrev_b16_e32 v12, 12, v121097; GFX9-DL-NEXT: v_ashrrev_i16_e32 v8, 12, v81098; GFX9-DL-NEXT: v_ashrrev_i16_e32 v13, 12, v131099; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v9, v14, v31100; GFX9-DL-NEXT: v_ashrrev_i16_e32 v7, 12, v71101; GFX9-DL-NEXT: v_ashrrev_i16_e32 v12, 12, v121102; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v8, v13, v31103; GFX9-DL-NEXT: v_ashrrev_i16_e32 v16, 12, v171104; GFX9-DL-NEXT: v_ashrrev_i16_e32 v17, 12, v181105; GFX9-DL-NEXT: v_lshlrev_b16_e32 v6, 12, v61106; GFX9-DL-NEXT: v_lshlrev_b16_e32 v11, 12, v111107; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v7, v12, v31108; GFX9-DL-NEXT: v_ashrrev_i16_e32 v6, 12, v61109; GFX9-DL-NEXT: v_ashrrev_i16_e32 v11, 12, v111110; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v16, v17, v31111; GFX9-DL-NEXT: v_ashrrev_i16_e32 v1, 12, v11112; GFX9-DL-NEXT: v_ashrrev_i16_e32 v2, 12, v21113; GFX9-DL-NEXT: v_lshlrev_b16_e32 v5, 12, v51114; GFX9-DL-NEXT: v_lshlrev_b16_e32 v10, 12, v101115; GFX9-DL-NEXT: v_mad_legacy_u16 v3, v6, v11, v31116; GFX9-DL-NEXT: v_ashrrev_i16_e32 v5, 12, v51117; GFX9-DL-NEXT: v_ashrrev_i16_e32 v10, 12, v101118; GFX9-DL-NEXT: v_mad_legacy_u16 v1, v1, v2, v31119; GFX9-DL-NEXT: v_mad_legacy_u16 v1, v5, v10, v11120; GFX9-DL-NEXT: global_store_byte v0, v1, s[0:1]1121; GFX9-DL-NEXT: s_endpgm1122;1123; GFX10-DL-XNACK-LABEL: idot8_acc8:1124; GFX10-DL-XNACK: ; %bb.0: ; %entry1125; GFX10-DL-XNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01126; GFX10-DL-XNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11127; GFX10-DL-XNACK-NEXT: s_mov_b32 s14, -11128; GFX10-DL-XNACK-NEXT: s_mov_b32 s15, 0x31c160001129; GFX10-DL-XNACK-NEXT: s_add_u32 s12, s12, s111130; GFX10-DL-XNACK-NEXT: s_clause 0x11131; GFX10-DL-XNACK-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x241132; GFX10-DL-XNACK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x341133; GFX10-DL-XNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v01134; GFX10-DL-XNACK-NEXT: s_addc_u32 s13, s13, 01135; GFX10-DL-XNACK-NEXT: s_waitcnt lgkmcnt(0)1136; GFX10-DL-XNACK-NEXT: s_clause 0x11137; GFX10-DL-XNACK-NEXT: global_load_dword v1, v0, s[8:9]1138; GFX10-DL-XNACK-NEXT: global_load_dword v2, v0, s[10:11]1139; GFX10-DL-XNACK-NEXT: v_mov_b32_e32 v0, 01140; GFX10-DL-XNACK-NEXT: global_load_ubyte v3, v0, s[0:1]1141; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(2)1142; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v4, 28, v11143; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v5, 24, v11144; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v6, 20, v11145; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v7, 16, v11146; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v8, 12, v11147; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v9, 8, v11148; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v10, 4, v11149; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v1, 12, v11150; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(1)1151; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v16, 4, v21152; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v17, 12, v21153; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v11, 28, v21154; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v12, 24, v21155; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v13, 20, v21156; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v14, 16, v21157; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v15, 12, v21158; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v2, 8, v21159; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v1, 12, v11160; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v10, 12, v101161; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v16, 12, v161162; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v17, 12, v171163; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v9, 12, v91164; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v2, 12, v21165; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v10, 12, v101166; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v16, 12, v161167; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(0)1168; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v1, v17, v31169; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v3, 12, v91170; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v2, 12, v21171; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v8, 12, v81172; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v9, 12, v151173; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v10, v16, v11174; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v7, 12, v71175; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v10, 12, v141176; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v8, 12, v81177; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v9, 12, v91178; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v3, v2, v11179; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v2, 12, v71180; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v3, 12, v101181; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v6, 12, v61182; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v7, 12, v131183; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v8, v9, v11184; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v5, 12, v51185; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v8, 12, v121186; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v6, 12, v61187; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v7, 12, v71188; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v2, v3, v11189; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v2, 12, v51190; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v3, 12, v81191; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v4, 12, v41192; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v5, 12, v111193; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v6, v7, v11194; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v4, 12, v41195; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v5, 12, v51196; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v2, v3, v11197; GFX10-DL-XNACK-NEXT: v_mad_u16 v1, v4, v5, v11198; GFX10-DL-XNACK-NEXT: global_store_byte v0, v1, s[0:1]1199; GFX10-DL-XNACK-NEXT: s_endpgm1200;1201; GFX10-DL-NOXNACK-LABEL: idot8_acc8:1202; GFX10-DL-NOXNACK: ; %bb.0: ; %entry1203; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01204; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11205; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s14, -11206; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s15, 0x31c160001207; GFX10-DL-NOXNACK-NEXT: s_add_u32 s12, s12, s111208; GFX10-DL-NOXNACK-NEXT: s_clause 0x11209; GFX10-DL-NOXNACK-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x241210; GFX10-DL-NOXNACK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x341211; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v01212; GFX10-DL-NOXNACK-NEXT: v_mov_b32_e32 v2, 01213; GFX10-DL-NOXNACK-NEXT: s_addc_u32 s13, s13, 01214; GFX10-DL-NOXNACK-NEXT: s_waitcnt lgkmcnt(0)1215; GFX10-DL-NOXNACK-NEXT: s_clause 0x11216; GFX10-DL-NOXNACK-NEXT: global_load_dword v1, v0, s[8:9]1217; GFX10-DL-NOXNACK-NEXT: global_load_dword v0, v0, s[10:11]1218; GFX10-DL-NOXNACK-NEXT: global_load_ubyte v3, v2, s[0:1]1219; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(2)1220; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v4, 28, v11221; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v5, 24, v11222; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v6, 20, v11223; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v7, 16, v11224; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v8, 12, v11225; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v9, 8, v11226; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v10, 4, v11227; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v1, 12, v11228; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(1)1229; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v16, 4, v01230; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v17, 12, v01231; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v11, 28, v01232; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v12, 24, v01233; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v13, 20, v01234; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v14, 16, v01235; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v15, 12, v01236; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v0, 8, v01237; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v1, 12, v11238; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v10, 12, v101239; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v16, 12, v161240; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v17, 12, v171241; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v9, 12, v91242; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v0, 12, v01243; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v10, 12, v101244; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v16, 12, v161245; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(0)1246; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v1, v1, v17, v31247; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v3, 12, v91248; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v0, 12, v01249; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v8, 12, v81250; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v9, 12, v151251; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v1, v10, v16, v11252; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v7, 12, v71253; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v10, 12, v141254; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v8, 12, v81255; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v9, 12, v91256; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v3, v0, v11257; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v1, 12, v71258; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v3, 12, v101259; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v6, 12, v61260; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v7, 12, v131261; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v8, v9, v01262; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v5, 12, v51263; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v8, 12, v121264; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v6, 12, v61265; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v7, 12, v71266; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v1, v3, v01267; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v1, 12, v51268; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v3, 12, v81269; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v4, 12, v41270; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v5, 12, v111271; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v6, v7, v01272; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v4, 12, v41273; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v5, 12, v51274; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v1, v3, v01275; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v4, v5, v01276; GFX10-DL-NOXNACK-NEXT: global_store_byte v2, v0, s[0:1]1277; GFX10-DL-NOXNACK-NEXT: s_endpgm1278 ptr addrspace(1) %src2,1279 ptr addrspace(1) nocapture %dst) {1280entry:1281 %idx = call i32 @llvm.amdgcn.workitem.id.x()1282 %gep1 = getelementptr <8 x i4>, ptr addrspace(1) %src1, i32 %idx1283 %vec1 = load <8 x i4>, ptr addrspace(1) %gep11284 %gep2 = getelementptr <8 x i4>, ptr addrspace(1) %src2, i32 %idx1285 %vec2 = load <8 x i4>, ptr addrspace(1) %gep21286 1287 %v1e0 = extractelement <8 x i4> %vec1, i64 01288 %cv1e0 = sext i4 %v1e0 to i81289 %v2e0 = extractelement <8 x i4> %vec2, i64 01290 %cv2e0 = sext i4 %v2e0 to i81291 %mul0 = mul nuw nsw i8 %cv1e0, %cv2e01292 1293 %v1e1 = extractelement <8 x i4> %vec1, i64 11294 %cv1e1 = sext i4 %v1e1 to i81295 %v2e1 = extractelement <8 x i4> %vec2, i64 11296 %cv2e1 = sext i4 %v2e1 to i81297 %mul1 = mul nuw nsw i8 %cv1e1, %cv2e11298 1299 %v1e2 = extractelement <8 x i4> %vec1, i64 21300 %cv1e2 = sext i4 %v1e2 to i81301 %v2e2 = extractelement <8 x i4> %vec2, i64 21302 %cv2e2 = sext i4 %v2e2 to i81303 %mul2 = mul nuw nsw i8 %cv1e2, %cv2e21304 1305 %v1e3 = extractelement <8 x i4> %vec1, i64 31306 %cv1e3 = sext i4 %v1e3 to i81307 %v2e3 = extractelement <8 x i4> %vec2, i64 31308 %cv2e3 = sext i4 %v2e3 to i81309 %mul3 = mul nuw nsw i8 %cv1e3, %cv2e31310 1311 %v1e4 = extractelement <8 x i4> %vec1, i64 41312 %cv1e4 = sext i4 %v1e4 to i81313 %v2e4 = extractelement <8 x i4> %vec2, i64 41314 %cv2e4 = sext i4 %v2e4 to i81315 %mul4 = mul nuw nsw i8 %cv1e4, %cv2e41316 1317 %v1e5 = extractelement <8 x i4> %vec1, i64 51318 %cv1e5 = sext i4 %v1e5 to i81319 %v2e5 = extractelement <8 x i4> %vec2, i64 51320 %cv2e5 = sext i4 %v2e5 to i81321 %mul5 = mul nuw nsw i8 %cv1e5, %cv2e51322 1323 %v1e6 = extractelement <8 x i4> %vec1, i64 61324 %cv1e6 = sext i4 %v1e6 to i81325 %v2e6 = extractelement <8 x i4> %vec2, i64 61326 %cv2e6 = sext i4 %v2e6 to i81327 %mul6 = mul nuw nsw i8 %cv1e6, %cv2e61328 1329 %v1e7 = extractelement <8 x i4> %vec1, i64 71330 %cv1e7 = sext i4 %v1e7 to i81331 %v2e7 = extractelement <8 x i4> %vec2, i64 71332 %cv2e7 = sext i4 %v2e7 to i81333 %mul7 = mul nuw nsw i8 %cv1e7, %cv2e71334 1335 %acc = load i8, ptr addrspace(1) %dst, align 41336 %add1 = add i8 %mul0, %acc1337 %add2 = add i8 %add1, %mul11338 %add3 = add i8 %add2, %mul21339 %add4 = add i8 %add3, %mul31340 %add5 = add i8 %add4, %mul41341 %add6 = add i8 %add5, %mul51342 %add7 = add i8 %add6, %mul61343 %add8 = add i8 %add7, %mul71344 1345 store i8 %add8, ptr addrspace(1) %dst, align 41346 ret void1347}1348 1349; Make sure the pattern is not recognized if there are multiple uses of the1350; intermediate multiplications.1351define amdgpu_kernel void @idot8_multiuses_mul1(ptr addrspace(1) %src1,1352; GFX7-LABEL: idot8_multiuses_mul1:1353; GFX7: ; %bb.0: ; %entry1354; GFX7-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01355; GFX7-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11356; GFX7-NEXT: s_mov_b32 s14, -11357; GFX7-NEXT: s_mov_b32 s15, 0xe8f0001358; GFX7-NEXT: s_add_u32 s12, s12, s111359; GFX7-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x91360; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd1361; GFX7-NEXT: s_mov_b32 s3, 0xf0001362; GFX7-NEXT: s_mov_b32 s6, 01363; GFX7-NEXT: s_mov_b32 s7, s31364; GFX7-NEXT: s_waitcnt lgkmcnt(0)1365; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]1366; GFX7-NEXT: v_lshlrev_b32_e32 v0, 2, v01367; GFX7-NEXT: v_mov_b32_e32 v1, 01368; GFX7-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr641369; GFX7-NEXT: s_mov_b64 s[4:5], s[10:11]1370; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr641371; GFX7-NEXT: s_load_dword s4, s[0:1], 0x01372; GFX7-NEXT: s_mov_b32 s2, -11373; GFX7-NEXT: s_addc_u32 s13, s13, 01374; GFX7-NEXT: s_waitcnt vmcnt(1)1375; GFX7-NEXT: v_bfe_i32 v1, v2, 0, 41376; GFX7-NEXT: v_bfe_i32 v3, v2, 4, 41377; GFX7-NEXT: s_waitcnt vmcnt(0)1378; GFX7-NEXT: v_bfe_i32 v9, v0, 0, 41379; GFX7-NEXT: s_waitcnt lgkmcnt(0)1380; GFX7-NEXT: v_mad_i32_i24 v16, v1, v9, s41381; GFX7-NEXT: v_bfe_i32 v10, v0, 4, 41382; GFX7-NEXT: v_mad_i32_i24 v1, v1, v9, v161383; GFX7-NEXT: v_bfe_i32 v4, v2, 8, 41384; GFX7-NEXT: v_bfe_i32 v11, v0, 8, 41385; GFX7-NEXT: v_mad_i32_i24 v1, v3, v10, v11386; GFX7-NEXT: v_bfe_i32 v5, v2, 12, 41387; GFX7-NEXT: v_bfe_i32 v12, v0, 12, 41388; GFX7-NEXT: v_mad_i32_i24 v1, v4, v11, v11389; GFX7-NEXT: v_bfe_i32 v6, v2, 16, 41390; GFX7-NEXT: v_bfe_i32 v13, v0, 16, 41391; GFX7-NEXT: v_mad_i32_i24 v1, v5, v12, v11392; GFX7-NEXT: v_bfe_i32 v7, v2, 20, 41393; GFX7-NEXT: v_bfe_i32 v14, v0, 20, 41394; GFX7-NEXT: v_mad_i32_i24 v1, v6, v13, v11395; GFX7-NEXT: v_bfe_i32 v8, v2, 24, 41396; GFX7-NEXT: v_bfe_i32 v15, v0, 24, 41397; GFX7-NEXT: v_mad_i32_i24 v1, v7, v14, v11398; GFX7-NEXT: v_ashrrev_i32_e32 v2, 28, v21399; GFX7-NEXT: v_ashrrev_i32_e32 v0, 28, v01400; GFX7-NEXT: v_mad_i32_i24 v1, v8, v15, v11401; GFX7-NEXT: v_mad_i32_i24 v0, v2, v0, v11402; GFX7-NEXT: v_add_i32_e32 v0, vcc, v16, v01403; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 01404; GFX7-NEXT: s_endpgm1405;1406; GFX8-LABEL: idot8_multiuses_mul1:1407; GFX8: ; %bb.0: ; %entry1408; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241409; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341410; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v01411; GFX8-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01412; GFX8-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11413; GFX8-NEXT: s_waitcnt lgkmcnt(0)1414; GFX8-NEXT: v_mov_b32_e32 v1, s11415; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v21416; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1417; GFX8-NEXT: flat_load_dword v3, v[0:1]1418; GFX8-NEXT: v_mov_b32_e32 v1, s31419; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v21420; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1421; GFX8-NEXT: flat_load_dword v0, v[0:1]1422; GFX8-NEXT: s_load_dword s0, s[4:5], 0x01423; GFX8-NEXT: s_mov_b32 s14, -11424; GFX8-NEXT: s_mov_b32 s15, 0xe800001425; GFX8-NEXT: s_add_u32 s12, s12, s111426; GFX8-NEXT: s_addc_u32 s13, s13, 01427; GFX8-NEXT: s_waitcnt vmcnt(1)1428; GFX8-NEXT: v_bfe_i32 v1, v3, 0, 41429; GFX8-NEXT: v_bfe_i32 v4, v3, 4, 41430; GFX8-NEXT: v_bfe_i32 v6, v3, 8, 41431; GFX8-NEXT: v_bfe_i32 v8, v3, 12, 41432; GFX8-NEXT: v_bfe_i32 v10, v3, 16, 41433; GFX8-NEXT: v_bfe_i32 v12, v3, 20, 41434; GFX8-NEXT: s_waitcnt vmcnt(0)1435; GFX8-NEXT: v_bfe_i32 v2, v0, 0, 41436; GFX8-NEXT: s_waitcnt lgkmcnt(0)1437; GFX8-NEXT: v_mad_i32_i24 v16, v1, v2, s01438; GFX8-NEXT: v_bfe_i32 v5, v0, 4, 41439; GFX8-NEXT: v_mad_i32_i24 v1, v1, v2, v161440; GFX8-NEXT: v_bfe_i32 v7, v0, 8, 41441; GFX8-NEXT: v_mad_i32_i24 v1, v4, v5, v11442; GFX8-NEXT: v_bfe_i32 v9, v0, 12, 41443; GFX8-NEXT: v_mad_i32_i24 v1, v6, v7, v11444; GFX8-NEXT: v_bfe_i32 v11, v0, 16, 41445; GFX8-NEXT: v_mad_i32_i24 v1, v8, v9, v11446; GFX8-NEXT: v_bfe_i32 v13, v0, 20, 41447; GFX8-NEXT: v_mad_i32_i24 v1, v10, v11, v11448; GFX8-NEXT: v_bfe_i32 v14, v3, 24, 41449; GFX8-NEXT: v_bfe_i32 v15, v0, 24, 41450; GFX8-NEXT: v_mad_i32_i24 v1, v12, v13, v11451; GFX8-NEXT: v_ashrrev_i32_e32 v3, 28, v31452; GFX8-NEXT: v_ashrrev_i32_e32 v0, 28, v01453; GFX8-NEXT: v_mad_i32_i24 v1, v14, v15, v11454; GFX8-NEXT: v_mad_i32_i24 v0, v3, v0, v11455; GFX8-NEXT: v_add_u32_e32 v2, vcc, v16, v01456; GFX8-NEXT: v_mov_b32_e32 v0, s41457; GFX8-NEXT: v_mov_b32_e32 v1, s51458; GFX8-NEXT: flat_store_dword v[0:1], v21459; GFX8-NEXT: s_endpgm1460;1461; GFX9-LABEL: idot8_multiuses_mul1:1462; GFX9: ; %bb.0: ; %entry1463; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241464; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341465; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01466; GFX9-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01467; GFX9-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11468; GFX9-NEXT: s_waitcnt lgkmcnt(0)1469; GFX9-NEXT: global_load_dword v1, v0, s[0:1]1470; GFX9-NEXT: global_load_dword v2, v0, s[2:3]1471; GFX9-NEXT: s_load_dword s0, s[6:7], 0x01472; GFX9-NEXT: s_mov_b32 s14, -11473; GFX9-NEXT: s_mov_b32 s15, 0xe000001474; GFX9-NEXT: s_add_u32 s12, s12, s111475; GFX9-NEXT: v_mov_b32_e32 v0, 01476; GFX9-NEXT: s_addc_u32 s13, s13, 01477; GFX9-NEXT: s_waitcnt vmcnt(1)1478; GFX9-NEXT: v_bfe_i32 v3, v1, 0, 41479; GFX9-NEXT: s_waitcnt vmcnt(0)1480; GFX9-NEXT: v_bfe_i32 v4, v2, 0, 41481; GFX9-NEXT: v_bfe_i32 v5, v1, 4, 41482; GFX9-NEXT: v_bfe_i32 v6, v2, 4, 41483; GFX9-NEXT: v_bfe_i32 v7, v1, 8, 41484; GFX9-NEXT: v_bfe_i32 v8, v2, 8, 41485; GFX9-NEXT: v_bfe_i32 v9, v1, 12, 41486; GFX9-NEXT: v_bfe_i32 v10, v2, 12, 41487; GFX9-NEXT: v_bfe_i32 v11, v1, 16, 41488; GFX9-NEXT: v_bfe_i32 v12, v2, 16, 41489; GFX9-NEXT: v_bfe_i32 v13, v1, 20, 41490; GFX9-NEXT: v_bfe_i32 v14, v2, 20, 41491; GFX9-NEXT: v_bfe_i32 v15, v1, 24, 41492; GFX9-NEXT: v_bfe_i32 v16, v2, 24, 41493; GFX9-NEXT: v_ashrrev_i32_e32 v1, 28, v11494; GFX9-NEXT: v_ashrrev_i32_e32 v2, 28, v21495; GFX9-NEXT: v_mul_i32_i24_e32 v1, v1, v21496; GFX9-NEXT: s_waitcnt lgkmcnt(0)1497; GFX9-NEXT: v_mad_i32_i24 v2, v3, v4, s01498; GFX9-NEXT: v_mul_i32_i24_e32 v5, v5, v61499; GFX9-NEXT: v_mul_i32_i24_e32 v6, v7, v81500; GFX9-NEXT: v_mad_i32_i24 v3, v3, v4, v21501; GFX9-NEXT: v_mul_i32_i24_e32 v7, v9, v101502; GFX9-NEXT: v_mul_i32_i24_e32 v8, v11, v121503; GFX9-NEXT: v_add3_u32 v3, v3, v5, v61504; GFX9-NEXT: v_mul_i32_i24_e32 v9, v13, v141505; GFX9-NEXT: v_mul_i32_i24_e32 v10, v15, v161506; GFX9-NEXT: v_add3_u32 v3, v3, v7, v81507; GFX9-NEXT: v_add3_u32 v3, v3, v9, v101508; GFX9-NEXT: v_add3_u32 v1, v3, v1, v21509; GFX9-NEXT: global_store_dword v0, v1, s[6:7]1510; GFX9-NEXT: s_endpgm1511;1512; GFX9-DL-LABEL: idot8_multiuses_mul1:1513; GFX9-DL: ; %bb.0: ; %entry1514; GFX9-DL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241515; GFX9-DL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341516; GFX9-DL-NEXT: v_lshlrev_b32_e32 v0, 2, v01517; GFX9-DL-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01518; GFX9-DL-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11519; GFX9-DL-NEXT: s_waitcnt lgkmcnt(0)1520; GFX9-DL-NEXT: global_load_dword v1, v0, s[0:1]1521; GFX9-DL-NEXT: global_load_dword v2, v0, s[2:3]1522; GFX9-DL-NEXT: s_load_dword s0, s[6:7], 0x01523; GFX9-DL-NEXT: s_mov_b32 s14, -11524; GFX9-DL-NEXT: s_mov_b32 s15, 0xe000001525; GFX9-DL-NEXT: s_add_u32 s12, s12, s111526; GFX9-DL-NEXT: v_mov_b32_e32 v0, 01527; GFX9-DL-NEXT: s_addc_u32 s13, s13, 01528; GFX9-DL-NEXT: s_waitcnt vmcnt(1)1529; GFX9-DL-NEXT: v_bfe_i32 v3, v1, 0, 41530; GFX9-DL-NEXT: s_waitcnt vmcnt(0)1531; GFX9-DL-NEXT: v_bfe_i32 v4, v2, 0, 41532; GFX9-DL-NEXT: v_bfe_i32 v5, v1, 4, 41533; GFX9-DL-NEXT: v_bfe_i32 v6, v2, 4, 41534; GFX9-DL-NEXT: v_bfe_i32 v7, v1, 8, 41535; GFX9-DL-NEXT: v_bfe_i32 v8, v2, 8, 41536; GFX9-DL-NEXT: v_bfe_i32 v9, v1, 12, 41537; GFX9-DL-NEXT: v_bfe_i32 v10, v2, 12, 41538; GFX9-DL-NEXT: v_bfe_i32 v11, v1, 16, 41539; GFX9-DL-NEXT: v_bfe_i32 v12, v2, 16, 41540; GFX9-DL-NEXT: v_bfe_i32 v13, v1, 20, 41541; GFX9-DL-NEXT: v_bfe_i32 v14, v2, 20, 41542; GFX9-DL-NEXT: v_bfe_i32 v15, v1, 24, 41543; GFX9-DL-NEXT: v_bfe_i32 v16, v2, 24, 41544; GFX9-DL-NEXT: v_ashrrev_i32_e32 v1, 28, v11545; GFX9-DL-NEXT: v_ashrrev_i32_e32 v2, 28, v21546; GFX9-DL-NEXT: v_mul_i32_i24_e32 v1, v1, v21547; GFX9-DL-NEXT: s_waitcnt lgkmcnt(0)1548; GFX9-DL-NEXT: v_mad_i32_i24 v2, v3, v4, s01549; GFX9-DL-NEXT: v_mul_i32_i24_e32 v5, v5, v61550; GFX9-DL-NEXT: v_mul_i32_i24_e32 v6, v7, v81551; GFX9-DL-NEXT: v_mad_i32_i24 v3, v3, v4, v21552; GFX9-DL-NEXT: v_mul_i32_i24_e32 v7, v9, v101553; GFX9-DL-NEXT: v_mul_i32_i24_e32 v8, v11, v121554; GFX9-DL-NEXT: v_add3_u32 v3, v3, v5, v61555; GFX9-DL-NEXT: v_mul_i32_i24_e32 v9, v13, v141556; GFX9-DL-NEXT: v_mul_i32_i24_e32 v10, v15, v161557; GFX9-DL-NEXT: v_add3_u32 v3, v3, v7, v81558; GFX9-DL-NEXT: v_add3_u32 v3, v3, v9, v101559; GFX9-DL-NEXT: v_add3_u32 v1, v3, v1, v21560; GFX9-DL-NEXT: global_store_dword v0, v1, s[6:7]1561; GFX9-DL-NEXT: s_endpgm1562;1563; GFX10-DL-XNACK-LABEL: idot8_multiuses_mul1:1564; GFX10-DL-XNACK: ; %bb.0: ; %entry1565; GFX10-DL-XNACK-NEXT: s_clause 0x11566; GFX10-DL-XNACK-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241567; GFX10-DL-XNACK-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341568; GFX10-DL-XNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v01569; GFX10-DL-XNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01570; GFX10-DL-XNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11571; GFX10-DL-XNACK-NEXT: s_mov_b32 s14, -11572; GFX10-DL-XNACK-NEXT: s_mov_b32 s15, 0x31c160001573; GFX10-DL-XNACK-NEXT: s_add_u32 s12, s12, s111574; GFX10-DL-XNACK-NEXT: s_addc_u32 s13, s13, 01575; GFX10-DL-XNACK-NEXT: s_waitcnt lgkmcnt(0)1576; GFX10-DL-XNACK-NEXT: s_clause 0x11577; GFX10-DL-XNACK-NEXT: global_load_dword v1, v0, s[0:1]1578; GFX10-DL-XNACK-NEXT: global_load_dword v2, v0, s[2:3]1579; GFX10-DL-XNACK-NEXT: s_waitcnt_depctr depctr_vm_vsrc(0)1580; GFX10-DL-XNACK-NEXT: s_load_dword s0, s[6:7], 0x01581; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(1)1582; GFX10-DL-XNACK-NEXT: v_bfe_i32 v0, v1, 0, 41583; GFX10-DL-XNACK-NEXT: v_bfe_i32 v3, v1, 4, 41584; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(0)1585; GFX10-DL-XNACK-NEXT: v_bfe_i32 v4, v2, 4, 41586; GFX10-DL-XNACK-NEXT: v_bfe_i32 v5, v1, 8, 41587; GFX10-DL-XNACK-NEXT: v_bfe_i32 v6, v2, 8, 41588; GFX10-DL-XNACK-NEXT: v_bfe_i32 v7, v2, 0, 41589; GFX10-DL-XNACK-NEXT: v_bfe_i32 v8, v1, 12, 41590; GFX10-DL-XNACK-NEXT: v_mul_i32_i24_e32 v3, v3, v41591; GFX10-DL-XNACK-NEXT: v_bfe_i32 v9, v2, 12, 41592; GFX10-DL-XNACK-NEXT: v_mul_i32_i24_e32 v4, v5, v61593; GFX10-DL-XNACK-NEXT: s_waitcnt lgkmcnt(0)1594; GFX10-DL-XNACK-NEXT: v_mad_i32_i24 v5, v0, v7, s01595; GFX10-DL-XNACK-NEXT: v_bfe_i32 v6, v1, 16, 41596; GFX10-DL-XNACK-NEXT: v_bfe_i32 v10, v2, 16, 41597; GFX10-DL-XNACK-NEXT: v_bfe_i32 v11, v1, 20, 41598; GFX10-DL-XNACK-NEXT: v_bfe_i32 v12, v2, 20, 41599; GFX10-DL-XNACK-NEXT: v_mad_i32_i24 v0, v0, v7, v51600; GFX10-DL-XNACK-NEXT: v_bfe_i32 v7, v1, 24, 41601; GFX10-DL-XNACK-NEXT: v_bfe_i32 v13, v2, 24, 41602; GFX10-DL-XNACK-NEXT: v_mul_i32_i24_e32 v8, v8, v91603; GFX10-DL-XNACK-NEXT: v_mul_i32_i24_e32 v6, v6, v101604; GFX10-DL-XNACK-NEXT: v_add3_u32 v0, v0, v3, v41605; GFX10-DL-XNACK-NEXT: v_mul_i32_i24_e32 v3, v11, v121606; GFX10-DL-XNACK-NEXT: v_mul_i32_i24_e32 v4, v7, v131607; GFX10-DL-XNACK-NEXT: v_ashrrev_i32_e32 v1, 28, v11608; GFX10-DL-XNACK-NEXT: v_ashrrev_i32_e32 v2, 28, v21609; GFX10-DL-XNACK-NEXT: v_add3_u32 v0, v0, v8, v61610; GFX10-DL-XNACK-NEXT: v_mul_i32_i24_e32 v1, v1, v21611; GFX10-DL-XNACK-NEXT: v_add3_u32 v0, v0, v3, v41612; GFX10-DL-XNACK-NEXT: v_mov_b32_e32 v2, 01613; GFX10-DL-XNACK-NEXT: v_add3_u32 v0, v0, v1, v51614; GFX10-DL-XNACK-NEXT: global_store_dword v2, v0, s[6:7]1615; GFX10-DL-XNACK-NEXT: s_endpgm1616;1617; GFX10-DL-NOXNACK-LABEL: idot8_multiuses_mul1:1618; GFX10-DL-NOXNACK: ; %bb.0: ; %entry1619; GFX10-DL-NOXNACK-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241620; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v01621; GFX10-DL-NOXNACK-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341622; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01623; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11624; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s14, -11625; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s15, 0x31c160001626; GFX10-DL-NOXNACK-NEXT: s_add_u32 s12, s12, s111627; GFX10-DL-NOXNACK-NEXT: s_addc_u32 s13, s13, 01628; GFX10-DL-NOXNACK-NEXT: s_waitcnt lgkmcnt(0)1629; GFX10-DL-NOXNACK-NEXT: s_clause 0x11630; GFX10-DL-NOXNACK-NEXT: global_load_dword v1, v0, s[0:1]1631; GFX10-DL-NOXNACK-NEXT: global_load_dword v0, v0, s[2:3]1632; GFX10-DL-NOXNACK-NEXT: s_load_dword s0, s[4:5], 0x01633; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(1)1634; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v2, v1, 0, 41635; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v3, v1, 4, 41636; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(0)1637; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v4, v0, 4, 41638; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v5, v1, 8, 41639; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v6, v0, 8, 41640; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v7, v0, 0, 41641; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v8, v1, 12, 41642; GFX10-DL-NOXNACK-NEXT: v_mul_i32_i24_e32 v3, v3, v41643; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v9, v0, 12, 41644; GFX10-DL-NOXNACK-NEXT: v_mul_i32_i24_e32 v4, v5, v61645; GFX10-DL-NOXNACK-NEXT: s_waitcnt lgkmcnt(0)1646; GFX10-DL-NOXNACK-NEXT: v_mad_i32_i24 v5, v2, v7, s01647; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v6, v1, 16, 41648; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v10, v0, 16, 41649; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v11, v1, 20, 41650; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v12, v0, 20, 41651; GFX10-DL-NOXNACK-NEXT: v_mad_i32_i24 v2, v2, v7, v51652; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v7, v1, 24, 41653; GFX10-DL-NOXNACK-NEXT: v_bfe_i32 v13, v0, 24, 41654; GFX10-DL-NOXNACK-NEXT: v_mul_i32_i24_e32 v8, v8, v91655; GFX10-DL-NOXNACK-NEXT: v_mul_i32_i24_e32 v6, v6, v101656; GFX10-DL-NOXNACK-NEXT: v_add3_u32 v2, v2, v3, v41657; GFX10-DL-NOXNACK-NEXT: v_mul_i32_i24_e32 v3, v11, v121658; GFX10-DL-NOXNACK-NEXT: v_mul_i32_i24_e32 v4, v7, v131659; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i32_e32 v1, 28, v11660; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i32_e32 v0, 28, v01661; GFX10-DL-NOXNACK-NEXT: v_add3_u32 v2, v2, v8, v61662; GFX10-DL-NOXNACK-NEXT: v_mul_i32_i24_e32 v0, v1, v01663; GFX10-DL-NOXNACK-NEXT: v_add3_u32 v1, v2, v3, v41664; GFX10-DL-NOXNACK-NEXT: v_mov_b32_e32 v2, 01665; GFX10-DL-NOXNACK-NEXT: v_add3_u32 v0, v1, v0, v51666; GFX10-DL-NOXNACK-NEXT: global_store_dword v2, v0, s[4:5]1667; GFX10-DL-NOXNACK-NEXT: s_endpgm1668 ptr addrspace(1) %src2,1669 ptr addrspace(1) nocapture %dst) {1670entry:1671 %idx = call i32 @llvm.amdgcn.workitem.id.x()1672 %gep1 = getelementptr <8 x i4>, ptr addrspace(1) %src1, i32 %idx1673 %vec1 = load <8 x i4>, ptr addrspace(1) %gep11674 %gep2 = getelementptr <8 x i4>, ptr addrspace(1) %src2, i32 %idx1675 %vec2 = load <8 x i4>, ptr addrspace(1) %gep21676 1677 %v1e0 = extractelement <8 x i4> %vec1, i64 01678 %cv1e0 = sext i4 %v1e0 to i321679 %v2e0 = extractelement <8 x i4> %vec2, i64 01680 %cv2e0 = sext i4 %v2e0 to i321681 %mul0 = mul nuw nsw i32 %cv1e0, %cv2e01682 1683 %v1e1 = extractelement <8 x i4> %vec1, i64 11684 %cv1e1 = sext i4 %v1e1 to i321685 %v2e1 = extractelement <8 x i4> %vec2, i64 11686 %cv2e1 = sext i4 %v2e1 to i321687 %mul1 = mul nuw nsw i32 %cv1e1, %cv2e11688 1689 %v1e2 = extractelement <8 x i4> %vec1, i64 21690 %cv1e2 = sext i4 %v1e2 to i321691 %v2e2 = extractelement <8 x i4> %vec2, i64 21692 %cv2e2 = sext i4 %v2e2 to i321693 %mul2 = mul nuw nsw i32 %cv1e2, %cv2e21694 1695 %v1e3 = extractelement <8 x i4> %vec1, i64 31696 %cv1e3 = sext i4 %v1e3 to i321697 %v2e3 = extractelement <8 x i4> %vec2, i64 31698 %cv2e3 = sext i4 %v2e3 to i321699 %mul3 = mul nuw nsw i32 %cv1e3, %cv2e31700 1701 %v1e4 = extractelement <8 x i4> %vec1, i64 41702 %cv1e4 = sext i4 %v1e4 to i321703 %v2e4 = extractelement <8 x i4> %vec2, i64 41704 %cv2e4 = sext i4 %v2e4 to i321705 %mul4 = mul nuw nsw i32 %cv1e4, %cv2e41706 1707 %v1e5 = extractelement <8 x i4> %vec1, i64 51708 %cv1e5 = sext i4 %v1e5 to i321709 %v2e5 = extractelement <8 x i4> %vec2, i64 51710 %cv2e5 = sext i4 %v2e5 to i321711 %mul5 = mul nuw nsw i32 %cv1e5, %cv2e51712 1713 %v1e6 = extractelement <8 x i4> %vec1, i64 61714 %cv1e6 = sext i4 %v1e6 to i321715 %v2e6 = extractelement <8 x i4> %vec2, i64 61716 %cv2e6 = sext i4 %v2e6 to i321717 %mul6 = mul nuw nsw i32 %cv1e6, %cv2e61718 1719 %v1e7 = extractelement <8 x i4> %vec1, i64 71720 %cv1e7 = sext i4 %v1e7 to i321721 %v2e7 = extractelement <8 x i4> %vec2, i64 71722 %cv2e7 = sext i4 %v2e7 to i321723 %mul7 = mul nuw nsw i32 %cv1e7, %cv2e71724 1725 %acc = load i32, ptr addrspace(1) %dst, align 41726 %add = add i32 %mul0, %acc1727 %add1 = add i32 %mul0, %add1728 %add2 = add i32 %add1, %mul11729 %add3 = add i32 %add2, %mul21730 %add4 = add i32 %add3, %mul31731 %add5 = add i32 %add4, %mul41732 %add6 = add i32 %add5, %mul51733 %add7 = add i32 %add6, %mul61734 %add8 = add i32 %add7, %mul71735 1736 %res = add i32 %add, %add81737 store i32 %res, ptr addrspace(1) %dst, align 41738 ret void1739}1740 1741; TODO: Support this pattern.1742define amdgpu_kernel void @idot8_acc32_vecMul(ptr addrspace(1) %src1,1743; GFX7-LABEL: idot8_acc32_vecMul:1744; GFX7: ; %bb.0: ; %entry1745; GFX7-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01746; GFX7-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11747; GFX7-NEXT: s_mov_b32 s14, -11748; GFX7-NEXT: s_mov_b32 s15, 0xe8f0001749; GFX7-NEXT: s_add_u32 s12, s12, s111750; GFX7-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x91751; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd1752; GFX7-NEXT: s_mov_b32 s3, 0xf0001753; GFX7-NEXT: s_mov_b32 s6, 01754; GFX7-NEXT: s_mov_b32 s7, s31755; GFX7-NEXT: s_waitcnt lgkmcnt(0)1756; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]1757; GFX7-NEXT: v_lshlrev_b32_e32 v0, 2, v01758; GFX7-NEXT: v_mov_b32_e32 v1, 01759; GFX7-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr641760; GFX7-NEXT: s_mov_b64 s[4:5], s[10:11]1761; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr641762; GFX7-NEXT: s_load_dword s4, s[0:1], 0x01763; GFX7-NEXT: s_mov_b32 s2, -11764; GFX7-NEXT: s_addc_u32 s13, s13, 01765; GFX7-NEXT: s_waitcnt vmcnt(1)1766; GFX7-NEXT: v_ashrrev_i32_e32 v1, 28, v21767; GFX7-NEXT: v_bfe_i32 v3, v2, 24, 41768; GFX7-NEXT: v_bfe_i32 v4, v2, 20, 41769; GFX7-NEXT: v_bfe_i32 v5, v2, 16, 41770; GFX7-NEXT: v_bfe_i32 v6, v2, 12, 41771; GFX7-NEXT: v_bfe_i32 v7, v2, 8, 41772; GFX7-NEXT: v_bfe_i32 v8, v2, 4, 41773; GFX7-NEXT: v_bfe_i32 v2, v2, 0, 41774; GFX7-NEXT: s_waitcnt vmcnt(0)1775; GFX7-NEXT: v_ashrrev_i32_e32 v9, 28, v01776; GFX7-NEXT: v_bfe_i32 v10, v0, 24, 41777; GFX7-NEXT: v_bfe_i32 v11, v0, 20, 41778; GFX7-NEXT: v_bfe_i32 v12, v0, 16, 41779; GFX7-NEXT: v_bfe_i32 v13, v0, 12, 41780; GFX7-NEXT: v_bfe_i32 v14, v0, 8, 41781; GFX7-NEXT: v_bfe_i32 v15, v0, 4, 41782; GFX7-NEXT: v_bfe_i32 v0, v0, 0, 41783; GFX7-NEXT: s_waitcnt lgkmcnt(0)1784; GFX7-NEXT: v_mad_i32_i24 v0, v2, v0, s41785; GFX7-NEXT: v_mad_i32_i24 v0, v8, v15, v01786; GFX7-NEXT: v_mad_i32_i24 v0, v7, v14, v01787; GFX7-NEXT: v_mad_i32_i24 v0, v6, v13, v01788; GFX7-NEXT: v_mad_i32_i24 v0, v5, v12, v01789; GFX7-NEXT: v_mad_i32_i24 v0, v4, v11, v01790; GFX7-NEXT: v_mad_i32_i24 v0, v3, v10, v01791; GFX7-NEXT: v_mad_i32_i24 v0, v1, v9, v01792; GFX7-NEXT: buffer_store_dword v0, off, s[0:3], 01793; GFX7-NEXT: s_endpgm1794;1795; GFX8-LABEL: idot8_acc32_vecMul:1796; GFX8: ; %bb.0: ; %entry1797; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241798; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341799; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v01800; GFX8-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01801; GFX8-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11802; GFX8-NEXT: s_waitcnt lgkmcnt(0)1803; GFX8-NEXT: v_mov_b32_e32 v1, s11804; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v21805; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1806; GFX8-NEXT: flat_load_dword v3, v[0:1]1807; GFX8-NEXT: v_mov_b32_e32 v1, s31808; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v21809; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1810; GFX8-NEXT: flat_load_dword v0, v[0:1]1811; GFX8-NEXT: s_load_dword s0, s[4:5], 0x01812; GFX8-NEXT: s_mov_b32 s14, -11813; GFX8-NEXT: s_mov_b32 s15, 0xe800001814; GFX8-NEXT: s_add_u32 s12, s12, s111815; GFX8-NEXT: s_addc_u32 s13, s13, 01816; GFX8-NEXT: s_waitcnt vmcnt(1)1817; GFX8-NEXT: v_ashrrev_i32_e32 v1, 28, v31818; GFX8-NEXT: v_bfe_i32 v2, v3, 24, 41819; GFX8-NEXT: v_bfe_i32 v4, v3, 20, 41820; GFX8-NEXT: v_bfe_i32 v5, v3, 16, 41821; GFX8-NEXT: v_bfe_i32 v6, v3, 12, 41822; GFX8-NEXT: v_bfe_i32 v7, v3, 8, 41823; GFX8-NEXT: v_bfe_i32 v8, v3, 4, 41824; GFX8-NEXT: v_bfe_i32 v3, v3, 0, 41825; GFX8-NEXT: s_waitcnt vmcnt(0)1826; GFX8-NEXT: v_ashrrev_i32_e32 v9, 28, v01827; GFX8-NEXT: v_bfe_i32 v10, v0, 24, 41828; GFX8-NEXT: v_bfe_i32 v11, v0, 20, 41829; GFX8-NEXT: v_bfe_i32 v12, v0, 16, 41830; GFX8-NEXT: v_bfe_i32 v13, v0, 12, 41831; GFX8-NEXT: v_bfe_i32 v14, v0, 8, 41832; GFX8-NEXT: v_bfe_i32 v15, v0, 4, 41833; GFX8-NEXT: v_bfe_i32 v0, v0, 0, 41834; GFX8-NEXT: s_waitcnt lgkmcnt(0)1835; GFX8-NEXT: v_mad_i32_i24 v0, v3, v0, s01836; GFX8-NEXT: v_mad_i32_i24 v0, v8, v15, v01837; GFX8-NEXT: v_mad_i32_i24 v0, v7, v14, v01838; GFX8-NEXT: v_mad_i32_i24 v0, v6, v13, v01839; GFX8-NEXT: v_mad_i32_i24 v0, v5, v12, v01840; GFX8-NEXT: v_mad_i32_i24 v0, v4, v11, v01841; GFX8-NEXT: v_mad_i32_i24 v0, v2, v10, v01842; GFX8-NEXT: v_mad_i32_i24 v2, v1, v9, v01843; GFX8-NEXT: v_mov_b32_e32 v0, s41844; GFX8-NEXT: v_mov_b32_e32 v1, s51845; GFX8-NEXT: flat_store_dword v[0:1], v21846; GFX8-NEXT: s_endpgm1847;1848; GFX9-LABEL: idot8_acc32_vecMul:1849; GFX9: ; %bb.0: ; %entry1850; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241851; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341852; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01853; GFX9-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01854; GFX9-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11855; GFX9-NEXT: s_waitcnt lgkmcnt(0)1856; GFX9-NEXT: global_load_dword v1, v0, s[0:1]1857; GFX9-NEXT: global_load_dword v2, v0, s[2:3]1858; GFX9-NEXT: s_load_dword s0, s[6:7], 0x01859; GFX9-NEXT: s_mov_b32 s14, -11860; GFX9-NEXT: s_mov_b32 s15, 0xe000001861; GFX9-NEXT: s_add_u32 s12, s12, s111862; GFX9-NEXT: v_mov_b32_e32 v0, 01863; GFX9-NEXT: s_addc_u32 s13, s13, 01864; GFX9-NEXT: s_waitcnt vmcnt(1)1865; GFX9-NEXT: v_ashrrev_i32_e32 v3, 28, v11866; GFX9-NEXT: v_bfe_i32 v4, v1, 24, 41867; GFX9-NEXT: v_bfe_i32 v5, v1, 20, 41868; GFX9-NEXT: v_bfe_i32 v6, v1, 16, 41869; GFX9-NEXT: v_bfe_i32 v7, v1, 12, 41870; GFX9-NEXT: v_bfe_i32 v8, v1, 8, 41871; GFX9-NEXT: v_bfe_i32 v9, v1, 4, 41872; GFX9-NEXT: v_bfe_i32 v1, v1, 0, 41873; GFX9-NEXT: s_waitcnt vmcnt(0)1874; GFX9-NEXT: v_ashrrev_i32_e32 v10, 28, v21875; GFX9-NEXT: v_bfe_i32 v11, v2, 24, 41876; GFX9-NEXT: v_bfe_i32 v12, v2, 20, 41877; GFX9-NEXT: v_bfe_i32 v13, v2, 16, 41878; GFX9-NEXT: v_bfe_i32 v14, v2, 12, 41879; GFX9-NEXT: v_bfe_i32 v15, v2, 8, 41880; GFX9-NEXT: v_bfe_i32 v16, v2, 4, 41881; GFX9-NEXT: v_bfe_i32 v2, v2, 0, 41882; GFX9-NEXT: v_mul_i32_i24_e32 v1, v1, v21883; GFX9-NEXT: v_mul_i32_i24_e32 v2, v9, v161884; GFX9-NEXT: v_mul_i32_i24_e32 v8, v8, v151885; GFX9-NEXT: v_mul_i32_i24_e32 v7, v7, v141886; GFX9-NEXT: s_waitcnt lgkmcnt(0)1887; GFX9-NEXT: v_add3_u32 v1, v1, s0, v21888; GFX9-NEXT: v_mul_i32_i24_e32 v6, v6, v131889; GFX9-NEXT: v_mul_i32_i24_e32 v5, v5, v121890; GFX9-NEXT: v_add3_u32 v1, v1, v8, v71891; GFX9-NEXT: v_mul_i32_i24_e32 v4, v4, v111892; GFX9-NEXT: v_mul_i32_i24_e32 v3, v3, v101893; GFX9-NEXT: v_add3_u32 v1, v1, v6, v51894; GFX9-NEXT: v_add3_u32 v1, v1, v4, v31895; GFX9-NEXT: global_store_dword v0, v1, s[6:7]1896; GFX9-NEXT: s_endpgm1897;1898; GFX9-DL-LABEL: idot8_acc32_vecMul:1899; GFX9-DL: ; %bb.0: ; %entry1900; GFX9-DL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241901; GFX9-DL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341902; GFX9-DL-NEXT: v_lshlrev_b32_e32 v0, 2, v01903; GFX9-DL-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01904; GFX9-DL-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11905; GFX9-DL-NEXT: s_waitcnt lgkmcnt(0)1906; GFX9-DL-NEXT: global_load_dword v1, v0, s[0:1]1907; GFX9-DL-NEXT: global_load_dword v2, v0, s[2:3]1908; GFX9-DL-NEXT: s_load_dword s0, s[6:7], 0x01909; GFX9-DL-NEXT: s_mov_b32 s14, -11910; GFX9-DL-NEXT: s_mov_b32 s15, 0xe000001911; GFX9-DL-NEXT: s_add_u32 s12, s12, s111912; GFX9-DL-NEXT: v_mov_b32_e32 v0, 01913; GFX9-DL-NEXT: s_addc_u32 s13, s13, 01914; GFX9-DL-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1915; GFX9-DL-NEXT: v_dot8_i32_i4 v1, v1, v2, s01916; GFX9-DL-NEXT: global_store_dword v0, v1, s[6:7]1917; GFX9-DL-NEXT: s_endpgm1918;1919; GFX10-DL-XNACK-LABEL: idot8_acc32_vecMul:1920; GFX10-DL-XNACK: ; %bb.0: ; %entry1921; GFX10-DL-XNACK-NEXT: s_clause 0x11922; GFX10-DL-XNACK-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241923; GFX10-DL-XNACK-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341924; GFX10-DL-XNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v01925; GFX10-DL-XNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01926; GFX10-DL-XNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11927; GFX10-DL-XNACK-NEXT: s_mov_b32 s14, -11928; GFX10-DL-XNACK-NEXT: s_mov_b32 s15, 0x31c160001929; GFX10-DL-XNACK-NEXT: s_add_u32 s12, s12, s111930; GFX10-DL-XNACK-NEXT: s_addc_u32 s13, s13, 01931; GFX10-DL-XNACK-NEXT: s_waitcnt lgkmcnt(0)1932; GFX10-DL-XNACK-NEXT: s_clause 0x11933; GFX10-DL-XNACK-NEXT: global_load_dword v1, v0, s[0:1]1934; GFX10-DL-XNACK-NEXT: global_load_dword v2, v0, s[2:3]1935; GFX10-DL-XNACK-NEXT: s_waitcnt_depctr depctr_vm_vsrc(0)1936; GFX10-DL-XNACK-NEXT: s_load_dword s0, s[6:7], 0x01937; GFX10-DL-XNACK-NEXT: v_mov_b32_e32 v0, 01938; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1939; GFX10-DL-XNACK-NEXT: v_dot8_i32_i4 v1, v1, v2, s01940; GFX10-DL-XNACK-NEXT: global_store_dword v0, v1, s[6:7]1941; GFX10-DL-XNACK-NEXT: s_endpgm1942;1943; GFX10-DL-NOXNACK-LABEL: idot8_acc32_vecMul:1944; GFX10-DL-NOXNACK: ; %bb.0: ; %entry1945; GFX10-DL-NOXNACK-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241946; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v01947; GFX10-DL-NOXNACK-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341948; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01949; GFX10-DL-NOXNACK-NEXT: v_mov_b32_e32 v2, 01950; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11951; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s14, -11952; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s15, 0x31c160001953; GFX10-DL-NOXNACK-NEXT: s_add_u32 s12, s12, s111954; GFX10-DL-NOXNACK-NEXT: s_addc_u32 s13, s13, 01955; GFX10-DL-NOXNACK-NEXT: s_waitcnt lgkmcnt(0)1956; GFX10-DL-NOXNACK-NEXT: s_clause 0x11957; GFX10-DL-NOXNACK-NEXT: global_load_dword v1, v0, s[0:1]1958; GFX10-DL-NOXNACK-NEXT: global_load_dword v0, v0, s[2:3]1959; GFX10-DL-NOXNACK-NEXT: s_load_dword s0, s[4:5], 0x01960; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1961; GFX10-DL-NOXNACK-NEXT: v_dot8_i32_i4 v0, v1, v0, s01962; GFX10-DL-NOXNACK-NEXT: global_store_dword v2, v0, s[4:5]1963; GFX10-DL-NOXNACK-NEXT: s_endpgm1964 ptr addrspace(1) %src2,1965 ptr addrspace(1) nocapture %dst) {1966entry:1967 %idx = call i32 @llvm.amdgcn.workitem.id.x()1968 %gep1 = getelementptr <8 x i4>, ptr addrspace(1) %src1, i32 %idx1969 %vec1 = load <8 x i4>, ptr addrspace(1) %gep11970 %gep2 = getelementptr <8 x i4>, ptr addrspace(1) %src2, i32 %idx1971 %vec2 = load <8 x i4>, ptr addrspace(1) %gep21972 1973 %cvec1 = sext <8 x i4> %vec1 to <8 x i32>1974 %cvec2 = sext <8 x i4> %vec2 to <8 x i32>1975 1976 %mul = mul <8 x i32> %cvec1, %cvec21977 %mul0 = extractelement <8 x i32> %mul, i64 01978 %mul1 = extractelement <8 x i32> %mul, i64 11979 %mul2 = extractelement <8 x i32> %mul, i64 21980 %mul3 = extractelement <8 x i32> %mul, i64 31981 %mul4 = extractelement <8 x i32> %mul, i64 41982 %mul5 = extractelement <8 x i32> %mul, i64 51983 %mul6 = extractelement <8 x i32> %mul, i64 61984 %mul7 = extractelement <8 x i32> %mul, i64 71985 1986 %acc = load i32, ptr addrspace(1) %dst, align 41987 %add1 = add i32 %mul0, %acc1988 %add2 = add i32 %add1, %mul11989 %add3 = add i32 %add2, %mul21990 %add4 = add i32 %add3, %mul31991 %add5 = add i32 %add4, %mul41992 %add6 = add i32 %add5, %mul51993 %add7 = add i32 %add6, %mul61994 %add8 = add i32 %add7, %mul71995 1996 store i32 %add8, ptr addrspace(1) %dst, align 41997 ret void1998}1999 2000; TODO: Support this pattern.2001define amdgpu_kernel void @idot8_acc16_vecMul(ptr addrspace(1) %src1,2002; GFX7-LABEL: idot8_acc16_vecMul:2003; GFX7: ; %bb.0: ; %entry2004; GFX7-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02005; GFX7-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12006; GFX7-NEXT: s_mov_b32 s14, -12007; GFX7-NEXT: s_mov_b32 s15, 0xe8f0002008; GFX7-NEXT: s_add_u32 s12, s12, s112009; GFX7-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x92010; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd2011; GFX7-NEXT: s_mov_b32 s3, 0xf0002012; GFX7-NEXT: s_mov_b32 s6, 02013; GFX7-NEXT: s_mov_b32 s7, s32014; GFX7-NEXT: s_waitcnt lgkmcnt(0)2015; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]2016; GFX7-NEXT: v_lshlrev_b32_e32 v0, 2, v02017; GFX7-NEXT: v_mov_b32_e32 v1, 02018; GFX7-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr642019; GFX7-NEXT: s_mov_b64 s[4:5], s[10:11]2020; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr642021; GFX7-NEXT: s_mov_b32 s2, -12022; GFX7-NEXT: buffer_load_ushort v1, off, s[0:3], 02023; GFX7-NEXT: s_addc_u32 s13, s13, 02024; GFX7-NEXT: s_waitcnt vmcnt(2)2025; GFX7-NEXT: v_bfe_i32 v6, v2, 0, 42026; GFX7-NEXT: v_bfe_i32 v3, v2, 24, 42027; GFX7-NEXT: s_waitcnt vmcnt(1)2028; GFX7-NEXT: v_bfe_i32 v13, v0, 0, 42029; GFX7-NEXT: v_bfe_i32 v4, v2, 16, 42030; GFX7-NEXT: v_bfe_i32 v5, v2, 8, 42031; GFX7-NEXT: v_ashrrev_i32_e32 v7, 28, v22032; GFX7-NEXT: v_bfe_i32 v8, v2, 20, 42033; GFX7-NEXT: v_bfe_i32 v9, v2, 12, 42034; GFX7-NEXT: v_bfe_i32 v2, v2, 4, 42035; GFX7-NEXT: v_and_b32_e32 v6, 0xffff, v62036; GFX7-NEXT: v_bfe_i32 v10, v0, 24, 42037; GFX7-NEXT: v_bfe_i32 v11, v0, 16, 42038; GFX7-NEXT: v_bfe_i32 v12, v0, 8, 42039; GFX7-NEXT: v_ashrrev_i32_e32 v14, 28, v02040; GFX7-NEXT: v_bfe_i32 v15, v0, 20, 42041; GFX7-NEXT: v_bfe_i32 v16, v0, 12, 42042; GFX7-NEXT: v_bfe_i32 v0, v0, 4, 42043; GFX7-NEXT: v_and_b32_e32 v13, 0xffff, v132044; GFX7-NEXT: v_and_b32_e32 v2, 0xffff, v22045; GFX7-NEXT: v_and_b32_e32 v0, 0xffff, v02046; GFX7-NEXT: s_waitcnt vmcnt(0)2047; GFX7-NEXT: v_mad_u32_u24 v1, v6, v13, v12048; GFX7-NEXT: v_and_b32_e32 v5, 0xffff, v52049; GFX7-NEXT: v_and_b32_e32 v12, 0xffff, v122050; GFX7-NEXT: v_mad_u32_u24 v0, v2, v0, v12051; GFX7-NEXT: v_and_b32_e32 v9, 0xffff, v92052; GFX7-NEXT: v_and_b32_e32 v16, 0xffff, v162053; GFX7-NEXT: v_mad_u32_u24 v0, v5, v12, v02054; GFX7-NEXT: v_and_b32_e32 v4, 0xffff, v42055; GFX7-NEXT: v_and_b32_e32 v11, 0xffff, v112056; GFX7-NEXT: v_mad_u32_u24 v0, v9, v16, v02057; GFX7-NEXT: v_and_b32_e32 v8, 0xffff, v82058; GFX7-NEXT: v_and_b32_e32 v15, 0xffff, v152059; GFX7-NEXT: v_mad_u32_u24 v0, v4, v11, v02060; GFX7-NEXT: v_and_b32_e32 v3, 0xffff, v32061; GFX7-NEXT: v_and_b32_e32 v10, 0xffff, v102062; GFX7-NEXT: v_mad_u32_u24 v0, v8, v15, v02063; GFX7-NEXT: v_and_b32_e32 v7, 0xffff, v72064; GFX7-NEXT: v_and_b32_e32 v14, 0xffff, v142065; GFX7-NEXT: v_mad_u32_u24 v0, v3, v10, v02066; GFX7-NEXT: v_mad_u32_u24 v0, v7, v14, v02067; GFX7-NEXT: buffer_store_short v0, off, s[0:3], 02068; GFX7-NEXT: s_endpgm2069;2070; GFX8-LABEL: idot8_acc16_vecMul:2071; GFX8: ; %bb.0: ; %entry2072; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242073; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x342074; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v02075; GFX8-NEXT: v_mov_b32_e32 v5, 122076; GFX8-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02077; GFX8-NEXT: s_waitcnt lgkmcnt(0)2078; GFX8-NEXT: v_mov_b32_e32 v1, s12079; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v22080; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2081; GFX8-NEXT: flat_load_dword v3, v[0:1]2082; GFX8-NEXT: v_mov_b32_e32 v1, s32083; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v22084; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2085; GFX8-NEXT: flat_load_dword v2, v[0:1]2086; GFX8-NEXT: v_mov_b32_e32 v0, s42087; GFX8-NEXT: v_mov_b32_e32 v1, s52088; GFX8-NEXT: flat_load_ushort v4, v[0:1]2089; GFX8-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12090; GFX8-NEXT: s_mov_b32 s14, -12091; GFX8-NEXT: s_mov_b32 s15, 0xe800002092; GFX8-NEXT: s_add_u32 s12, s12, s112093; GFX8-NEXT: s_addc_u32 s13, s13, 02094; GFX8-NEXT: s_waitcnt vmcnt(2)2095; GFX8-NEXT: v_lshrrev_b32_e32 v6, 28, v32096; GFX8-NEXT: v_lshlrev_b16_sdwa v7, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32097; GFX8-NEXT: v_lshrrev_b32_e32 v8, 20, v32098; GFX8-NEXT: v_lshlrev_b16_sdwa v9, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12099; GFX8-NEXT: v_lshrrev_b32_e32 v10, 12, v32100; GFX8-NEXT: v_lshrrev_b32_e32 v11, 8, v32101; GFX8-NEXT: v_lshrrev_b32_e32 v12, 4, v32102; GFX8-NEXT: v_lshlrev_b16_e32 v3, 12, v32103; GFX8-NEXT: s_waitcnt vmcnt(1)2104; GFX8-NEXT: v_lshrrev_b32_e32 v13, 28, v22105; GFX8-NEXT: v_lshlrev_b16_sdwa v14, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32106; GFX8-NEXT: v_lshrrev_b32_e32 v15, 20, v22107; GFX8-NEXT: v_lshlrev_b16_sdwa v5, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12108; GFX8-NEXT: v_lshrrev_b32_e32 v16, 12, v22109; GFX8-NEXT: v_lshrrev_b32_e32 v17, 8, v22110; GFX8-NEXT: v_lshrrev_b32_e32 v18, 4, v22111; GFX8-NEXT: v_lshlrev_b16_e32 v2, 12, v22112; GFX8-NEXT: v_lshlrev_b16_e32 v12, 12, v122113; GFX8-NEXT: v_ashrrev_i16_e32 v3, 12, v32114; GFX8-NEXT: v_lshlrev_b16_e32 v18, 12, v182115; GFX8-NEXT: v_ashrrev_i16_e32 v2, 12, v22116; GFX8-NEXT: v_lshlrev_b16_e32 v11, 12, v112117; GFX8-NEXT: v_lshlrev_b16_e32 v17, 12, v172118; GFX8-NEXT: v_ashrrev_i16_e32 v12, 12, v122119; GFX8-NEXT: v_ashrrev_i16_e32 v18, 12, v182120; GFX8-NEXT: s_waitcnt vmcnt(0)2121; GFX8-NEXT: v_mad_u16 v2, v3, v2, v42122; GFX8-NEXT: v_lshlrev_b16_e32 v10, 12, v102123; GFX8-NEXT: v_lshlrev_b16_e32 v16, 12, v162124; GFX8-NEXT: v_ashrrev_i16_e32 v11, 12, v112125; GFX8-NEXT: v_ashrrev_i16_e32 v17, 12, v172126; GFX8-NEXT: v_mad_u16 v2, v12, v18, v22127; GFX8-NEXT: v_ashrrev_i16_e32 v10, 12, v102128; GFX8-NEXT: v_ashrrev_i16_e32 v16, 12, v162129; GFX8-NEXT: v_mad_u16 v2, v11, v17, v22130; GFX8-NEXT: v_lshlrev_b16_e32 v8, 12, v82131; GFX8-NEXT: v_ashrrev_i16_e32 v9, 12, v92132; GFX8-NEXT: v_lshlrev_b16_e32 v15, 12, v152133; GFX8-NEXT: v_ashrrev_i16_e32 v5, 12, v52134; GFX8-NEXT: v_mad_u16 v2, v10, v16, v22135; GFX8-NEXT: v_ashrrev_i16_e32 v8, 12, v82136; GFX8-NEXT: v_ashrrev_i16_e32 v15, 12, v152137; GFX8-NEXT: v_mad_u16 v2, v9, v5, v22138; GFX8-NEXT: v_lshlrev_b16_e32 v6, 12, v62139; GFX8-NEXT: v_ashrrev_i16_e32 v7, 12, v72140; GFX8-NEXT: v_lshlrev_b16_e32 v13, 12, v132141; GFX8-NEXT: v_ashrrev_i16_e32 v14, 12, v142142; GFX8-NEXT: v_mad_u16 v2, v8, v15, v22143; GFX8-NEXT: v_ashrrev_i16_e32 v6, 12, v62144; GFX8-NEXT: v_ashrrev_i16_e32 v13, 12, v132145; GFX8-NEXT: v_mad_u16 v2, v7, v14, v22146; GFX8-NEXT: v_mad_u16 v2, v6, v13, v22147; GFX8-NEXT: flat_store_short v[0:1], v22148; GFX8-NEXT: s_endpgm2149;2150; GFX9-LABEL: idot8_acc16_vecMul:2151; GFX9: ; %bb.0: ; %entry2152; GFX9-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02153; GFX9-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12154; GFX9-NEXT: s_mov_b32 s14, -12155; GFX9-NEXT: s_mov_b32 s15, 0xe000002156; GFX9-NEXT: s_add_u32 s12, s12, s112157; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242158; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x342159; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v02160; GFX9-NEXT: v_mov_b32_e32 v4, 122161; GFX9-NEXT: s_waitcnt lgkmcnt(0)2162; GFX9-NEXT: global_load_dword v1, v0, s[8:9]2163; GFX9-NEXT: global_load_dword v2, v0, s[10:11]2164; GFX9-NEXT: v_mov_b32_e32 v0, 02165; GFX9-NEXT: global_load_ushort v3, v0, s[0:1]2166; GFX9-NEXT: s_mov_b32 s2, 0x50401002167; GFX9-NEXT: s_addc_u32 s13, s13, 02168; GFX9-NEXT: s_waitcnt vmcnt(2)2169; GFX9-NEXT: v_lshrrev_b32_e32 v6, 4, v12170; GFX9-NEXT: v_lshrrev_b32_e32 v7, 8, v12171; GFX9-NEXT: v_lshrrev_b32_e32 v8, 12, v12172; GFX9-NEXT: s_waitcnt vmcnt(1)2173; GFX9-NEXT: v_lshrrev_b32_e32 v13, 4, v22174; GFX9-NEXT: v_lshlrev_b16_e32 v5, 12, v12175; GFX9-NEXT: v_lshlrev_b16_e32 v12, 12, v22176; GFX9-NEXT: v_lshlrev_b16_e32 v6, 12, v62177; GFX9-NEXT: v_lshlrev_b16_e32 v7, 12, v72178; GFX9-NEXT: v_lshlrev_b16_e32 v8, 12, v82179; GFX9-NEXT: v_lshlrev_b16_e32 v13, 12, v132180; GFX9-NEXT: v_lshlrev_b16_sdwa v9, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12181; GFX9-NEXT: v_lshrrev_b32_e32 v10, 20, v12182; GFX9-NEXT: v_lshlrev_b16_sdwa v11, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32183; GFX9-NEXT: v_lshrrev_b32_e32 v1, 28, v12184; GFX9-NEXT: v_lshrrev_b32_e32 v14, 8, v22185; GFX9-NEXT: v_lshrrev_b32_e32 v15, 12, v22186; GFX9-NEXT: v_lshlrev_b16_sdwa v16, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12187; GFX9-NEXT: v_lshrrev_b32_e32 v17, 20, v22188; GFX9-NEXT: v_lshlrev_b16_sdwa v4, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32189; GFX9-NEXT: v_lshrrev_b32_e32 v2, 28, v22190; GFX9-NEXT: v_ashrrev_i16_e32 v5, 12, v52191; GFX9-NEXT: v_ashrrev_i16_e32 v12, 12, v122192; GFX9-NEXT: v_ashrrev_i16_e32 v6, 12, v62193; GFX9-NEXT: v_ashrrev_i16_e32 v7, 12, v72194; GFX9-NEXT: v_ashrrev_i16_e32 v8, 12, v82195; GFX9-NEXT: v_ashrrev_i16_e32 v13, 12, v132196; GFX9-NEXT: v_lshlrev_b16_e32 v10, 12, v102197; GFX9-NEXT: v_lshlrev_b16_e32 v1, 12, v12198; GFX9-NEXT: v_lshlrev_b16_e32 v14, 12, v142199; GFX9-NEXT: v_lshlrev_b16_e32 v15, 12, v152200; GFX9-NEXT: v_lshlrev_b16_e32 v17, 12, v172201; GFX9-NEXT: v_lshlrev_b16_e32 v2, 12, v22202; GFX9-NEXT: v_perm_b32 v7, v8, v7, s22203; GFX9-NEXT: v_perm_b32 v8, v13, v12, s22204; GFX9-NEXT: v_perm_b32 v5, v6, v5, s22205; GFX9-NEXT: v_ashrrev_i16_e32 v9, 12, v92206; GFX9-NEXT: v_ashrrev_i16_e32 v11, 12, v112207; GFX9-NEXT: v_ashrrev_i16_e32 v16, 12, v162208; GFX9-NEXT: v_ashrrev_i16_e32 v4, 12, v42209; GFX9-NEXT: v_ashrrev_i16_e32 v10, 12, v102210; GFX9-NEXT: v_ashrrev_i16_e32 v1, 12, v12211; GFX9-NEXT: v_ashrrev_i16_e32 v14, 12, v142212; GFX9-NEXT: v_ashrrev_i16_e32 v15, 12, v152213; GFX9-NEXT: v_ashrrev_i16_e32 v17, 12, v172214; GFX9-NEXT: v_ashrrev_i16_e32 v2, 12, v22215; GFX9-NEXT: v_pk_mul_lo_u16 v5, v5, v82216; GFX9-NEXT: v_perm_b32 v2, v2, v4, s22217; GFX9-NEXT: v_perm_b32 v1, v1, v11, s22218; GFX9-NEXT: v_perm_b32 v4, v17, v16, s22219; GFX9-NEXT: v_perm_b32 v9, v10, v9, s22220; GFX9-NEXT: v_perm_b32 v10, v15, v14, s22221; GFX9-NEXT: s_waitcnt vmcnt(0)2222; GFX9-NEXT: v_add_u16_e32 v3, v5, v32223; GFX9-NEXT: v_pk_mul_lo_u16 v1, v1, v22224; GFX9-NEXT: v_pk_mul_lo_u16 v2, v9, v42225; GFX9-NEXT: v_pk_mul_lo_u16 v4, v7, v102226; GFX9-NEXT: v_add_u16_sdwa v3, v3, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12227; GFX9-NEXT: v_add_u16_e32 v3, v3, v42228; GFX9-NEXT: v_add_u16_sdwa v3, v3, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12229; GFX9-NEXT: v_add_u16_e32 v3, v3, v22230; GFX9-NEXT: v_add_u16_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12231; GFX9-NEXT: v_add_u16_e32 v2, v2, v12232; GFX9-NEXT: v_add_u16_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12233; GFX9-NEXT: global_store_short v0, v1, s[0:1]2234; GFX9-NEXT: s_endpgm2235;2236; GFX9-DL-LABEL: idot8_acc16_vecMul:2237; GFX9-DL: ; %bb.0: ; %entry2238; GFX9-DL-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02239; GFX9-DL-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12240; GFX9-DL-NEXT: s_mov_b32 s14, -12241; GFX9-DL-NEXT: s_mov_b32 s15, 0xe000002242; GFX9-DL-NEXT: s_add_u32 s12, s12, s112243; GFX9-DL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242244; GFX9-DL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x342245; GFX9-DL-NEXT: v_lshlrev_b32_e32 v0, 2, v02246; GFX9-DL-NEXT: v_mov_b32_e32 v4, 122247; GFX9-DL-NEXT: s_waitcnt lgkmcnt(0)2248; GFX9-DL-NEXT: global_load_dword v1, v0, s[8:9]2249; GFX9-DL-NEXT: global_load_dword v2, v0, s[10:11]2250; GFX9-DL-NEXT: v_mov_b32_e32 v0, 02251; GFX9-DL-NEXT: global_load_ushort v3, v0, s[0:1]2252; GFX9-DL-NEXT: s_mov_b32 s2, 0x50401002253; GFX9-DL-NEXT: s_addc_u32 s13, s13, 02254; GFX9-DL-NEXT: s_waitcnt vmcnt(2)2255; GFX9-DL-NEXT: v_lshrrev_b32_e32 v6, 4, v12256; GFX9-DL-NEXT: v_lshrrev_b32_e32 v7, 8, v12257; GFX9-DL-NEXT: v_lshrrev_b32_e32 v8, 12, v12258; GFX9-DL-NEXT: s_waitcnt vmcnt(1)2259; GFX9-DL-NEXT: v_lshrrev_b32_e32 v13, 4, v22260; GFX9-DL-NEXT: v_lshlrev_b16_e32 v5, 12, v12261; GFX9-DL-NEXT: v_lshlrev_b16_e32 v12, 12, v22262; GFX9-DL-NEXT: v_lshlrev_b16_e32 v6, 12, v62263; GFX9-DL-NEXT: v_lshlrev_b16_e32 v7, 12, v72264; GFX9-DL-NEXT: v_lshlrev_b16_e32 v8, 12, v82265; GFX9-DL-NEXT: v_lshlrev_b16_e32 v13, 12, v132266; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v9, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12267; GFX9-DL-NEXT: v_lshrrev_b32_e32 v10, 20, v12268; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v11, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32269; GFX9-DL-NEXT: v_lshrrev_b32_e32 v1, 28, v12270; GFX9-DL-NEXT: v_lshrrev_b32_e32 v14, 8, v22271; GFX9-DL-NEXT: v_lshrrev_b32_e32 v15, 12, v22272; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v16, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12273; GFX9-DL-NEXT: v_lshrrev_b32_e32 v17, 20, v22274; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v4, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32275; GFX9-DL-NEXT: v_lshrrev_b32_e32 v2, 28, v22276; GFX9-DL-NEXT: v_ashrrev_i16_e32 v5, 12, v52277; GFX9-DL-NEXT: v_ashrrev_i16_e32 v12, 12, v122278; GFX9-DL-NEXT: v_ashrrev_i16_e32 v6, 12, v62279; GFX9-DL-NEXT: v_ashrrev_i16_e32 v7, 12, v72280; GFX9-DL-NEXT: v_ashrrev_i16_e32 v8, 12, v82281; GFX9-DL-NEXT: v_ashrrev_i16_e32 v13, 12, v132282; GFX9-DL-NEXT: v_lshlrev_b16_e32 v10, 12, v102283; GFX9-DL-NEXT: v_lshlrev_b16_e32 v1, 12, v12284; GFX9-DL-NEXT: v_lshlrev_b16_e32 v14, 12, v142285; GFX9-DL-NEXT: v_lshlrev_b16_e32 v15, 12, v152286; GFX9-DL-NEXT: v_lshlrev_b16_e32 v17, 12, v172287; GFX9-DL-NEXT: v_lshlrev_b16_e32 v2, 12, v22288; GFX9-DL-NEXT: v_perm_b32 v7, v8, v7, s22289; GFX9-DL-NEXT: v_perm_b32 v8, v13, v12, s22290; GFX9-DL-NEXT: v_perm_b32 v5, v6, v5, s22291; GFX9-DL-NEXT: v_ashrrev_i16_e32 v9, 12, v92292; GFX9-DL-NEXT: v_ashrrev_i16_e32 v11, 12, v112293; GFX9-DL-NEXT: v_ashrrev_i16_e32 v16, 12, v162294; GFX9-DL-NEXT: v_ashrrev_i16_e32 v4, 12, v42295; GFX9-DL-NEXT: v_ashrrev_i16_e32 v10, 12, v102296; GFX9-DL-NEXT: v_ashrrev_i16_e32 v1, 12, v12297; GFX9-DL-NEXT: v_ashrrev_i16_e32 v14, 12, v142298; GFX9-DL-NEXT: v_ashrrev_i16_e32 v15, 12, v152299; GFX9-DL-NEXT: v_ashrrev_i16_e32 v17, 12, v172300; GFX9-DL-NEXT: v_ashrrev_i16_e32 v2, 12, v22301; GFX9-DL-NEXT: v_pk_mul_lo_u16 v5, v5, v82302; GFX9-DL-NEXT: v_perm_b32 v2, v2, v4, s22303; GFX9-DL-NEXT: v_perm_b32 v1, v1, v11, s22304; GFX9-DL-NEXT: v_perm_b32 v4, v17, v16, s22305; GFX9-DL-NEXT: v_perm_b32 v9, v10, v9, s22306; GFX9-DL-NEXT: v_perm_b32 v10, v15, v14, s22307; GFX9-DL-NEXT: s_waitcnt vmcnt(0)2308; GFX9-DL-NEXT: v_add_u16_e32 v3, v5, v32309; GFX9-DL-NEXT: v_pk_mul_lo_u16 v1, v1, v22310; GFX9-DL-NEXT: v_pk_mul_lo_u16 v2, v9, v42311; GFX9-DL-NEXT: v_pk_mul_lo_u16 v4, v7, v102312; GFX9-DL-NEXT: v_add_u16_sdwa v3, v3, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12313; GFX9-DL-NEXT: v_add_u16_e32 v3, v3, v42314; GFX9-DL-NEXT: v_add_u16_sdwa v3, v3, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12315; GFX9-DL-NEXT: v_add_u16_e32 v3, v3, v22316; GFX9-DL-NEXT: v_add_u16_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12317; GFX9-DL-NEXT: v_add_u16_e32 v2, v2, v12318; GFX9-DL-NEXT: v_add_u16_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12319; GFX9-DL-NEXT: global_store_short v0, v1, s[0:1]2320; GFX9-DL-NEXT: s_endpgm2321;2322; GFX10-DL-XNACK-LABEL: idot8_acc16_vecMul:2323; GFX10-DL-XNACK: ; %bb.0: ; %entry2324; GFX10-DL-XNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02325; GFX10-DL-XNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12326; GFX10-DL-XNACK-NEXT: s_mov_b32 s14, -12327; GFX10-DL-XNACK-NEXT: s_mov_b32 s15, 0x31c160002328; GFX10-DL-XNACK-NEXT: s_add_u32 s12, s12, s112329; GFX10-DL-XNACK-NEXT: s_clause 0x12330; GFX10-DL-XNACK-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242331; GFX10-DL-XNACK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x342332; GFX10-DL-XNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v02333; GFX10-DL-XNACK-NEXT: s_addc_u32 s13, s13, 02334; GFX10-DL-XNACK-NEXT: s_waitcnt lgkmcnt(0)2335; GFX10-DL-XNACK-NEXT: s_clause 0x12336; GFX10-DL-XNACK-NEXT: global_load_dword v1, v0, s[8:9]2337; GFX10-DL-XNACK-NEXT: global_load_dword v2, v0, s[10:11]2338; GFX10-DL-XNACK-NEXT: v_mov_b32_e32 v0, 02339; GFX10-DL-XNACK-NEXT: global_load_ushort v3, v0, s[0:1]2340; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(2)2341; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v5, 4, v12342; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(1)2343; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v12, 4, v22344; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v4, 12, v12345; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v11, 12, v22346; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v6, 8, v12347; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v5, 12, v52348; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v12, 12, v122349; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v7, 12, v12350; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v8, 16, v12351; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v13, 8, v22352; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v14, 12, v22353; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v4, 12, v42354; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v11, 12, v112355; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v12, 12, v122356; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v5, 12, v52357; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v6, 12, v62358; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v7, 12, v72359; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v8, 12, v82360; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v13, 12, v132361; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v14, 12, v142362; GFX10-DL-XNACK-NEXT: v_perm_b32 v11, v12, v11, 0x50401002363; GFX10-DL-XNACK-NEXT: v_perm_b32 v4, v5, v4, 0x50401002364; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v9, 20, v12365; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v15, 16, v22366; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v16, 20, v22367; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v6, 12, v62368; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v7, 12, v72369; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v5, 12, v82370; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v8, 12, v132371; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v12, 12, v142372; GFX10-DL-XNACK-NEXT: v_pk_mul_lo_u16 v4, v4, v112373; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v9, 12, v92374; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v15, 12, v152375; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v16, 12, v162376; GFX10-DL-XNACK-NEXT: v_perm_b32 v8, v12, v8, 0x50401002377; GFX10-DL-XNACK-NEXT: v_perm_b32 v6, v7, v6, 0x50401002378; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v7, 16, v42379; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(0)2380; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v3, v4, v32381; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v10, 24, v12382; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v1, 28, v12383; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v17, 24, v22384; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v9, 12, v92385; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v11, 12, v152386; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v2, 28, v22387; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v4, 12, v162388; GFX10-DL-XNACK-NEXT: v_pk_mul_lo_u16 v6, v6, v82389; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v3, v3, v72390; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v10, 12, v102391; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v1, 12, v12392; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v12, 12, v172393; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v2, 12, v22394; GFX10-DL-XNACK-NEXT: v_perm_b32 v4, v4, v11, 0x50401002395; GFX10-DL-XNACK-NEXT: v_perm_b32 v5, v9, v5, 0x50401002396; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v7, 16, v62397; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v3, v3, v62398; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v10, 12, v102399; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v6, 12, v122400; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v2, 12, v22401; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v1, 12, v12402; GFX10-DL-XNACK-NEXT: v_pk_mul_lo_u16 v4, v5, v42403; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v3, v3, v72404; GFX10-DL-XNACK-NEXT: v_perm_b32 v2, v2, v6, 0x50401002405; GFX10-DL-XNACK-NEXT: v_perm_b32 v1, v1, v10, 0x50401002406; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v5, 16, v42407; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v3, v3, v42408; GFX10-DL-XNACK-NEXT: v_pk_mul_lo_u16 v1, v1, v22409; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v2, v3, v52410; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v3, 16, v12411; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v1, v2, v12412; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v1, v1, v32413; GFX10-DL-XNACK-NEXT: global_store_short v0, v1, s[0:1]2414; GFX10-DL-XNACK-NEXT: s_endpgm2415;2416; GFX10-DL-NOXNACK-LABEL: idot8_acc16_vecMul:2417; GFX10-DL-NOXNACK: ; %bb.0: ; %entry2418; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02419; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12420; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s14, -12421; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s15, 0x31c160002422; GFX10-DL-NOXNACK-NEXT: s_add_u32 s12, s12, s112423; GFX10-DL-NOXNACK-NEXT: s_clause 0x12424; GFX10-DL-NOXNACK-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242425; GFX10-DL-NOXNACK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x342426; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v02427; GFX10-DL-NOXNACK-NEXT: v_mov_b32_e32 v2, 02428; GFX10-DL-NOXNACK-NEXT: s_addc_u32 s13, s13, 02429; GFX10-DL-NOXNACK-NEXT: s_waitcnt lgkmcnt(0)2430; GFX10-DL-NOXNACK-NEXT: s_clause 0x12431; GFX10-DL-NOXNACK-NEXT: global_load_dword v1, v0, s[8:9]2432; GFX10-DL-NOXNACK-NEXT: global_load_dword v0, v0, s[10:11]2433; GFX10-DL-NOXNACK-NEXT: global_load_ushort v3, v2, s[0:1]2434; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(2)2435; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v5, 4, v12436; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(1)2437; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v12, 4, v02438; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v4, 12, v12439; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v11, 12, v02440; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v6, 8, v12441; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v5, 12, v52442; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v12, 12, v122443; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v7, 12, v12444; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v8, 16, v12445; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v13, 8, v02446; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v14, 12, v02447; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v4, 12, v42448; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v11, 12, v112449; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v12, 12, v122450; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v5, 12, v52451; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v6, 12, v62452; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v7, 12, v72453; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v8, 12, v82454; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v13, 12, v132455; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v14, 12, v142456; GFX10-DL-NOXNACK-NEXT: v_perm_b32 v11, v12, v11, 0x50401002457; GFX10-DL-NOXNACK-NEXT: v_perm_b32 v4, v5, v4, 0x50401002458; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v9, 20, v12459; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v15, 16, v02460; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v16, 20, v02461; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v6, 12, v62462; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v7, 12, v72463; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v5, 12, v82464; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v8, 12, v132465; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v12, 12, v142466; GFX10-DL-NOXNACK-NEXT: v_pk_mul_lo_u16 v4, v4, v112467; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v9, 12, v92468; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v15, 12, v152469; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v16, 12, v162470; GFX10-DL-NOXNACK-NEXT: v_perm_b32 v8, v12, v8, 0x50401002471; GFX10-DL-NOXNACK-NEXT: v_perm_b32 v6, v7, v6, 0x50401002472; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v7, 16, v42473; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(0)2474; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v3, v4, v32475; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v10, 24, v12476; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v1, 28, v12477; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v17, 24, v02478; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v9, 12, v92479; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v11, 12, v152480; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v0, 28, v02481; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v4, 12, v162482; GFX10-DL-NOXNACK-NEXT: v_pk_mul_lo_u16 v6, v6, v82483; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v3, v3, v72484; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v10, 12, v102485; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v1, 12, v12486; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v12, 12, v172487; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v0, 12, v02488; GFX10-DL-NOXNACK-NEXT: v_perm_b32 v4, v4, v11, 0x50401002489; GFX10-DL-NOXNACK-NEXT: v_perm_b32 v5, v9, v5, 0x50401002490; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v7, 16, v62491; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v3, v3, v62492; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v10, 12, v102493; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v6, 12, v122494; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v0, 12, v02495; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v1, 12, v12496; GFX10-DL-NOXNACK-NEXT: v_pk_mul_lo_u16 v4, v5, v42497; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v3, v3, v72498; GFX10-DL-NOXNACK-NEXT: v_perm_b32 v0, v0, v6, 0x50401002499; GFX10-DL-NOXNACK-NEXT: v_perm_b32 v1, v1, v10, 0x50401002500; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v5, 16, v42501; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v3, v3, v42502; GFX10-DL-NOXNACK-NEXT: v_pk_mul_lo_u16 v0, v1, v02503; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v1, v3, v52504; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v3, 16, v02505; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v0, v1, v02506; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v0, v0, v32507; GFX10-DL-NOXNACK-NEXT: global_store_short v2, v0, s[0:1]2508; GFX10-DL-NOXNACK-NEXT: s_endpgm2509 ptr addrspace(1) %src2,2510 ptr addrspace(1) nocapture %dst) {2511entry:2512 %idx = call i32 @llvm.amdgcn.workitem.id.x()2513 %gep1 = getelementptr <8 x i4>, ptr addrspace(1) %src1, i32 %idx2514 %vec1 = load <8 x i4>, ptr addrspace(1) %gep12515 %gep2 = getelementptr <8 x i4>, ptr addrspace(1) %src2, i32 %idx2516 %vec2 = load <8 x i4>, ptr addrspace(1) %gep22517 2518 %cvec1 = sext <8 x i4> %vec1 to <8 x i16>2519 %cvec2 = sext <8 x i4> %vec2 to <8 x i16>2520 2521 %mul = mul <8 x i16> %cvec1, %cvec22522 %mul0 = extractelement <8 x i16> %mul, i64 02523 %mul1 = extractelement <8 x i16> %mul, i64 12524 %mul2 = extractelement <8 x i16> %mul, i64 22525 %mul3 = extractelement <8 x i16> %mul, i64 32526 %mul4 = extractelement <8 x i16> %mul, i64 42527 %mul5 = extractelement <8 x i16> %mul, i64 52528 %mul6 = extractelement <8 x i16> %mul, i64 62529 %mul7 = extractelement <8 x i16> %mul, i64 72530 2531 %acc = load i16, ptr addrspace(1) %dst, align 42532 %add1 = add i16 %mul0, %acc2533 %add2 = add i16 %add1, %mul12534 %add3 = add i16 %add2, %mul22535 %add4 = add i16 %add3, %mul32536 %add5 = add i16 %add4, %mul42537 %add6 = add i16 %add5, %mul52538 %add7 = add i16 %add6, %mul62539 %add8 = add i16 %add7, %mul72540 2541 store i16 %add8, ptr addrspace(1) %dst, align 42542 ret void2543}2544 2545; TODO: Support this pattern.2546define amdgpu_kernel void @idot8_acc8_vecMul(ptr addrspace(1) %src1,2547; GFX7-LABEL: idot8_acc8_vecMul:2548; GFX7: ; %bb.0: ; %entry2549; GFX7-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02550; GFX7-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12551; GFX7-NEXT: s_mov_b32 s14, -12552; GFX7-NEXT: s_mov_b32 s15, 0xe8f0002553; GFX7-NEXT: s_add_u32 s12, s12, s112554; GFX7-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x92555; GFX7-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd2556; GFX7-NEXT: s_mov_b32 s3, 0xf0002557; GFX7-NEXT: s_mov_b32 s6, 02558; GFX7-NEXT: s_mov_b32 s7, s32559; GFX7-NEXT: s_waitcnt lgkmcnt(0)2560; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]2561; GFX7-NEXT: v_lshlrev_b32_e32 v0, 2, v02562; GFX7-NEXT: v_mov_b32_e32 v1, 02563; GFX7-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr642564; GFX7-NEXT: s_mov_b64 s[4:5], s[10:11]2565; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr642566; GFX7-NEXT: s_mov_b32 s2, -12567; GFX7-NEXT: buffer_load_ubyte v1, off, s[0:3], 02568; GFX7-NEXT: s_addc_u32 s13, s13, 02569; GFX7-NEXT: s_waitcnt vmcnt(2)2570; GFX7-NEXT: v_bfe_i32 v7, v2, 0, 42571; GFX7-NEXT: v_bfe_i32 v3, v2, 24, 42572; GFX7-NEXT: s_waitcnt vmcnt(1)2573; GFX7-NEXT: v_bfe_i32 v14, v0, 0, 42574; GFX7-NEXT: v_bfe_i32 v4, v2, 20, 42575; GFX7-NEXT: v_bfe_i32 v5, v2, 16, 42576; GFX7-NEXT: v_bfe_i32 v6, v2, 8, 42577; GFX7-NEXT: v_ashrrev_i32_e32 v8, 28, v22578; GFX7-NEXT: v_bfe_i32 v9, v2, 12, 42579; GFX7-NEXT: v_bfe_i32 v2, v2, 4, 42580; GFX7-NEXT: v_and_b32_e32 v7, 0xff, v72581; GFX7-NEXT: v_bfe_i32 v10, v0, 24, 42582; GFX7-NEXT: v_bfe_i32 v11, v0, 20, 42583; GFX7-NEXT: v_bfe_i32 v12, v0, 16, 42584; GFX7-NEXT: v_bfe_i32 v13, v0, 8, 42585; GFX7-NEXT: v_ashrrev_i32_e32 v15, 28, v02586; GFX7-NEXT: v_bfe_i32 v16, v0, 12, 42587; GFX7-NEXT: v_bfe_i32 v0, v0, 4, 42588; GFX7-NEXT: v_and_b32_e32 v14, 0xff, v142589; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v22590; GFX7-NEXT: v_and_b32_e32 v0, 0xff, v02591; GFX7-NEXT: s_waitcnt vmcnt(0)2592; GFX7-NEXT: v_mad_u32_u24 v1, v7, v14, v12593; GFX7-NEXT: v_and_b32_e32 v6, 0xff, v62594; GFX7-NEXT: v_and_b32_e32 v13, 0xff, v132595; GFX7-NEXT: v_mad_u32_u24 v0, v2, v0, v12596; GFX7-NEXT: v_and_b32_e32 v9, 0xff, v92597; GFX7-NEXT: v_and_b32_e32 v16, 0xff, v162598; GFX7-NEXT: v_mad_u32_u24 v0, v6, v13, v02599; GFX7-NEXT: v_and_b32_e32 v5, 0xff, v52600; GFX7-NEXT: v_and_b32_e32 v12, 0xff, v122601; GFX7-NEXT: v_mad_u32_u24 v0, v9, v16, v02602; GFX7-NEXT: v_and_b32_e32 v4, 0xff, v42603; GFX7-NEXT: v_and_b32_e32 v11, 0xff, v112604; GFX7-NEXT: v_mad_u32_u24 v0, v5, v12, v02605; GFX7-NEXT: v_and_b32_e32 v3, 0xff, v32606; GFX7-NEXT: v_and_b32_e32 v10, 0xff, v102607; GFX7-NEXT: v_mad_u32_u24 v0, v4, v11, v02608; GFX7-NEXT: v_and_b32_e32 v8, 0xff, v82609; GFX7-NEXT: v_and_b32_e32 v15, 0xff, v152610; GFX7-NEXT: v_mad_u32_u24 v0, v3, v10, v02611; GFX7-NEXT: v_mad_u32_u24 v0, v8, v15, v02612; GFX7-NEXT: buffer_store_byte v0, off, s[0:3], 02613; GFX7-NEXT: s_endpgm2614;2615; GFX8-LABEL: idot8_acc8_vecMul:2616; GFX8: ; %bb.0: ; %entry2617; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242618; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x342619; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v02620; GFX8-NEXT: v_mov_b32_e32 v5, 122621; GFX8-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02622; GFX8-NEXT: s_waitcnt lgkmcnt(0)2623; GFX8-NEXT: v_mov_b32_e32 v1, s12624; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v22625; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2626; GFX8-NEXT: flat_load_dword v3, v[0:1]2627; GFX8-NEXT: v_mov_b32_e32 v1, s32628; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v22629; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc2630; GFX8-NEXT: flat_load_dword v2, v[0:1]2631; GFX8-NEXT: v_mov_b32_e32 v0, s42632; GFX8-NEXT: v_mov_b32_e32 v1, s52633; GFX8-NEXT: flat_load_ubyte v4, v[0:1]2634; GFX8-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12635; GFX8-NEXT: s_mov_b32 s14, -12636; GFX8-NEXT: s_mov_b32 s15, 0xe800002637; GFX8-NEXT: s_add_u32 s12, s12, s112638; GFX8-NEXT: s_addc_u32 s13, s13, 02639; GFX8-NEXT: s_waitcnt vmcnt(2)2640; GFX8-NEXT: v_lshrrev_b32_e32 v6, 20, v32641; GFX8-NEXT: v_lshrrev_b32_e32 v7, 28, v32642; GFX8-NEXT: v_lshrrev_b32_e32 v8, 12, v32643; GFX8-NEXT: v_lshrrev_b32_e32 v9, 8, v32644; GFX8-NEXT: v_lshrrev_b32_e32 v10, 4, v32645; GFX8-NEXT: v_lshlrev_b16_e32 v16, 12, v32646; GFX8-NEXT: s_waitcnt vmcnt(1)2647; GFX8-NEXT: v_lshrrev_b32_e32 v11, 20, v22648; GFX8-NEXT: v_lshrrev_b32_e32 v12, 28, v22649; GFX8-NEXT: v_lshrrev_b32_e32 v13, 12, v22650; GFX8-NEXT: v_lshrrev_b32_e32 v14, 8, v22651; GFX8-NEXT: v_lshrrev_b32_e32 v15, 4, v22652; GFX8-NEXT: v_lshlrev_b16_sdwa v17, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32653; GFX8-NEXT: v_lshlrev_b16_sdwa v3, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12654; GFX8-NEXT: v_lshlrev_b16_e32 v18, 12, v22655; GFX8-NEXT: v_lshlrev_b16_sdwa v19, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32656; GFX8-NEXT: v_lshlrev_b16_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12657; GFX8-NEXT: v_lshlrev_b16_e32 v5, 12, v102658; GFX8-NEXT: v_ashrrev_i16_e32 v10, 12, v162659; GFX8-NEXT: v_ashrrev_i16_e32 v16, 12, v172660; GFX8-NEXT: v_lshlrev_b16_e32 v7, 12, v72661; GFX8-NEXT: v_ashrrev_i16_e32 v17, 12, v32662; GFX8-NEXT: v_lshlrev_b16_e32 v3, 12, v62663; GFX8-NEXT: v_lshlrev_b16_e32 v6, 12, v152664; GFX8-NEXT: v_ashrrev_i16_e32 v15, 12, v182665; GFX8-NEXT: v_ashrrev_i16_e32 v18, 12, v192666; GFX8-NEXT: v_lshlrev_b16_e32 v12, 12, v122667; GFX8-NEXT: v_ashrrev_i16_e32 v19, 12, v22668; GFX8-NEXT: v_lshlrev_b16_e32 v2, 12, v112669; GFX8-NEXT: v_lshlrev_b16_e32 v9, 12, v92670; GFX8-NEXT: v_lshlrev_b16_e32 v8, 12, v82671; GFX8-NEXT: v_lshlrev_b16_e32 v14, 12, v142672; GFX8-NEXT: v_lshlrev_b16_e32 v13, 12, v132673; GFX8-NEXT: v_ashrrev_i16_e32 v7, 12, v72674; GFX8-NEXT: v_ashrrev_i16_e32 v3, 12, v32675; GFX8-NEXT: v_ashrrev_i16_e32 v12, 12, v122676; GFX8-NEXT: v_ashrrev_i16_e32 v2, 12, v22677; GFX8-NEXT: v_ashrrev_i16_e32 v9, 12, v92678; GFX8-NEXT: v_ashrrev_i16_e32 v8, 12, v82679; GFX8-NEXT: v_ashrrev_i16_e32 v11, 12, v142680; GFX8-NEXT: v_ashrrev_i16_e32 v13, 12, v132681; GFX8-NEXT: v_mul_lo_u16_e32 v10, v10, v152682; GFX8-NEXT: v_mul_lo_u16_e32 v15, v16, v182683; GFX8-NEXT: v_mul_lo_u16_sdwa v2, v3, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2684; GFX8-NEXT: v_mul_lo_u16_sdwa v3, v7, v12 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2685; GFX8-NEXT: v_ashrrev_i16_e32 v5, 12, v52686; GFX8-NEXT: v_ashrrev_i16_e32 v6, 12, v62687; GFX8-NEXT: v_mul_lo_u16_e32 v14, v17, v192688; GFX8-NEXT: v_mul_lo_u16_sdwa v7, v8, v13 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2689; GFX8-NEXT: v_mul_lo_u16_e32 v8, v9, v112690; GFX8-NEXT: v_or_b32_sdwa v3, v15, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2691; GFX8-NEXT: v_mul_lo_u16_sdwa v5, v5, v6 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2692; GFX8-NEXT: v_or_b32_sdwa v6, v14, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2693; GFX8-NEXT: v_or_b32_sdwa v7, v8, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2694; GFX8-NEXT: v_lshlrev_b32_e32 v9, 16, v32695; GFX8-NEXT: v_or_b32_sdwa v8, v10, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2696; GFX8-NEXT: v_lshlrev_b32_e32 v2, 16, v72697; GFX8-NEXT: v_lshrrev_b32_e32 v10, 8, v32698; GFX8-NEXT: v_or_b32_sdwa v3, v6, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2699; GFX8-NEXT: v_or_b32_e32 v5, v5, v22700; GFX8-NEXT: v_lshrrev_b32_e32 v6, 8, v32701; GFX8-NEXT: v_lshrrev_b64 v[2:3], 24, v[2:3]2702; GFX8-NEXT: v_lshrrev_b32_e32 v5, 8, v52703; GFX8-NEXT: s_waitcnt vmcnt(0)2704; GFX8-NEXT: v_add_u16_e32 v3, v8, v42705; GFX8-NEXT: v_add_u16_e32 v3, v3, v52706; GFX8-NEXT: v_add_u16_e32 v3, v3, v72707; GFX8-NEXT: v_add_u16_e32 v2, v3, v22708; GFX8-NEXT: v_mad_u16 v2, v17, v19, v22709; GFX8-NEXT: v_add_u16_e32 v2, v2, v62710; GFX8-NEXT: v_mad_u16 v2, v16, v18, v22711; GFX8-NEXT: v_add_u16_e32 v2, v2, v102712; GFX8-NEXT: flat_store_byte v[0:1], v22713; GFX8-NEXT: s_endpgm2714;2715; GFX9-LABEL: idot8_acc8_vecMul:2716; GFX9: ; %bb.0: ; %entry2717; GFX9-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02718; GFX9-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12719; GFX9-NEXT: s_mov_b32 s14, -12720; GFX9-NEXT: s_mov_b32 s15, 0xe000002721; GFX9-NEXT: s_add_u32 s12, s12, s112722; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242723; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x342724; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v02725; GFX9-NEXT: v_mov_b32_e32 v4, 122726; GFX9-NEXT: s_waitcnt lgkmcnt(0)2727; GFX9-NEXT: global_load_dword v1, v0, s[8:9]2728; GFX9-NEXT: global_load_dword v2, v0, s[10:11]2729; GFX9-NEXT: v_mov_b32_e32 v0, 02730; GFX9-NEXT: global_load_ubyte v3, v0, s[0:1]2731; GFX9-NEXT: s_addc_u32 s13, s13, 02732; GFX9-NEXT: s_waitcnt vmcnt(2)2733; GFX9-NEXT: v_lshrrev_b32_e32 v5, 20, v12734; GFX9-NEXT: v_lshrrev_b32_e32 v6, 28, v12735; GFX9-NEXT: v_lshrrev_b32_e32 v7, 12, v12736; GFX9-NEXT: v_lshrrev_b32_e32 v8, 8, v12737; GFX9-NEXT: v_lshrrev_b32_e32 v9, 4, v12738; GFX9-NEXT: s_waitcnt vmcnt(1)2739; GFX9-NEXT: v_lshrrev_b32_e32 v10, 20, v22740; GFX9-NEXT: v_lshrrev_b32_e32 v11, 28, v22741; GFX9-NEXT: v_lshrrev_b32_e32 v12, 12, v22742; GFX9-NEXT: v_lshrrev_b32_e32 v13, 8, v22743; GFX9-NEXT: v_lshrrev_b32_e32 v14, 4, v22744; GFX9-NEXT: v_lshlrev_b16_e32 v15, 12, v12745; GFX9-NEXT: v_lshlrev_b16_sdwa v16, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32746; GFX9-NEXT: v_lshlrev_b16_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12747; GFX9-NEXT: v_lshlrev_b16_e32 v17, 12, v22748; GFX9-NEXT: v_lshlrev_b16_sdwa v18, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32749; GFX9-NEXT: v_lshlrev_b16_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12750; GFX9-NEXT: v_lshlrev_b16_e32 v4, 12, v92751; GFX9-NEXT: v_ashrrev_i16_e32 v9, 12, v152752; GFX9-NEXT: v_lshlrev_b16_e32 v8, 12, v82753; GFX9-NEXT: v_lshlrev_b16_e32 v7, 12, v72754; GFX9-NEXT: v_ashrrev_i16_e32 v15, 12, v162755; GFX9-NEXT: v_lshlrev_b16_e32 v6, 12, v62756; GFX9-NEXT: v_ashrrev_i16_e32 v16, 12, v12757; GFX9-NEXT: v_lshlrev_b16_e32 v1, 12, v52758; GFX9-NEXT: v_lshlrev_b16_e32 v5, 12, v142759; GFX9-NEXT: v_ashrrev_i16_e32 v14, 12, v172760; GFX9-NEXT: v_lshlrev_b16_e32 v13, 12, v132761; GFX9-NEXT: v_lshlrev_b16_e32 v12, 12, v122762; GFX9-NEXT: v_ashrrev_i16_e32 v17, 12, v182763; GFX9-NEXT: v_lshlrev_b16_e32 v11, 12, v112764; GFX9-NEXT: v_ashrrev_i16_e32 v18, 12, v22765; GFX9-NEXT: v_lshlrev_b16_e32 v2, 12, v102766; GFX9-NEXT: v_ashrrev_i16_e32 v8, 12, v82767; GFX9-NEXT: v_ashrrev_i16_e32 v7, 12, v72768; GFX9-NEXT: v_ashrrev_i16_e32 v6, 12, v62769; GFX9-NEXT: v_ashrrev_i16_e32 v1, 12, v12770; GFX9-NEXT: v_ashrrev_i16_e32 v10, 12, v132771; GFX9-NEXT: v_ashrrev_i16_e32 v12, 12, v122772; GFX9-NEXT: v_ashrrev_i16_e32 v11, 12, v112773; GFX9-NEXT: v_ashrrev_i16_e32 v2, 12, v22774; GFX9-NEXT: v_ashrrev_i16_e32 v4, 12, v42775; GFX9-NEXT: v_ashrrev_i16_e32 v5, 12, v52776; GFX9-NEXT: v_mul_lo_u16_e32 v13, v16, v182777; GFX9-NEXT: v_mul_lo_u16_e32 v19, v15, v172778; GFX9-NEXT: v_mul_lo_u16_sdwa v1, v1, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2779; GFX9-NEXT: v_mul_lo_u16_sdwa v2, v6, v11 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2780; GFX9-NEXT: v_mul_lo_u16_sdwa v6, v7, v12 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2781; GFX9-NEXT: v_mul_lo_u16_e32 v7, v8, v102782; GFX9-NEXT: v_mul_lo_u16_sdwa v4, v4, v5 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2783; GFX9-NEXT: v_or_b32_sdwa v1, v13, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2784; GFX9-NEXT: v_or_b32_sdwa v5, v19, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2785; GFX9-NEXT: v_or_b32_sdwa v6, v7, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2786; GFX9-NEXT: v_mul_lo_u16_e32 v9, v9, v142787; GFX9-NEXT: v_lshrrev_b32_e32 v8, 8, v22788; GFX9-NEXT: v_or_b32_sdwa v2, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2789; GFX9-NEXT: v_lshlrev_b32_e32 v1, 16, v62790; GFX9-NEXT: v_or_b32_sdwa v7, v9, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2791; GFX9-NEXT: v_lshrrev_b32_e32 v5, 8, v22792; GFX9-NEXT: v_or_b32_e32 v4, v4, v12793; GFX9-NEXT: v_lshrrev_b64 v[1:2], 24, v[1:2]2794; GFX9-NEXT: v_lshrrev_b32_e32 v2, 8, v42795; GFX9-NEXT: s_waitcnt vmcnt(0)2796; GFX9-NEXT: v_add_u16_e32 v3, v7, v32797; GFX9-NEXT: v_add_u16_e32 v2, v3, v22798; GFX9-NEXT: v_add_u16_e32 v2, v2, v62799; GFX9-NEXT: v_add_u16_e32 v1, v2, v12800; GFX9-NEXT: v_mad_legacy_u16 v1, v16, v18, v12801; GFX9-NEXT: v_add_u16_e32 v1, v1, v52802; GFX9-NEXT: v_mad_legacy_u16 v1, v15, v17, v12803; GFX9-NEXT: v_add_u16_e32 v1, v1, v82804; GFX9-NEXT: global_store_byte v0, v1, s[0:1]2805; GFX9-NEXT: s_endpgm2806;2807; GFX9-DL-LABEL: idot8_acc8_vecMul:2808; GFX9-DL: ; %bb.0: ; %entry2809; GFX9-DL-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02810; GFX9-DL-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12811; GFX9-DL-NEXT: s_mov_b32 s14, -12812; GFX9-DL-NEXT: s_mov_b32 s15, 0xe000002813; GFX9-DL-NEXT: s_add_u32 s12, s12, s112814; GFX9-DL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242815; GFX9-DL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x342816; GFX9-DL-NEXT: v_lshlrev_b32_e32 v0, 2, v02817; GFX9-DL-NEXT: v_mov_b32_e32 v4, 122818; GFX9-DL-NEXT: s_waitcnt lgkmcnt(0)2819; GFX9-DL-NEXT: global_load_dword v1, v0, s[8:9]2820; GFX9-DL-NEXT: global_load_dword v2, v0, s[10:11]2821; GFX9-DL-NEXT: v_mov_b32_e32 v0, 02822; GFX9-DL-NEXT: global_load_ubyte v3, v0, s[0:1]2823; GFX9-DL-NEXT: s_addc_u32 s13, s13, 02824; GFX9-DL-NEXT: s_waitcnt vmcnt(2)2825; GFX9-DL-NEXT: v_lshrrev_b32_e32 v5, 20, v12826; GFX9-DL-NEXT: v_lshrrev_b32_e32 v6, 28, v12827; GFX9-DL-NEXT: v_lshrrev_b32_e32 v7, 12, v12828; GFX9-DL-NEXT: v_lshrrev_b32_e32 v8, 8, v12829; GFX9-DL-NEXT: v_lshrrev_b32_e32 v9, 4, v12830; GFX9-DL-NEXT: s_waitcnt vmcnt(1)2831; GFX9-DL-NEXT: v_lshrrev_b32_e32 v10, 20, v22832; GFX9-DL-NEXT: v_lshrrev_b32_e32 v11, 28, v22833; GFX9-DL-NEXT: v_lshrrev_b32_e32 v12, 12, v22834; GFX9-DL-NEXT: v_lshrrev_b32_e32 v13, 8, v22835; GFX9-DL-NEXT: v_lshrrev_b32_e32 v14, 4, v22836; GFX9-DL-NEXT: v_lshlrev_b16_e32 v15, 12, v12837; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v16, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32838; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12839; GFX9-DL-NEXT: v_lshlrev_b16_e32 v17, 12, v22840; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v18, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_32841; GFX9-DL-NEXT: v_lshlrev_b16_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_12842; GFX9-DL-NEXT: v_lshlrev_b16_e32 v4, 12, v92843; GFX9-DL-NEXT: v_ashrrev_i16_e32 v9, 12, v152844; GFX9-DL-NEXT: v_lshlrev_b16_e32 v8, 12, v82845; GFX9-DL-NEXT: v_lshlrev_b16_e32 v7, 12, v72846; GFX9-DL-NEXT: v_ashrrev_i16_e32 v15, 12, v162847; GFX9-DL-NEXT: v_lshlrev_b16_e32 v6, 12, v62848; GFX9-DL-NEXT: v_ashrrev_i16_e32 v16, 12, v12849; GFX9-DL-NEXT: v_lshlrev_b16_e32 v1, 12, v52850; GFX9-DL-NEXT: v_lshlrev_b16_e32 v5, 12, v142851; GFX9-DL-NEXT: v_ashrrev_i16_e32 v14, 12, v172852; GFX9-DL-NEXT: v_lshlrev_b16_e32 v13, 12, v132853; GFX9-DL-NEXT: v_lshlrev_b16_e32 v12, 12, v122854; GFX9-DL-NEXT: v_ashrrev_i16_e32 v17, 12, v182855; GFX9-DL-NEXT: v_lshlrev_b16_e32 v11, 12, v112856; GFX9-DL-NEXT: v_ashrrev_i16_e32 v18, 12, v22857; GFX9-DL-NEXT: v_lshlrev_b16_e32 v2, 12, v102858; GFX9-DL-NEXT: v_ashrrev_i16_e32 v8, 12, v82859; GFX9-DL-NEXT: v_ashrrev_i16_e32 v7, 12, v72860; GFX9-DL-NEXT: v_ashrrev_i16_e32 v6, 12, v62861; GFX9-DL-NEXT: v_ashrrev_i16_e32 v1, 12, v12862; GFX9-DL-NEXT: v_ashrrev_i16_e32 v10, 12, v132863; GFX9-DL-NEXT: v_ashrrev_i16_e32 v12, 12, v122864; GFX9-DL-NEXT: v_ashrrev_i16_e32 v11, 12, v112865; GFX9-DL-NEXT: v_ashrrev_i16_e32 v2, 12, v22866; GFX9-DL-NEXT: v_ashrrev_i16_e32 v4, 12, v42867; GFX9-DL-NEXT: v_ashrrev_i16_e32 v5, 12, v52868; GFX9-DL-NEXT: v_mul_lo_u16_e32 v13, v16, v182869; GFX9-DL-NEXT: v_mul_lo_u16_e32 v19, v15, v172870; GFX9-DL-NEXT: v_mul_lo_u16_sdwa v1, v1, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2871; GFX9-DL-NEXT: v_mul_lo_u16_sdwa v2, v6, v11 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2872; GFX9-DL-NEXT: v_mul_lo_u16_sdwa v6, v7, v12 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2873; GFX9-DL-NEXT: v_mul_lo_u16_e32 v7, v8, v102874; GFX9-DL-NEXT: v_mul_lo_u16_sdwa v4, v4, v5 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2875; GFX9-DL-NEXT: v_or_b32_sdwa v1, v13, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2876; GFX9-DL-NEXT: v_or_b32_sdwa v5, v19, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2877; GFX9-DL-NEXT: v_or_b32_sdwa v6, v7, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2878; GFX9-DL-NEXT: v_mul_lo_u16_e32 v9, v9, v142879; GFX9-DL-NEXT: v_lshrrev_b32_e32 v8, 8, v22880; GFX9-DL-NEXT: v_or_b32_sdwa v2, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2881; GFX9-DL-NEXT: v_lshlrev_b32_e32 v1, 16, v62882; GFX9-DL-NEXT: v_or_b32_sdwa v7, v9, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2883; GFX9-DL-NEXT: v_lshrrev_b32_e32 v5, 8, v22884; GFX9-DL-NEXT: v_or_b32_e32 v4, v4, v12885; GFX9-DL-NEXT: v_lshrrev_b64 v[1:2], 24, v[1:2]2886; GFX9-DL-NEXT: v_lshrrev_b32_e32 v2, 8, v42887; GFX9-DL-NEXT: s_waitcnt vmcnt(0)2888; GFX9-DL-NEXT: v_add_u16_e32 v3, v7, v32889; GFX9-DL-NEXT: v_add_u16_e32 v2, v3, v22890; GFX9-DL-NEXT: v_add_u16_e32 v2, v2, v62891; GFX9-DL-NEXT: v_add_u16_e32 v1, v2, v12892; GFX9-DL-NEXT: v_mad_legacy_u16 v1, v16, v18, v12893; GFX9-DL-NEXT: v_add_u16_e32 v1, v1, v52894; GFX9-DL-NEXT: v_mad_legacy_u16 v1, v15, v17, v12895; GFX9-DL-NEXT: v_add_u16_e32 v1, v1, v82896; GFX9-DL-NEXT: global_store_byte v0, v1, s[0:1]2897; GFX9-DL-NEXT: s_endpgm2898;2899; GFX10-DL-XNACK-LABEL: idot8_acc8_vecMul:2900; GFX10-DL-XNACK: ; %bb.0: ; %entry2901; GFX10-DL-XNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD02902; GFX10-DL-XNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD12903; GFX10-DL-XNACK-NEXT: s_mov_b32 s14, -12904; GFX10-DL-XNACK-NEXT: s_mov_b32 s15, 0x31c160002905; GFX10-DL-XNACK-NEXT: s_add_u32 s12, s12, s112906; GFX10-DL-XNACK-NEXT: s_clause 0x12907; GFX10-DL-XNACK-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242908; GFX10-DL-XNACK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x342909; GFX10-DL-XNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v02910; GFX10-DL-XNACK-NEXT: v_mov_b32_e32 v4, 02911; GFX10-DL-XNACK-NEXT: s_addc_u32 s13, s13, 02912; GFX10-DL-XNACK-NEXT: s_waitcnt lgkmcnt(0)2913; GFX10-DL-XNACK-NEXT: s_clause 0x12914; GFX10-DL-XNACK-NEXT: global_load_dword v1, v0, s[8:9]2915; GFX10-DL-XNACK-NEXT: global_load_dword v2, v0, s[10:11]2916; GFX10-DL-XNACK-NEXT: global_load_ubyte v3, v4, s[0:1]2917; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(2)2918; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v8, 12, v12919; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(1)2920; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v15, 12, v22921; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v9, 8, v12922; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v16, 8, v22923; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v10, 4, v12924; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v8, 12, v82925; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v15, 12, v152926; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v17, 4, v22927; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v9, 12, v92928; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v16, 12, v162929; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v8, 12, v82930; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v15, 12, v152931; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v0, 20, v12932; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v6, 28, v12933; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v11, 20, v22934; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v13, 28, v22935; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v10, 12, v102936; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v17, 12, v172937; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v9, 12, v92938; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v16, 12, v162939; GFX10-DL-XNACK-NEXT: v_mul_lo_u16 v8, v8, v152940; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v5, 16, v12941; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v7, 24, v12942; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v12, 16, v22943; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v14, 24, v22944; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v1, 12, v12945; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v2, 12, v22946; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v6, 12, v62947; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v0, 12, v02948; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v13, 12, v132949; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v11, 12, v112950; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v10, 12, v102951; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v15, 12, v172952; GFX10-DL-XNACK-NEXT: v_mul_lo_u16 v9, v9, v162953; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v8, 8, v82954; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v1, 12, v12955; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v7, 12, v72956; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v5, 12, v52957; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v2, 12, v22958; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v14, 12, v142959; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v12, 12, v122960; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v6, 12, v62961; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v0, 12, v02962; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v13, 12, v132963; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v11, 12, v112964; GFX10-DL-XNACK-NEXT: v_mul_lo_u16 v10, v10, v152965; GFX10-DL-XNACK-NEXT: v_or_b32_sdwa v8, v9, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2966; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v7, 12, v72967; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v5, 12, v52968; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v14, 12, v142969; GFX10-DL-XNACK-NEXT: v_ashrrev_i16 v12, 12, v122970; GFX10-DL-XNACK-NEXT: v_mul_lo_u16 v1, v1, v22971; GFX10-DL-XNACK-NEXT: v_mul_lo_u16 v2, v0, v112972; GFX10-DL-XNACK-NEXT: v_mul_lo_u16 v6, v6, v132973; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v9, 8, v102974; GFX10-DL-XNACK-NEXT: v_lshlrev_b32_e32 v0, 16, v82975; GFX10-DL-XNACK-NEXT: v_mul_lo_u16 v10, v5, v122976; GFX10-DL-XNACK-NEXT: v_mul_lo_u16 v11, v7, v142977; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v2, 8, v22978; GFX10-DL-XNACK-NEXT: v_lshlrev_b16 v6, 8, v62979; GFX10-DL-XNACK-NEXT: v_or_b32_sdwa v13, v9, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2980; GFX10-DL-XNACK-NEXT: v_or_b32_sdwa v1, v1, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2981; GFX10-DL-XNACK-NEXT: v_or_b32_sdwa v2, v10, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2982; GFX10-DL-XNACK-NEXT: v_or_b32_sdwa v9, v11, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2983; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v10, 8, v132984; GFX10-DL-XNACK-NEXT: s_waitcnt vmcnt(0)2985; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v3, v1, v32986; GFX10-DL-XNACK-NEXT: v_or_b32_sdwa v1, v2, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2987; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v9, v3, v102988; GFX10-DL-XNACK-NEXT: v_lshrrev_b64 v[2:3], 24, v[0:1]2989; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v1, 8, v12990; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v0, v9, v82991; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v0, v0, v22992; GFX10-DL-XNACK-NEXT: v_mad_u16 v0, v5, v12, v02993; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v0, v0, v12994; GFX10-DL-XNACK-NEXT: v_lshrrev_b32_e32 v1, 8, v62995; GFX10-DL-XNACK-NEXT: v_mad_u16 v0, v7, v14, v02996; GFX10-DL-XNACK-NEXT: v_add_nc_u16 v0, v0, v12997; GFX10-DL-XNACK-NEXT: global_store_byte v4, v0, s[0:1]2998; GFX10-DL-XNACK-NEXT: s_endpgm2999;3000; GFX10-DL-NOXNACK-LABEL: idot8_acc8_vecMul:3001; GFX10-DL-NOXNACK: ; %bb.0: ; %entry3002; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD03003; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD13004; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s14, -13005; GFX10-DL-NOXNACK-NEXT: s_mov_b32 s15, 0x31c160003006; GFX10-DL-NOXNACK-NEXT: s_add_u32 s12, s12, s113007; GFX10-DL-NOXNACK-NEXT: s_clause 0x13008; GFX10-DL-NOXNACK-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x243009; GFX10-DL-NOXNACK-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x343010; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b32_e32 v0, 2, v03011; GFX10-DL-NOXNACK-NEXT: v_mov_b32_e32 v4, 03012; GFX10-DL-NOXNACK-NEXT: s_addc_u32 s13, s13, 03013; GFX10-DL-NOXNACK-NEXT: s_waitcnt lgkmcnt(0)3014; GFX10-DL-NOXNACK-NEXT: s_clause 0x13015; GFX10-DL-NOXNACK-NEXT: global_load_dword v1, v0, s[8:9]3016; GFX10-DL-NOXNACK-NEXT: global_load_dword v0, v0, s[10:11]3017; GFX10-DL-NOXNACK-NEXT: global_load_ubyte v2, v4, s[0:1]3018; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(2)3019; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v8, 12, v13020; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(1)3021; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v15, 12, v03022; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v9, 8, v13023; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v16, 8, v03024; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v10, 4, v13025; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v8, 12, v83026; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v15, 12, v153027; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v17, 4, v03028; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v9, 12, v93029; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v16, 12, v163030; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v8, 12, v83031; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v15, 12, v153032; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v3, 20, v13033; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v6, 28, v13034; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v11, 20, v03035; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v13, 28, v03036; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v10, 12, v103037; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v17, 12, v173038; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v9, 12, v93039; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v16, 12, v163040; GFX10-DL-NOXNACK-NEXT: v_mul_lo_u16 v8, v8, v153041; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v5, 16, v13042; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v7, 24, v13043; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v12, 16, v03044; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v14, 24, v03045; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v6, 12, v63046; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v3, 12, v33047; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v13, 12, v133048; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v11, 12, v113049; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v1, 12, v13050; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v0, 12, v03051; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v10, 12, v103052; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v15, 12, v173053; GFX10-DL-NOXNACK-NEXT: v_mul_lo_u16 v9, v9, v163054; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v8, 8, v83055; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v7, 12, v73056; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v5, 12, v53057; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v14, 12, v143058; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v12, 12, v123059; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v6, 12, v63060; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v3, 12, v33061; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v13, 12, v133062; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v11, 12, v113063; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v1, 12, v13064; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v0, 12, v03065; GFX10-DL-NOXNACK-NEXT: v_mul_lo_u16 v10, v10, v153066; GFX10-DL-NOXNACK-NEXT: v_or_b32_sdwa v8, v9, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD3067; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v7, 12, v73068; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v5, 12, v53069; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v14, 12, v143070; GFX10-DL-NOXNACK-NEXT: v_ashrrev_i16 v12, 12, v123071; GFX10-DL-NOXNACK-NEXT: v_mul_lo_u16 v3, v3, v113072; GFX10-DL-NOXNACK-NEXT: v_mul_lo_u16 v6, v6, v133073; GFX10-DL-NOXNACK-NEXT: v_mul_lo_u16 v1, v1, v03074; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v9, 8, v103075; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b32_e32 v0, 16, v83076; GFX10-DL-NOXNACK-NEXT: v_mul_lo_u16 v10, v5, v123077; GFX10-DL-NOXNACK-NEXT: v_mul_lo_u16 v11, v7, v143078; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v3, 8, v33079; GFX10-DL-NOXNACK-NEXT: v_lshlrev_b16 v6, 8, v63080; GFX10-DL-NOXNACK-NEXT: v_or_b32_sdwa v13, v9, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3081; GFX10-DL-NOXNACK-NEXT: v_or_b32_sdwa v1, v1, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD3082; GFX10-DL-NOXNACK-NEXT: v_or_b32_sdwa v3, v10, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD3083; GFX10-DL-NOXNACK-NEXT: v_or_b32_sdwa v9, v11, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD3084; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v10, 8, v133085; GFX10-DL-NOXNACK-NEXT: s_waitcnt vmcnt(0)3086; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v2, v1, v23087; GFX10-DL-NOXNACK-NEXT: v_or_b32_sdwa v1, v3, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD3088; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v9, v2, v103089; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b64 v[2:3], 24, v[0:1]3090; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v1, 8, v13091; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v0, v9, v83092; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v0, v0, v23093; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v5, v12, v03094; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v0, v0, v13095; GFX10-DL-NOXNACK-NEXT: v_lshrrev_b32_e32 v1, 8, v63096; GFX10-DL-NOXNACK-NEXT: v_mad_u16 v0, v7, v14, v03097; GFX10-DL-NOXNACK-NEXT: v_add_nc_u16 v0, v0, v13098; GFX10-DL-NOXNACK-NEXT: global_store_byte v4, v0, s[0:1]3099; GFX10-DL-NOXNACK-NEXT: s_endpgm3100 ptr addrspace(1) %src2,3101 ptr addrspace(1) nocapture %dst) {3102entry:3103 %idx = call i32 @llvm.amdgcn.workitem.id.x()3104 %gep1 = getelementptr <8 x i4>, ptr addrspace(1) %src1, i32 %idx3105 %vec1 = load <8 x i4>, ptr addrspace(1) %gep13106 %gep2 = getelementptr <8 x i4>, ptr addrspace(1) %src2, i32 %idx3107 %vec2 = load <8 x i4>, ptr addrspace(1) %gep23108 3109 %cvec1 = sext <8 x i4> %vec1 to <8 x i8>3110 %cvec2 = sext <8 x i4> %vec2 to <8 x i8>3111 3112 %mul = mul <8 x i8> %cvec1, %cvec23113 %mul0 = extractelement <8 x i8> %mul, i64 03114 %mul1 = extractelement <8 x i8> %mul, i64 13115 %mul2 = extractelement <8 x i8> %mul, i64 23116 %mul3 = extractelement <8 x i8> %mul, i64 33117 %mul4 = extractelement <8 x i8> %mul, i64 43118 %mul5 = extractelement <8 x i8> %mul, i64 53119 %mul6 = extractelement <8 x i8> %mul, i64 63120 %mul7 = extractelement <8 x i8> %mul, i64 73121 3122 %acc = load i8, ptr addrspace(1) %dst, align 43123 %add1 = add i8 %mul0, %acc3124 %add2 = add i8 %add1, %mul13125 %add3 = add i8 %add2, %mul23126 %add4 = add i8 %add3, %mul33127 %add5 = add i8 %add4, %mul43128 %add6 = add i8 %add5, %mul53129 %add7 = add i8 %add6, %mul63130 %add8 = add i8 %add7, %mul73131 3132 store i8 %add8, ptr addrspace(1) %dst, align 43133 ret void3134}3135 3136declare i32 @llvm.amdgcn.workitem.id.x()3137