3017 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global -amdgpu-dpp-combine=false < %s | FileCheck --check-prefixes=GCN,GFX8,GFX8-OPT,GCN-OPT %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga -O0 -mattr=-flat-for-global -amdgpu-dpp-combine=false < %s | FileCheck --check-prefixes=GCN,GFX8,GFX8-NOOPT %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=-flat-for-global -amdgpu-dpp-combine=false < %s | FileCheck --check-prefixes=GCN,GFX10,GCN-OPT %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global -amdgpu-enable-vopd=0 -amdgpu-dpp-combine=false < %s | FileCheck --check-prefixes=GCN,GFX11,GCN-OPT %s6 7define amdgpu_kernel void @dpp_test(ptr addrspace(1) %out, i32 %in1, i32 %in2) {8; GFX8-OPT-LABEL: dpp_test:9; GFX8-OPT: ; %bb.0:10; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2411; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf00012; GFX8-OPT-NEXT: s_mov_b32 s6, -113; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)14; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s215; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s316; GFX8-OPT-NEXT: s_mov_b32 s4, s017; GFX8-OPT-NEXT: s_mov_b32 s5, s118; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x119; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 020; GFX8-OPT-NEXT: s_endpgm21;22; GFX8-NOOPT-LABEL: dpp_test:23; GFX8-NOOPT: ; %bb.0:24; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]25; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x2426; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c27; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x3028; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)29; GFX8-NOOPT-NEXT: s_mov_b32 s8, s130; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr131; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf00032; GFX8-NOOPT-NEXT: s_mov_b32 s7, -133; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr334; GFX8-NOOPT-NEXT: s_mov_b32 s1, s835; GFX8-NOOPT-NEXT: s_mov_b32 s2, s736; GFX8-NOOPT-NEXT: s_mov_b32 s3, s637; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s538; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s439; GFX8-NOOPT-NEXT: s_nop 140; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x141; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 042; GFX8-NOOPT-NEXT: s_endpgm43;44; GFX10-LABEL: dpp_test:45; GFX10: ; %bb.0:46; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2447; GFX10-NEXT: s_waitcnt lgkmcnt(0)48; GFX10-NEXT: v_mov_b32_e32 v0, s249; GFX10-NEXT: v_mov_b32_e32 v1, s350; GFX10-NEXT: s_mov_b32 s3, 0x3101600051; GFX10-NEXT: s_mov_b32 s2, -152; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x153; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 054; GFX10-NEXT: s_endpgm55;56; GFX11-LABEL: dpp_test:57; GFX11: ; %bb.0:58; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x2459; GFX11-NEXT: s_waitcnt lgkmcnt(0)60; GFX11-NEXT: v_mov_b32_e32 v0, s261; GFX11-NEXT: v_mov_b32_e32 v1, s362; GFX11-NEXT: s_mov_b32 s3, 0x3101600063; GFX11-NEXT: s_mov_b32 s2, -164; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)65; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x166; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 067; GFX11-NEXT: s_endpgm68 %tmp0 = call i32 @llvm.amdgcn.update.dpp.i32(i32 %in1, i32 %in2, i32 1, i32 1, i32 1, i1 false) #069 store i32 %tmp0, ptr addrspace(1) %out70 ret void71}72 73define amdgpu_kernel void @dpp_test_bc(ptr addrspace(1) %out, i32 %in1, i32 %in2) {74; GFX8-OPT-LABEL: dpp_test_bc:75; GFX8-OPT: ; %bb.0:76; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2477; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf00078; GFX8-OPT-NEXT: s_mov_b32 s6, -179; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)80; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s281; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s382; GFX8-OPT-NEXT: s_mov_b32 s4, s083; GFX8-OPT-NEXT: s_mov_b32 s5, s184; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[2,0,0,0] row_mask:0x1 bank_mask:0x1 bound_ctrl:185; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 086; GFX8-OPT-NEXT: s_endpgm87;88; GFX8-NOOPT-LABEL: dpp_test_bc:89; GFX8-NOOPT: ; %bb.0:90; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]91; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x2492; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c93; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x3094; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)95; GFX8-NOOPT-NEXT: s_mov_b32 s8, s196; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr197; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf00098; GFX8-NOOPT-NEXT: s_mov_b32 s7, -199; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3100; GFX8-NOOPT-NEXT: s_mov_b32 s1, s8101; GFX8-NOOPT-NEXT: s_mov_b32 s2, s7102; GFX8-NOOPT-NEXT: s_mov_b32 s3, s6103; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s5104; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s4105; GFX8-NOOPT-NEXT: s_nop 1106; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[2,0,0,0] row_mask:0x1 bank_mask:0x1 bound_ctrl:1107; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 0108; GFX8-NOOPT-NEXT: s_endpgm109;110; GFX10-LABEL: dpp_test_bc:111; GFX10: ; %bb.0:112; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24113; GFX10-NEXT: s_waitcnt lgkmcnt(0)114; GFX10-NEXT: v_mov_b32_e32 v0, s2115; GFX10-NEXT: v_mov_b32_e32 v1, s3116; GFX10-NEXT: s_mov_b32 s3, 0x31016000117; GFX10-NEXT: s_mov_b32 s2, -1118; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[2,0,0,0] row_mask:0x1 bank_mask:0x1 bound_ctrl:1119; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 0120; GFX10-NEXT: s_endpgm121;122; GFX11-LABEL: dpp_test_bc:123; GFX11: ; %bb.0:124; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24125; GFX11-NEXT: s_waitcnt lgkmcnt(0)126; GFX11-NEXT: v_mov_b32_e32 v0, s2127; GFX11-NEXT: v_mov_b32_e32 v1, s3128; GFX11-NEXT: s_mov_b32 s3, 0x31016000129; GFX11-NEXT: s_mov_b32 s2, -1130; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)131; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[2,0,0,0] row_mask:0x1 bank_mask:0x1 bound_ctrl:1132; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 0133; GFX11-NEXT: s_endpgm134 %tmp0 = call i32 @llvm.amdgcn.update.dpp.i32(i32 %in1, i32 %in2, i32 2, i32 1, i32 1, i1 true) #0135 store i32 %tmp0, ptr addrspace(1) %out136 ret void137}138 139 140@0 = internal unnamed_addr addrspace(3) global [448 x i32] poison, align 4141define weak_odr amdgpu_kernel void @dpp_test1(ptr %arg) local_unnamed_addr {142; GFX8-OPT-LABEL: dpp_test1:143; GFX8-OPT: ; %bb.0: ; %bb144; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 2, v0145; GFX8-OPT-NEXT: s_mov_b32 m0, -1146; GFX8-OPT-NEXT: ds_read_b32 v1, v0147; GFX8-OPT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24148; GFX8-OPT-NEXT: v_mov_b32_e32 v2, 0149; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)150; GFX8-OPT-NEXT: v_add_u32_e32 v4, vcc, v1, v1151; GFX8-OPT-NEXT: v_mov_b32_e32 v3, s1152; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0153; GFX8-OPT-NEXT: v_mov_b32_dpp v2, v4 quad_perm:[1,0,3,2] row_mask:0xf bank_mask:0xf154; GFX8-OPT-NEXT: v_addc_u32_e32 v1, vcc, 0, v3, vcc155; GFX8-OPT-NEXT: v_add_u32_e32 v2, vcc, v2, v4156; GFX8-OPT-NEXT: s_barrier157; GFX8-OPT-NEXT: flat_store_dword v[0:1], v2158; GFX8-OPT-NEXT: s_endpgm159;160; GFX8-NOOPT-LABEL: dpp_test1:161; GFX8-NOOPT: ; %bb.0: ; %bb162; GFX8-NOOPT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24163; GFX8-NOOPT-NEXT: s_mov_b32 s0, 2164; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v3, s0, v0165; GFX8-NOOPT-NEXT: s_mov_b32 m0, -1166; GFX8-NOOPT-NEXT: ds_read_b32 v0, v3167; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)168; GFX8-NOOPT-NEXT: s_barrier169; GFX8-NOOPT-NEXT: v_add_u32_e64 v1, s[0:1], v0, v0170; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0171; GFX8-NOOPT-NEXT: s_nop 1172; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,3,2] row_mask:0xf bank_mask:0xf173; GFX8-NOOPT-NEXT: v_add_u32_e64 v2, s[0:1], v0, v1174; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0175; GFX8-NOOPT-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec176; GFX8-NOOPT-NEXT: v_mov_b32_e32 v4, v0177; GFX8-NOOPT-NEXT: s_mov_b32 s0, s2178; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, v3179; GFX8-NOOPT-NEXT: s_mov_b32 s2, s3180; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v4181; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[0:1], s0, v0182; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s2183; GFX8-NOOPT-NEXT: v_addc_u32_e64 v3, s[0:1], v1, v3, s[0:1]184; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec185; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v3186; GFX8-NOOPT-NEXT: flat_store_dword v[0:1], v2187; GFX8-NOOPT-NEXT: s_endpgm188;189; GFX10-LABEL: dpp_test1:190; GFX10: ; %bb.0: ; %bb191; GFX10-NEXT: v_lshlrev_b32_e32 v0, 2, v0192; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24193; GFX10-NEXT: v_mov_b32_e32 v2, 0194; GFX10-NEXT: ds_read_b32 v1, v0195; GFX10-NEXT: s_waitcnt lgkmcnt(0)196; GFX10-NEXT: v_add_co_u32 v0, s0, s0, v0197; GFX10-NEXT: v_add_nc_u32_e32 v3, v1, v1198; GFX10-NEXT: v_add_co_ci_u32_e64 v1, s0, s1, 0, s0199; GFX10-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,3,2] row_mask:0xf bank_mask:0xf200; GFX10-NEXT: v_add_nc_u32_e32 v2, v2, v3201; GFX10-NEXT: s_barrier202; GFX10-NEXT: buffer_gl0_inv203; GFX10-NEXT: flat_store_dword v[0:1], v2204; GFX10-NEXT: s_endpgm205;206; GFX11-LABEL: dpp_test1:207; GFX11: ; %bb.0: ; %bb208; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v0209; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24210; GFX11-NEXT: v_mov_b32_e32 v2, 0211; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)212; GFX11-NEXT: v_and_b32_e32 v0, 0xffc, v0213; GFX11-NEXT: ds_load_b32 v1, v0214; GFX11-NEXT: s_waitcnt lgkmcnt(0)215; GFX11-NEXT: v_add_co_u32 v0, s0, s0, v0216; GFX11-NEXT: v_add_nc_u32_e32 v3, v1, v1217; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, s1, 0, s0218; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)219; GFX11-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,3,2] row_mask:0xf bank_mask:0xf220; GFX11-NEXT: v_add_nc_u32_e32 v2, v2, v3221; GFX11-NEXT: s_barrier222; GFX11-NEXT: buffer_gl0_inv223; GFX11-NEXT: flat_store_b32 v[0:1], v2224; GFX11-NEXT: s_endpgm225bb:226 %tmp = tail call i32 @llvm.amdgcn.workitem.id.x()227 %tmp1 = zext i32 %tmp to i64228 %tmp2 = getelementptr inbounds [448 x i32], ptr addrspace(3) @0, i32 0, i32 %tmp229 %tmp3 = load i32, ptr addrspace(3) %tmp2, align 4230 fence syncscope("workgroup-one-as") release231 tail call void @llvm.amdgcn.s.barrier()232 fence syncscope("workgroup-one-as") acquire233 %tmp4 = add nsw i32 %tmp3, %tmp3234 %tmp5 = tail call i32 @llvm.amdgcn.update.dpp.i32(i32 0, i32 %tmp4, i32 177, i32 15, i32 15, i1 zeroext false)235 %tmp6 = add nsw i32 %tmp5, %tmp4236 %tmp7 = getelementptr inbounds i32, ptr %arg, i64 %tmp1237 store i32 %tmp6, ptr %tmp7, align 4238 ret void239}240 241define amdgpu_kernel void @update_dppi64_test(ptr addrspace(1) %arg, i64 %in1, i64 %in2) {242; GFX8-OPT-LABEL: update_dppi64_test:243; GFX8-OPT: ; %bb.0:244; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24245; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 3, v0246; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)247; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s1248; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0249; GFX8-OPT-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc250; GFX8-OPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]251; GFX8-OPT-NEXT: v_mov_b32_e32 v5, s3252; GFX8-OPT-NEXT: v_mov_b32_e32 v4, s2253; GFX8-OPT-NEXT: s_waitcnt vmcnt(0)254; GFX8-OPT-NEXT: v_mov_b32_dpp v5, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1255; GFX8-OPT-NEXT: v_mov_b32_dpp v4, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1256; GFX8-OPT-NEXT: flat_store_dwordx2 v[0:1], v[4:5]257; GFX8-OPT-NEXT: s_endpgm258;259; GFX8-NOOPT-LABEL: update_dppi64_test:260; GFX8-NOOPT: ; %bb.0:261; GFX8-NOOPT-NEXT: s_mov_b64 s[0:1], s[4:5]262; GFX8-NOOPT-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x24263; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2c264; GFX8-NOOPT-NEXT: s_mov_b32 s2, 3265; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v1, s2, v0266; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0267; GFX8-NOOPT-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec268; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, v0269; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)270; GFX8-NOOPT-NEXT: s_mov_b32 s2, s4271; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, v1272; GFX8-NOOPT-NEXT: s_mov_b32 s4, s5273; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec274; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[2:3], s2, v0275; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s4276; GFX8-NOOPT-NEXT: v_addc_u32_e64 v2, s[2:3], v1, v2, s[2:3]277; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec278; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v2279; GFX8-NOOPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]280; GFX8-NOOPT-NEXT: s_waitcnt vmcnt(0)281; GFX8-NOOPT-NEXT: v_mov_b32_e32 v5, v3282; GFX8-NOOPT-NEXT: s_mov_b32 s2, s1283; GFX8-NOOPT-NEXT: v_mov_b32_e32 v4, s2284; GFX8-NOOPT-NEXT: s_nop 1285; GFX8-NOOPT-NEXT: v_mov_b32_dpp v4, v5 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1286; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v2287; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1288; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s0289; GFX8-NOOPT-NEXT: s_nop 1290; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1291; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec292; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v4293; GFX8-NOOPT-NEXT: flat_store_dwordx2 v[0:1], v[2:3]294; GFX8-NOOPT-NEXT: s_endpgm295;296; GFX10-LABEL: update_dppi64_test:297; GFX10: ; %bb.0:298; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24299; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v0300; GFX10-NEXT: s_waitcnt lgkmcnt(0)301; GFX10-NEXT: global_load_dwordx2 v[0:1], v4, s[0:1]302; GFX10-NEXT: v_mov_b32_e32 v3, s3303; GFX10-NEXT: v_mov_b32_e32 v2, s2304; GFX10-NEXT: s_waitcnt vmcnt(0)305; GFX10-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1306; GFX10-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1307; GFX10-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]308; GFX10-NEXT: s_endpgm309;310; GFX11-LABEL: update_dppi64_test:311; GFX11: ; %bb.0:312; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24313; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0314; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)315; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v0316; GFX11-NEXT: s_waitcnt lgkmcnt(0)317; GFX11-NEXT: global_load_b64 v[0:1], v4, s[0:1]318; GFX11-NEXT: v_mov_b32_e32 v3, s3319; GFX11-NEXT: v_mov_b32_e32 v2, s2320; GFX11-NEXT: s_waitcnt vmcnt(0)321; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)322; GFX11-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1323; GFX11-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1324; GFX11-NEXT: global_store_b64 v4, v[2:3], s[0:1]325; GFX11-NEXT: s_endpgm326 %id = tail call i32 @llvm.amdgcn.workitem.id.x()327 %gep = getelementptr inbounds i64, ptr addrspace(1) %arg, i32 %id328 %load = load i64, ptr addrspace(1) %gep329 %tmp0 = call i64 @llvm.amdgcn.update.dpp.i64(i64 %in1, i64 %load, i32 1, i32 1, i32 1, i1 false) #0330 store i64 %tmp0, ptr addrspace(1) %gep331 ret void332}333 334define amdgpu_kernel void @update_dppf64_test(ptr addrspace(1) %arg, double %in1, double %in2) {335; GFX8-OPT-LABEL: update_dppf64_test:336; GFX8-OPT: ; %bb.0:337; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24338; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 3, v0339; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)340; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s1341; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0342; GFX8-OPT-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc343; GFX8-OPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]344; GFX8-OPT-NEXT: v_mov_b32_e32 v5, s3345; GFX8-OPT-NEXT: v_mov_b32_e32 v4, s2346; GFX8-OPT-NEXT: s_waitcnt vmcnt(0)347; GFX8-OPT-NEXT: v_mov_b32_dpp v5, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1348; GFX8-OPT-NEXT: v_mov_b32_dpp v4, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1349; GFX8-OPT-NEXT: flat_store_dwordx2 v[0:1], v[4:5]350; GFX8-OPT-NEXT: s_endpgm351;352; GFX8-NOOPT-LABEL: update_dppf64_test:353; GFX8-NOOPT: ; %bb.0:354; GFX8-NOOPT-NEXT: s_mov_b64 s[0:1], s[4:5]355; GFX8-NOOPT-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x24356; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2c357; GFX8-NOOPT-NEXT: s_mov_b32 s2, 3358; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v1, s2, v0359; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0360; GFX8-NOOPT-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec361; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, v0362; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)363; GFX8-NOOPT-NEXT: s_mov_b32 s2, s4364; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, v1365; GFX8-NOOPT-NEXT: s_mov_b32 s4, s5366; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec367; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[2:3], s2, v0368; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s4369; GFX8-NOOPT-NEXT: v_addc_u32_e64 v2, s[2:3], v1, v2, s[2:3]370; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec371; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v2372; GFX8-NOOPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]373; GFX8-NOOPT-NEXT: s_waitcnt vmcnt(0)374; GFX8-NOOPT-NEXT: v_mov_b32_e32 v5, v3375; GFX8-NOOPT-NEXT: s_mov_b32 s2, s1376; GFX8-NOOPT-NEXT: v_mov_b32_e32 v4, s2377; GFX8-NOOPT-NEXT: s_nop 1378; GFX8-NOOPT-NEXT: v_mov_b32_dpp v4, v5 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1379; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v2380; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1381; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s0382; GFX8-NOOPT-NEXT: s_nop 1383; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1384; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec385; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v4386; GFX8-NOOPT-NEXT: flat_store_dwordx2 v[0:1], v[2:3]387; GFX8-NOOPT-NEXT: s_endpgm388;389; GFX10-LABEL: update_dppf64_test:390; GFX10: ; %bb.0:391; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24392; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v0393; GFX10-NEXT: s_waitcnt lgkmcnt(0)394; GFX10-NEXT: global_load_dwordx2 v[0:1], v4, s[0:1]395; GFX10-NEXT: v_mov_b32_e32 v3, s3396; GFX10-NEXT: v_mov_b32_e32 v2, s2397; GFX10-NEXT: s_waitcnt vmcnt(0)398; GFX10-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1399; GFX10-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1400; GFX10-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]401; GFX10-NEXT: s_endpgm402;403; GFX11-LABEL: update_dppf64_test:404; GFX11: ; %bb.0:405; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24406; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0407; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)408; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v0409; GFX11-NEXT: s_waitcnt lgkmcnt(0)410; GFX11-NEXT: global_load_b64 v[0:1], v4, s[0:1]411; GFX11-NEXT: v_mov_b32_e32 v3, s3412; GFX11-NEXT: v_mov_b32_e32 v2, s2413; GFX11-NEXT: s_waitcnt vmcnt(0)414; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)415; GFX11-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1416; GFX11-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1417; GFX11-NEXT: global_store_b64 v4, v[2:3], s[0:1]418; GFX11-NEXT: s_endpgm419 %id = tail call i32 @llvm.amdgcn.workitem.id.x()420 %gep = getelementptr inbounds double, ptr addrspace(1) %arg, i32 %id421 %load = load double, ptr addrspace(1) %gep422 %tmp0 = call double @llvm.amdgcn.update.dpp.f64(double %in1, double %load, i32 1, i32 1, i32 1, i1 false) #0423 store double %tmp0, ptr addrspace(1) %gep424 ret void425}426 427define amdgpu_kernel void @update_dppv2i32_test(ptr addrspace(1) %arg, <2 x i32> %in1, <2 x i32> %in2) {428; GFX8-OPT-LABEL: update_dppv2i32_test:429; GFX8-OPT: ; %bb.0:430; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24431; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 3, v0432; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)433; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s1434; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0435; GFX8-OPT-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc436; GFX8-OPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]437; GFX8-OPT-NEXT: v_mov_b32_e32 v5, s3438; GFX8-OPT-NEXT: v_mov_b32_e32 v4, s2439; GFX8-OPT-NEXT: s_waitcnt vmcnt(0)440; GFX8-OPT-NEXT: v_mov_b32_dpp v5, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1441; GFX8-OPT-NEXT: v_mov_b32_dpp v4, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1442; GFX8-OPT-NEXT: flat_store_dwordx2 v[0:1], v[4:5]443; GFX8-OPT-NEXT: s_endpgm444;445; GFX8-NOOPT-LABEL: update_dppv2i32_test:446; GFX8-NOOPT: ; %bb.0:447; GFX8-NOOPT-NEXT: s_mov_b64 s[0:1], s[4:5]448; GFX8-NOOPT-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x24449; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2c450; GFX8-NOOPT-NEXT: s_mov_b32 s2, 3451; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v1, s2, v0452; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0453; GFX8-NOOPT-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec454; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, v0455; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)456; GFX8-NOOPT-NEXT: s_mov_b32 s2, s4457; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, v1458; GFX8-NOOPT-NEXT: s_mov_b32 s4, s5459; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec460; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[2:3], s2, v0461; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s4462; GFX8-NOOPT-NEXT: v_addc_u32_e64 v2, s[2:3], v1, v2, s[2:3]463; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec464; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v2465; GFX8-NOOPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]466; GFX8-NOOPT-NEXT: s_waitcnt vmcnt(0)467; GFX8-NOOPT-NEXT: v_mov_b32_e32 v5, v3468; GFX8-NOOPT-NEXT: s_mov_b32 s2, s1469; GFX8-NOOPT-NEXT: v_mov_b32_e32 v4, s2470; GFX8-NOOPT-NEXT: s_nop 1471; GFX8-NOOPT-NEXT: v_mov_b32_dpp v4, v5 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1472; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v2473; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1474; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s0475; GFX8-NOOPT-NEXT: s_nop 1476; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1477; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec478; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v4479; GFX8-NOOPT-NEXT: flat_store_dwordx2 v[0:1], v[2:3]480; GFX8-NOOPT-NEXT: s_endpgm481;482; GFX10-LABEL: update_dppv2i32_test:483; GFX10: ; %bb.0:484; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24485; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v0486; GFX10-NEXT: s_waitcnt lgkmcnt(0)487; GFX10-NEXT: global_load_dwordx2 v[0:1], v4, s[0:1]488; GFX10-NEXT: v_mov_b32_e32 v3, s3489; GFX10-NEXT: v_mov_b32_e32 v2, s2490; GFX10-NEXT: s_waitcnt vmcnt(0)491; GFX10-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1492; GFX10-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1493; GFX10-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]494; GFX10-NEXT: s_endpgm495;496; GFX11-LABEL: update_dppv2i32_test:497; GFX11: ; %bb.0:498; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24499; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0500; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)501; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v0502; GFX11-NEXT: s_waitcnt lgkmcnt(0)503; GFX11-NEXT: global_load_b64 v[0:1], v4, s[0:1]504; GFX11-NEXT: v_mov_b32_e32 v3, s3505; GFX11-NEXT: v_mov_b32_e32 v2, s2506; GFX11-NEXT: s_waitcnt vmcnt(0)507; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)508; GFX11-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1509; GFX11-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1510; GFX11-NEXT: global_store_b64 v4, v[2:3], s[0:1]511; GFX11-NEXT: s_endpgm512 %id = tail call i32 @llvm.amdgcn.workitem.id.x()513 %gep = getelementptr inbounds <2 x i32>, ptr addrspace(1) %arg, i32 %id514 %load = load <2 x i32>, ptr addrspace(1) %gep515 %tmp0 = call <2 x i32> @llvm.amdgcn.update.dpp.v2i32(<2 x i32> %in1, <2 x i32> %load, i32 1, i32 1, i32 1, i1 false) #0516 store <2 x i32> %tmp0, ptr addrspace(1) %gep517 ret void518}519 520define amdgpu_kernel void @update_dppv2f32_test(ptr addrspace(1) %arg, <2 x float> %in1, <2 x float> %in2) {521; GFX8-OPT-LABEL: update_dppv2f32_test:522; GFX8-OPT: ; %bb.0:523; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24524; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 3, v0525; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)526; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s1527; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0528; GFX8-OPT-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc529; GFX8-OPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]530; GFX8-OPT-NEXT: v_mov_b32_e32 v5, s3531; GFX8-OPT-NEXT: v_mov_b32_e32 v4, s2532; GFX8-OPT-NEXT: s_waitcnt vmcnt(0)533; GFX8-OPT-NEXT: v_mov_b32_dpp v5, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1534; GFX8-OPT-NEXT: v_mov_b32_dpp v4, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1535; GFX8-OPT-NEXT: flat_store_dwordx2 v[0:1], v[4:5]536; GFX8-OPT-NEXT: s_endpgm537;538; GFX8-NOOPT-LABEL: update_dppv2f32_test:539; GFX8-NOOPT: ; %bb.0:540; GFX8-NOOPT-NEXT: s_mov_b64 s[0:1], s[4:5]541; GFX8-NOOPT-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x24542; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2c543; GFX8-NOOPT-NEXT: s_mov_b32 s2, 3544; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v1, s2, v0545; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0546; GFX8-NOOPT-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec547; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, v0548; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)549; GFX8-NOOPT-NEXT: s_mov_b32 s2, s4550; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, v1551; GFX8-NOOPT-NEXT: s_mov_b32 s4, s5552; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec553; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[2:3], s2, v0554; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s4555; GFX8-NOOPT-NEXT: v_addc_u32_e64 v2, s[2:3], v1, v2, s[2:3]556; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec557; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v2558; GFX8-NOOPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]559; GFX8-NOOPT-NEXT: s_waitcnt vmcnt(0)560; GFX8-NOOPT-NEXT: v_mov_b32_e32 v5, v3561; GFX8-NOOPT-NEXT: s_mov_b32 s2, s1562; GFX8-NOOPT-NEXT: v_mov_b32_e32 v4, s2563; GFX8-NOOPT-NEXT: s_nop 1564; GFX8-NOOPT-NEXT: v_mov_b32_dpp v4, v5 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1565; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v2566; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1567; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s0568; GFX8-NOOPT-NEXT: s_nop 1569; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1570; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec571; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v4572; GFX8-NOOPT-NEXT: flat_store_dwordx2 v[0:1], v[2:3]573; GFX8-NOOPT-NEXT: s_endpgm574;575; GFX10-LABEL: update_dppv2f32_test:576; GFX10: ; %bb.0:577; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24578; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v0579; GFX10-NEXT: s_waitcnt lgkmcnt(0)580; GFX10-NEXT: global_load_dwordx2 v[0:1], v4, s[0:1]581; GFX10-NEXT: v_mov_b32_e32 v3, s3582; GFX10-NEXT: v_mov_b32_e32 v2, s2583; GFX10-NEXT: s_waitcnt vmcnt(0)584; GFX10-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1585; GFX10-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1586; GFX10-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]587; GFX10-NEXT: s_endpgm588;589; GFX11-LABEL: update_dppv2f32_test:590; GFX11: ; %bb.0:591; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24592; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0593; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)594; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v0595; GFX11-NEXT: s_waitcnt lgkmcnt(0)596; GFX11-NEXT: global_load_b64 v[0:1], v4, s[0:1]597; GFX11-NEXT: v_mov_b32_e32 v3, s3598; GFX11-NEXT: v_mov_b32_e32 v2, s2599; GFX11-NEXT: s_waitcnt vmcnt(0)600; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)601; GFX11-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1602; GFX11-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1603; GFX11-NEXT: global_store_b64 v4, v[2:3], s[0:1]604; GFX11-NEXT: s_endpgm605 %id = tail call i32 @llvm.amdgcn.workitem.id.x()606 %gep = getelementptr inbounds <2 x float>, ptr addrspace(1) %arg, i32 %id607 %load = load <2 x float>, ptr addrspace(1) %gep608 %tmp0 = call <2 x float> @llvm.amdgcn.update.dpp.v2f32(<2 x float> %in1, <2 x float> %load, i32 1, i32 1, i32 1, i1 false) #0609 store <2 x float> %tmp0, ptr addrspace(1) %gep610 ret void611}612 613define amdgpu_kernel void @update_dpp_p0_test(ptr addrspace(1) %arg, ptr %in1, ptr %in2) {614; GFX8-OPT-LABEL: update_dpp_p0_test:615; GFX8-OPT: ; %bb.0:616; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24617; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 3, v0618; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)619; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s1620; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0621; GFX8-OPT-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc622; GFX8-OPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]623; GFX8-OPT-NEXT: v_mov_b32_e32 v5, s3624; GFX8-OPT-NEXT: v_mov_b32_e32 v4, s2625; GFX8-OPT-NEXT: s_waitcnt vmcnt(0)626; GFX8-OPT-NEXT: v_mov_b32_dpp v5, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1627; GFX8-OPT-NEXT: v_mov_b32_dpp v4, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1628; GFX8-OPT-NEXT: flat_store_dwordx2 v[0:1], v[4:5]629; GFX8-OPT-NEXT: s_endpgm630;631; GFX8-NOOPT-LABEL: update_dpp_p0_test:632; GFX8-NOOPT: ; %bb.0:633; GFX8-NOOPT-NEXT: s_mov_b64 s[0:1], s[4:5]634; GFX8-NOOPT-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x24635; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2c636; GFX8-NOOPT-NEXT: s_mov_b32 s2, 3637; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v1, s2, v0638; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0639; GFX8-NOOPT-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec640; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, v0641; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)642; GFX8-NOOPT-NEXT: s_mov_b32 s2, s4643; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, v1644; GFX8-NOOPT-NEXT: s_mov_b32 s4, s5645; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec646; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[2:3], s2, v0647; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s4648; GFX8-NOOPT-NEXT: v_addc_u32_e64 v2, s[2:3], v1, v2, s[2:3]649; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec650; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v2651; GFX8-NOOPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]652; GFX8-NOOPT-NEXT: s_waitcnt vmcnt(0)653; GFX8-NOOPT-NEXT: v_mov_b32_e32 v5, v3654; GFX8-NOOPT-NEXT: s_mov_b32 s2, s1655; GFX8-NOOPT-NEXT: v_mov_b32_e32 v4, s2656; GFX8-NOOPT-NEXT: s_nop 1657; GFX8-NOOPT-NEXT: v_mov_b32_dpp v4, v5 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1658; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v2659; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1660; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s0661; GFX8-NOOPT-NEXT: s_nop 1662; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1663; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec664; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v4665; GFX8-NOOPT-NEXT: flat_store_dwordx2 v[0:1], v[2:3]666; GFX8-NOOPT-NEXT: s_endpgm667;668; GFX10-LABEL: update_dpp_p0_test:669; GFX10: ; %bb.0:670; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24671; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v0672; GFX10-NEXT: s_waitcnt lgkmcnt(0)673; GFX10-NEXT: global_load_dwordx2 v[0:1], v4, s[0:1]674; GFX10-NEXT: v_mov_b32_e32 v3, s3675; GFX10-NEXT: v_mov_b32_e32 v2, s2676; GFX10-NEXT: s_waitcnt vmcnt(0)677; GFX10-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1678; GFX10-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1679; GFX10-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]680; GFX10-NEXT: s_endpgm681;682; GFX11-LABEL: update_dpp_p0_test:683; GFX11: ; %bb.0:684; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24685; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0686; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)687; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v0688; GFX11-NEXT: s_waitcnt lgkmcnt(0)689; GFX11-NEXT: global_load_b64 v[0:1], v4, s[0:1]690; GFX11-NEXT: v_mov_b32_e32 v3, s3691; GFX11-NEXT: v_mov_b32_e32 v2, s2692; GFX11-NEXT: s_waitcnt vmcnt(0)693; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)694; GFX11-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1695; GFX11-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1696; GFX11-NEXT: global_store_b64 v4, v[2:3], s[0:1]697; GFX11-NEXT: s_endpgm698 %id = tail call i32 @llvm.amdgcn.workitem.id.x()699 %gep = getelementptr inbounds ptr, ptr addrspace(1) %arg, i32 %id700 %load = load ptr, ptr addrspace(1) %gep701 %tmp0 = call ptr @llvm.amdgcn.update.dpp.p0(ptr %in1, ptr %load, i32 1, i32 1, i32 1, i1 false) #0702 store ptr %tmp0, ptr addrspace(1) %gep703 ret void704}705 706define amdgpu_kernel void @update_dpp_p3_test(ptr addrspace(3) %arg, ptr addrspace(3) %in1, ptr %in2) {707; GFX8-OPT-LABEL: update_dpp_p3_test:708; GFX8-OPT: ; %bb.0:709; GFX8-OPT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24710; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 2, v0711; GFX8-OPT-NEXT: s_mov_b32 m0, -1712; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)713; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0714; GFX8-OPT-NEXT: ds_read_b32 v1, v0715; GFX8-OPT-NEXT: v_mov_b32_e32 v2, s1716; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)717; GFX8-OPT-NEXT: s_nop 0718; GFX8-OPT-NEXT: v_mov_b32_dpp v2, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1719; GFX8-OPT-NEXT: ds_write_b32 v0, v2720; GFX8-OPT-NEXT: s_endpgm721;722; GFX8-NOOPT-LABEL: update_dpp_p3_test:723; GFX8-NOOPT: ; %bb.0:724; GFX8-NOOPT-NEXT: s_load_dword s1, s[4:5], 0x24725; GFX8-NOOPT-NEXT: s_load_dword s0, s[4:5], 0x28726; GFX8-NOOPT-NEXT: s_mov_b32 s2, 2727; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v0, s2, v0728; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)729; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[2:3], s1, v0730; GFX8-NOOPT-NEXT: s_mov_b32 m0, -1731; GFX8-NOOPT-NEXT: ds_read_b32 v2, v0732; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s0733; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)734; GFX8-NOOPT-NEXT: s_nop 0735; GFX8-NOOPT-NEXT: v_mov_b32_dpp v1, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1736; GFX8-NOOPT-NEXT: s_mov_b32 m0, -1737; GFX8-NOOPT-NEXT: ds_write_b32 v0, v1738; GFX8-NOOPT-NEXT: s_endpgm739;740; GFX10-LABEL: update_dpp_p3_test:741; GFX10: ; %bb.0:742; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24743; GFX10-NEXT: s_waitcnt lgkmcnt(0)744; GFX10-NEXT: v_lshl_add_u32 v0, v0, 2, s0745; GFX10-NEXT: v_mov_b32_e32 v2, s1746; GFX10-NEXT: ds_read_b32 v1, v0747; GFX10-NEXT: s_waitcnt lgkmcnt(0)748; GFX10-NEXT: v_mov_b32_dpp v2, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1749; GFX10-NEXT: ds_write_b32 v0, v2750; GFX10-NEXT: s_endpgm751;752; GFX11-LABEL: update_dpp_p3_test:753; GFX11: ; %bb.0:754; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24755; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0756; GFX11-NEXT: s_waitcnt lgkmcnt(0)757; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)758; GFX11-NEXT: v_lshl_add_u32 v0, v0, 2, s0759; GFX11-NEXT: v_mov_b32_e32 v2, s1760; GFX11-NEXT: ds_load_b32 v1, v0761; GFX11-NEXT: s_waitcnt lgkmcnt(0)762; GFX11-NEXT: v_mov_b32_dpp v2, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1763; GFX11-NEXT: ds_store_b32 v0, v2764; GFX11-NEXT: s_endpgm765 %id = tail call i32 @llvm.amdgcn.workitem.id.x()766 %gep = getelementptr inbounds ptr addrspace(3), ptr addrspace(3) %arg, i32 %id767 %load = load ptr addrspace(3), ptr addrspace(3) %gep768 %tmp0 = call ptr addrspace(3) @llvm.amdgcn.update.dpp.p3(ptr addrspace(3) %in1, ptr addrspace(3) %load, i32 1, i32 1, i32 1, i1 false) #0769 store ptr addrspace(3) %tmp0, ptr addrspace(3) %gep770 ret void771}772 773define amdgpu_kernel void @update_dpp_p5_test(ptr addrspace(5) %arg, ptr addrspace(5) %in1, ptr %in2) {774; GFX8-OPT-LABEL: update_dpp_p5_test:775; GFX8-OPT: ; %bb.0:776; GFX8-OPT-NEXT: s_mov_b32 s88, SCRATCH_RSRC_DWORD0777; GFX8-OPT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24778; GFX8-OPT-NEXT: s_mov_b32 s89, SCRATCH_RSRC_DWORD1779; GFX8-OPT-NEXT: s_mov_b32 s90, -1780; GFX8-OPT-NEXT: s_mov_b32 s91, 0xe80000781; GFX8-OPT-NEXT: s_add_u32 s88, s88, s11782; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 2, v0783; GFX8-OPT-NEXT: s_addc_u32 s89, s89, 0784; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)785; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0786; GFX8-OPT-NEXT: buffer_load_dword v1, v0, s[88:91], 0 offen787; GFX8-OPT-NEXT: v_mov_b32_e32 v2, s1788; GFX8-OPT-NEXT: s_waitcnt vmcnt(0)789; GFX8-OPT-NEXT: s_nop 0790; GFX8-OPT-NEXT: v_mov_b32_dpp v2, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1791; GFX8-OPT-NEXT: buffer_store_dword v2, v0, s[88:91], 0 offen792; GFX8-OPT-NEXT: s_endpgm793;794; GFX8-NOOPT-LABEL: update_dpp_p5_test:795; GFX8-NOOPT: ; %bb.0:796; GFX8-NOOPT-NEXT: s_mov_b32 s88, SCRATCH_RSRC_DWORD0797; GFX8-NOOPT-NEXT: s_mov_b32 s89, SCRATCH_RSRC_DWORD1798; GFX8-NOOPT-NEXT: s_mov_b32 s90, -1799; GFX8-NOOPT-NEXT: s_mov_b32 s91, 0xe80000800; GFX8-NOOPT-NEXT: s_add_u32 s88, s88, s11801; GFX8-NOOPT-NEXT: s_addc_u32 s89, s89, 0802; GFX8-NOOPT-NEXT: s_load_dword s1, s[4:5], 0x24803; GFX8-NOOPT-NEXT: s_load_dword s0, s[4:5], 0x28804; GFX8-NOOPT-NEXT: s_mov_b32 s2, 2805; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v0, s2, v0806; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)807; GFX8-NOOPT-NEXT: v_add_u32_e64 v1, s[2:3], s1, v0808; GFX8-NOOPT-NEXT: buffer_load_dword v2, v1, s[88:91], 0 offen809; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s0810; GFX8-NOOPT-NEXT: s_waitcnt vmcnt(0)811; GFX8-NOOPT-NEXT: s_nop 0812; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1813; GFX8-NOOPT-NEXT: buffer_store_dword v0, v1, s[88:91], 0 offen814; GFX8-NOOPT-NEXT: s_endpgm815;816; GFX10-LABEL: update_dpp_p5_test:817; GFX10: ; %bb.0:818; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24819; GFX10-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0820; GFX10-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1821; GFX10-NEXT: s_mov_b32 s14, -1822; GFX10-NEXT: s_mov_b32 s15, 0x31c16000823; GFX10-NEXT: s_add_u32 s12, s12, s11824; GFX10-NEXT: s_addc_u32 s13, s13, 0825; GFX10-NEXT: s_waitcnt lgkmcnt(0)826; GFX10-NEXT: v_lshl_add_u32 v0, v0, 2, s0827; GFX10-NEXT: v_mov_b32_e32 v2, s1828; GFX10-NEXT: buffer_load_dword v1, v0, s[12:15], 0 offen829; GFX10-NEXT: s_waitcnt vmcnt(0)830; GFX10-NEXT: v_mov_b32_dpp v2, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1831; GFX10-NEXT: buffer_store_dword v2, v0, s[12:15], 0 offen832; GFX10-NEXT: s_endpgm833;834; GFX11-LABEL: update_dpp_p5_test:835; GFX11: ; %bb.0:836; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24837; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0838; GFX11-NEXT: s_waitcnt lgkmcnt(0)839; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)840; GFX11-NEXT: v_lshl_add_u32 v0, v0, 2, s0841; GFX11-NEXT: v_mov_b32_e32 v2, s1842; GFX11-NEXT: scratch_load_b32 v1, v0, off843; GFX11-NEXT: s_waitcnt vmcnt(0)844; GFX11-NEXT: v_mov_b32_dpp v2, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1845; GFX11-NEXT: scratch_store_b32 v0, v2, off846; GFX11-NEXT: s_endpgm847 %id = tail call i32 @llvm.amdgcn.workitem.id.x()848 %gep = getelementptr inbounds ptr addrspace(5), ptr addrspace(5) %arg, i32 %id849 %load = load ptr addrspace(5), ptr addrspace(5) %gep850 %tmp0 = call ptr addrspace(5) @llvm.amdgcn.update.dpp.p5(ptr addrspace(5) %in1, ptr addrspace(5) %load, i32 1, i32 1, i32 1, i1 false) #0851 store ptr addrspace(5) %tmp0, ptr addrspace(5) %gep852 ret void853}854 855define amdgpu_kernel void @update_dppi64_imm_old_test(ptr addrspace(1) %arg, i64 %in2) {856; GFX8-OPT-LABEL: update_dppi64_imm_old_test:857; GFX8-OPT: ; %bb.0:858; GFX8-OPT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24859; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 3, v0860; GFX8-OPT-NEXT: v_mov_b32_e32 v5, 0x7047861; GFX8-OPT-NEXT: v_mov_b32_e32 v4, 0x3afaedd9862; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)863; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s1864; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0865; GFX8-OPT-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc866; GFX8-OPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]867; GFX8-OPT-NEXT: s_waitcnt vmcnt(0)868; GFX8-OPT-NEXT: s_nop 0869; GFX8-OPT-NEXT: v_mov_b32_dpp v5, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1870; GFX8-OPT-NEXT: v_mov_b32_dpp v4, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1871; GFX8-OPT-NEXT: flat_store_dwordx2 v[0:1], v[4:5]872; GFX8-OPT-NEXT: s_endpgm873;874; GFX8-NOOPT-LABEL: update_dppi64_imm_old_test:875; GFX8-NOOPT: ; %bb.0:876; GFX8-NOOPT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24877; GFX8-NOOPT-NEXT: s_mov_b32 s0, 3878; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v1, s0, v0879; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0880; GFX8-NOOPT-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec881; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, v0882; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)883; GFX8-NOOPT-NEXT: s_mov_b32 s0, s2884; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, v1885; GFX8-NOOPT-NEXT: s_mov_b32 s2, s3886; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec887; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[0:1], s0, v0888; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s2889; GFX8-NOOPT-NEXT: v_addc_u32_e64 v2, s[0:1], v1, v2, s[0:1]890; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec891; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v2892; GFX8-NOOPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]893; GFX8-NOOPT-NEXT: s_mov_b32 s2, 0x7047894; GFX8-NOOPT-NEXT: s_mov_b32 s0, 0x3afaedd9895; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1896; GFX8-NOOPT-NEXT: s_mov_b32 s1, s2897; GFX8-NOOPT-NEXT: s_mov_b32 s2, s1898; GFX8-NOOPT-NEXT: s_waitcnt vmcnt(0)899; GFX8-NOOPT-NEXT: v_mov_b32_e32 v5, v3900; GFX8-NOOPT-NEXT: v_mov_b32_e32 v4, s2901; GFX8-NOOPT-NEXT: s_nop 1902; GFX8-NOOPT-NEXT: v_mov_b32_dpp v4, v5 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1903; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1904; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v2905; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s0906; GFX8-NOOPT-NEXT: s_nop 1907; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1908; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec909; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v4910; GFX8-NOOPT-NEXT: flat_store_dwordx2 v[0:1], v[2:3]911; GFX8-NOOPT-NEXT: s_endpgm912;913; GFX10-LABEL: update_dppi64_imm_old_test:914; GFX10: ; %bb.0:915; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24916; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v0917; GFX10-NEXT: v_mov_b32_e32 v3, 0x7047918; GFX10-NEXT: v_mov_b32_e32 v2, 0x3afaedd9919; GFX10-NEXT: s_waitcnt lgkmcnt(0)920; GFX10-NEXT: global_load_dwordx2 v[0:1], v4, s[0:1]921; GFX10-NEXT: s_waitcnt vmcnt(0)922; GFX10-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1923; GFX10-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1924; GFX10-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]925; GFX10-NEXT: s_endpgm926;927; GFX11-LABEL: update_dppi64_imm_old_test:928; GFX11: ; %bb.0:929; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24930; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0931; GFX11-NEXT: v_mov_b32_e32 v3, 0x7047932; GFX11-NEXT: v_mov_b32_e32 v2, 0x3afaedd9933; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)934; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v0935; GFX11-NEXT: s_waitcnt lgkmcnt(0)936; GFX11-NEXT: global_load_b64 v[0:1], v4, s[0:1]937; GFX11-NEXT: s_waitcnt vmcnt(0)938; GFX11-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1939; GFX11-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1940; GFX11-NEXT: global_store_b64 v4, v[2:3], s[0:1]941; GFX11-NEXT: s_endpgm942 %id = tail call i32 @llvm.amdgcn.workitem.id.x()943 %gep = getelementptr inbounds i64, ptr addrspace(1) %arg, i32 %id944 %load = load i64, ptr addrspace(1) %gep945 %tmp0 = call i64 @llvm.amdgcn.update.dpp.i64(i64 123451234512345, i64 %load, i32 1, i32 1, i32 1, i1 false) #0946 store i64 %tmp0, ptr addrspace(1) %gep947 ret void948}949 950define amdgpu_kernel void @update_dppf64_imm_old_test(ptr addrspace(1) %arg, double %in2) {951; GFX8-OPT-LABEL: update_dppf64_imm_old_test:952; GFX8-OPT: ; %bb.0:953; GFX8-OPT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24954; GFX8-OPT-NEXT: v_lshlrev_b32_e32 v0, 3, v0955; GFX8-OPT-NEXT: v_mov_b32_e32 v5, 0x405edce1956; GFX8-OPT-NEXT: v_mov_b32_e32 v4, 0x6b8564a957; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)958; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s1959; GFX8-OPT-NEXT: v_add_u32_e32 v0, vcc, s0, v0960; GFX8-OPT-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc961; GFX8-OPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]962; GFX8-OPT-NEXT: s_waitcnt vmcnt(0)963; GFX8-OPT-NEXT: s_nop 0964; GFX8-OPT-NEXT: v_mov_b32_dpp v5, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1965; GFX8-OPT-NEXT: v_mov_b32_dpp v4, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1966; GFX8-OPT-NEXT: flat_store_dwordx2 v[0:1], v[4:5]967; GFX8-OPT-NEXT: s_endpgm968;969; GFX8-NOOPT-LABEL: update_dppf64_imm_old_test:970; GFX8-NOOPT: ; %bb.0:971; GFX8-NOOPT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24972; GFX8-NOOPT-NEXT: s_mov_b32 s0, 3973; GFX8-NOOPT-NEXT: v_lshlrev_b32_e64 v1, s0, v0974; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, 0975; GFX8-NOOPT-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec976; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, v0977; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)978; GFX8-NOOPT-NEXT: s_mov_b32 s0, s2979; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, v1980; GFX8-NOOPT-NEXT: s_mov_b32 s2, s3981; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec982; GFX8-NOOPT-NEXT: v_add_u32_e64 v0, s[0:1], s0, v0983; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s2984; GFX8-NOOPT-NEXT: v_addc_u32_e64 v2, s[0:1], v1, v2, s[0:1]985; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec986; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v2987; GFX8-NOOPT-NEXT: flat_load_dwordx2 v[2:3], v[0:1]988; GFX8-NOOPT-NEXT: s_mov_b32 s2, 0x405edce1989; GFX8-NOOPT-NEXT: s_mov_b32 s0, 0x6b8564a990; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1991; GFX8-NOOPT-NEXT: s_mov_b32 s1, s2992; GFX8-NOOPT-NEXT: s_mov_b32 s2, s1993; GFX8-NOOPT-NEXT: s_waitcnt vmcnt(0)994; GFX8-NOOPT-NEXT: v_mov_b32_e32 v5, v3995; GFX8-NOOPT-NEXT: v_mov_b32_e32 v4, s2996; GFX8-NOOPT-NEXT: s_nop 1997; GFX8-NOOPT-NEXT: v_mov_b32_dpp v4, v5 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1998; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1999; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v21000; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s01001; GFX8-NOOPT-NEXT: s_nop 11002; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11003; GFX8-NOOPT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec1004; GFX8-NOOPT-NEXT: v_mov_b32_e32 v3, v41005; GFX8-NOOPT-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1006; GFX8-NOOPT-NEXT: s_endpgm1007;1008; GFX10-LABEL: update_dppf64_imm_old_test:1009; GFX10: ; %bb.0:1010; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241011; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v01012; GFX10-NEXT: v_mov_b32_e32 v3, 0x405edce11013; GFX10-NEXT: v_mov_b32_e32 v2, 0x6b8564a1014; GFX10-NEXT: s_waitcnt lgkmcnt(0)1015; GFX10-NEXT: global_load_dwordx2 v[0:1], v4, s[0:1]1016; GFX10-NEXT: s_waitcnt vmcnt(0)1017; GFX10-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11018; GFX10-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11019; GFX10-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1020; GFX10-NEXT: s_endpgm1021;1022; GFX11-LABEL: update_dppf64_imm_old_test:1023; GFX11: ; %bb.0:1024; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x241025; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v01026; GFX11-NEXT: v_mov_b32_e32 v3, 0x405edce11027; GFX11-NEXT: v_mov_b32_e32 v2, 0x6b8564a1028; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)1029; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v01030; GFX11-NEXT: s_waitcnt lgkmcnt(0)1031; GFX11-NEXT: global_load_b64 v[0:1], v4, s[0:1]1032; GFX11-NEXT: s_waitcnt vmcnt(0)1033; GFX11-NEXT: v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11034; GFX11-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11035; GFX11-NEXT: global_store_b64 v4, v[2:3], s[0:1]1036; GFX11-NEXT: s_endpgm1037 %id = tail call i32 @llvm.amdgcn.workitem.id.x()1038 %gep = getelementptr inbounds i64, ptr addrspace(1) %arg, i32 %id1039 %load = load double, ptr addrspace(1) %gep1040 %tmp0 = call double @llvm.amdgcn.update.dpp.f64(double 123.4512345123450, double %load, i32 1, i32 1, i32 1, i1 false) #01041 store double %tmp0, ptr addrspace(1) %gep1042 ret void1043}1044 1045define amdgpu_kernel void @update_dppi64_imm_src_test(ptr addrspace(1) %out, i64 %in1) {1046; GFX8-OPT-LABEL: update_dppi64_imm_src_test:1047; GFX8-OPT: ; %bb.0:1048; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241049; GFX8-OPT-NEXT: v_mov_b32_e32 v0, 0x70471050; GFX8-OPT-NEXT: v_mov_b32_e32 v2, 0x3afaedd91051; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001052; GFX8-OPT-NEXT: s_mov_b32 s6, -11053; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1054; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31055; GFX8-OPT-NEXT: s_mov_b32 s4, s01056; GFX8-OPT-NEXT: s_mov_b32 s5, s11057; GFX8-OPT-NEXT: v_mov_b32_dpp v1, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11058; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21059; GFX8-OPT-NEXT: s_nop 11060; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11061; GFX8-OPT-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 01062; GFX8-OPT-NEXT: s_endpgm1063;1064; GFX8-NOOPT-LABEL: update_dppi64_imm_src_test:1065; GFX8-NOOPT: ; %bb.0:1066; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241067; GFX8-NOOPT-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x2c1068; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1069; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11070; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11071; GFX8-NOOPT-NEXT: s_mov_b32 s4, 0xf0001072; GFX8-NOOPT-NEXT: s_mov_b32 s5, -11073; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31074; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81075; GFX8-NOOPT-NEXT: s_mov_b32 s2, s51076; GFX8-NOOPT-NEXT: s_mov_b32 s3, s41077; GFX8-NOOPT-NEXT: s_mov_b32 s8, 0x70471078; GFX8-NOOPT-NEXT: s_mov_b32 s4, 0x3afaedd91079; GFX8-NOOPT-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr51080; GFX8-NOOPT-NEXT: s_mov_b32 s5, s81081; GFX8-NOOPT-NEXT: s_mov_b32 s8, s51082; GFX8-NOOPT-NEXT: s_mov_b32 s9, s71083; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s91084; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s81085; GFX8-NOOPT-NEXT: s_nop 11086; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11087; GFX8-NOOPT-NEXT: ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr51088; GFX8-NOOPT-NEXT: s_mov_b32 s5, s61089; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51090; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41091; GFX8-NOOPT-NEXT: s_nop 11092; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11093; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec1094; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v21095; GFX8-NOOPT-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 01096; GFX8-NOOPT-NEXT: s_endpgm1097;1098; GFX10-LABEL: update_dppi64_imm_src_test:1099; GFX10: ; %bb.0:1100; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241101; GFX10-NEXT: v_mov_b32_e32 v2, 0x70471102; GFX10-NEXT: v_mov_b32_e32 v3, 0x3afaedd91103; GFX10-NEXT: s_waitcnt lgkmcnt(0)1104; GFX10-NEXT: v_mov_b32_e32 v1, s31105; GFX10-NEXT: v_mov_b32_e32 v0, s21106; GFX10-NEXT: s_mov_b32 s3, 0x310160001107; GFX10-NEXT: s_mov_b32 s2, -11108; GFX10-NEXT: v_mov_b32_dpp v1, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11109; GFX10-NEXT: v_mov_b32_dpp v0, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11110; GFX10-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 01111; GFX10-NEXT: s_endpgm1112;1113; GFX11-LABEL: update_dppi64_imm_src_test:1114; GFX11: ; %bb.0:1115; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241116; GFX11-NEXT: v_mov_b32_e32 v2, 0x70471117; GFX11-NEXT: v_mov_b32_e32 v3, 0x3afaedd91118; GFX11-NEXT: s_waitcnt lgkmcnt(0)1119; GFX11-NEXT: v_mov_b32_e32 v1, s31120; GFX11-NEXT: v_mov_b32_e32 v0, s21121; GFX11-NEXT: s_mov_b32 s3, 0x310160001122; GFX11-NEXT: s_mov_b32 s2, -11123; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1124; GFX11-NEXT: v_mov_b32_dpp v1, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11125; GFX11-NEXT: v_mov_b32_dpp v0, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11126; GFX11-NEXT: buffer_store_b64 v[0:1], off, s[0:3], 01127; GFX11-NEXT: s_endpgm1128 %tmp0 = call i64 @llvm.amdgcn.update.dpp.i64(i64 %in1, i64 123451234512345, i32 1, i32 1, i32 1, i1 false) #01129 store i64 %tmp0, ptr addrspace(1) %out1130 ret void1131}1132 1133define amdgpu_kernel void @update_dppf64_imm_src_test(ptr addrspace(1) %out, double %in1) {1134; GFX8-OPT-LABEL: update_dppf64_imm_src_test:1135; GFX8-OPT: ; %bb.0:1136; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241137; GFX8-OPT-NEXT: v_mov_b32_e32 v0, 0x405edce11138; GFX8-OPT-NEXT: v_mov_b32_e32 v2, 0x6b8564a1139; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001140; GFX8-OPT-NEXT: s_mov_b32 s6, -11141; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1142; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31143; GFX8-OPT-NEXT: s_mov_b32 s4, s01144; GFX8-OPT-NEXT: s_mov_b32 s5, s11145; GFX8-OPT-NEXT: v_mov_b32_dpp v1, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11146; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21147; GFX8-OPT-NEXT: s_nop 11148; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11149; GFX8-OPT-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 01150; GFX8-OPT-NEXT: s_endpgm1151;1152; GFX8-NOOPT-LABEL: update_dppf64_imm_src_test:1153; GFX8-NOOPT: ; %bb.0:1154; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x241155; GFX8-NOOPT-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x2c1156; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1157; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11158; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11159; GFX8-NOOPT-NEXT: s_mov_b32 s4, 0xf0001160; GFX8-NOOPT-NEXT: s_mov_b32 s5, -11161; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31162; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81163; GFX8-NOOPT-NEXT: s_mov_b32 s2, s51164; GFX8-NOOPT-NEXT: s_mov_b32 s3, s41165; GFX8-NOOPT-NEXT: s_mov_b32 s8, 0x405edce11166; GFX8-NOOPT-NEXT: s_mov_b32 s4, 0x6b8564a1167; GFX8-NOOPT-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr51168; GFX8-NOOPT-NEXT: s_mov_b32 s5, s81169; GFX8-NOOPT-NEXT: s_mov_b32 s8, s51170; GFX8-NOOPT-NEXT: s_mov_b32 s9, s71171; GFX8-NOOPT-NEXT: v_mov_b32_e32 v2, s91172; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s81173; GFX8-NOOPT-NEXT: s_nop 11174; GFX8-NOOPT-NEXT: v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11175; GFX8-NOOPT-NEXT: ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr51176; GFX8-NOOPT-NEXT: s_mov_b32 s5, s61177; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51178; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41179; GFX8-NOOPT-NEXT: s_nop 11180; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11181; GFX8-NOOPT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec1182; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, v21183; GFX8-NOOPT-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 01184; GFX8-NOOPT-NEXT: s_endpgm1185;1186; GFX10-LABEL: update_dppf64_imm_src_test:1187; GFX10: ; %bb.0:1188; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241189; GFX10-NEXT: v_mov_b32_e32 v2, 0x405edce11190; GFX10-NEXT: v_mov_b32_e32 v3, 0x6b8564a1191; GFX10-NEXT: s_waitcnt lgkmcnt(0)1192; GFX10-NEXT: v_mov_b32_e32 v1, s31193; GFX10-NEXT: v_mov_b32_e32 v0, s21194; GFX10-NEXT: s_mov_b32 s3, 0x310160001195; GFX10-NEXT: s_mov_b32 s2, -11196; GFX10-NEXT: v_mov_b32_dpp v1, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11197; GFX10-NEXT: v_mov_b32_dpp v0, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11198; GFX10-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 01199; GFX10-NEXT: s_endpgm1200;1201; GFX11-LABEL: update_dppf64_imm_src_test:1202; GFX11: ; %bb.0:1203; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241204; GFX11-NEXT: v_mov_b32_e32 v2, 0x405edce11205; GFX11-NEXT: v_mov_b32_e32 v3, 0x6b8564a1206; GFX11-NEXT: s_waitcnt lgkmcnt(0)1207; GFX11-NEXT: v_mov_b32_e32 v1, s31208; GFX11-NEXT: v_mov_b32_e32 v0, s21209; GFX11-NEXT: s_mov_b32 s3, 0x310160001210; GFX11-NEXT: s_mov_b32 s2, -11211; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1212; GFX11-NEXT: v_mov_b32_dpp v1, v2 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11213; GFX11-NEXT: v_mov_b32_dpp v0, v3 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11214; GFX11-NEXT: buffer_store_b64 v[0:1], off, s[0:3], 01215; GFX11-NEXT: s_endpgm1216 %tmp0 = call double @llvm.amdgcn.update.dpp.f64(double %in1, double 123.451234512345, i32 1, i32 1, i32 1, i1 false) #01217 store double %tmp0, ptr addrspace(1) %out1218 ret void1219}1220 1221define amdgpu_kernel void @dpp_test_f32(ptr addrspace(1) %out, float %in1, float %in2) {1222; GFX8-OPT-LABEL: dpp_test_f32:1223; GFX8-OPT: ; %bb.0:1224; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241225; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001226; GFX8-OPT-NEXT: s_mov_b32 s6, -11227; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1228; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21229; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31230; GFX8-OPT-NEXT: s_mov_b32 s4, s01231; GFX8-OPT-NEXT: s_mov_b32 s5, s11232; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11233; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01234; GFX8-OPT-NEXT: s_endpgm1235;1236; GFX8-NOOPT-LABEL: dpp_test_f32:1237; GFX8-NOOPT: ; %bb.0:1238; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1239; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241240; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1241; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301242; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1243; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11244; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11245; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001246; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11247; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31248; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81249; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71250; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61251; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51252; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41253; GFX8-NOOPT-NEXT: s_nop 11254; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11255; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01256; GFX8-NOOPT-NEXT: s_endpgm1257;1258; GFX10-LABEL: dpp_test_f32:1259; GFX10: ; %bb.0:1260; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241261; GFX10-NEXT: s_waitcnt lgkmcnt(0)1262; GFX10-NEXT: v_mov_b32_e32 v0, s21263; GFX10-NEXT: v_mov_b32_e32 v1, s31264; GFX10-NEXT: s_mov_b32 s3, 0x310160001265; GFX10-NEXT: s_mov_b32 s2, -11266; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11267; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01268; GFX10-NEXT: s_endpgm1269;1270; GFX11-LABEL: dpp_test_f32:1271; GFX11: ; %bb.0:1272; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241273; GFX11-NEXT: s_waitcnt lgkmcnt(0)1274; GFX11-NEXT: v_mov_b32_e32 v0, s21275; GFX11-NEXT: v_mov_b32_e32 v1, s31276; GFX11-NEXT: s_mov_b32 s3, 0x310160001277; GFX11-NEXT: s_mov_b32 s2, -11278; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1279; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11280; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01281; GFX11-NEXT: s_endpgm1282 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 1, i32 1, i32 1, i1 false)1283 store float %tmp0, ptr addrspace(1) %out1284 ret void1285}1286 1287define amdgpu_kernel void @dpp_test_f32_imm_comb1(ptr addrspace(1) %out, float %in1, float %in2) {1288; GFX8-OPT-LABEL: dpp_test_f32_imm_comb1:1289; GFX8-OPT: ; %bb.0:1290; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241291; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001292; GFX8-OPT-NEXT: s_mov_b32 s6, -11293; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1294; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21295; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31296; GFX8-OPT-NEXT: s_mov_b32 s4, s01297; GFX8-OPT-NEXT: s_mov_b32 s5, s11298; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x01299; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01300; GFX8-OPT-NEXT: s_endpgm1301;1302; GFX8-NOOPT-LABEL: dpp_test_f32_imm_comb1:1303; GFX8-NOOPT: ; %bb.0:1304; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1305; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241306; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1307; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301308; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1309; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11310; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11311; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001312; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11313; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31314; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81315; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71316; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61317; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51318; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41319; GFX8-NOOPT-NEXT: s_nop 11320; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x01321; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01322; GFX8-NOOPT-NEXT: s_endpgm1323;1324; GFX10-LABEL: dpp_test_f32_imm_comb1:1325; GFX10: ; %bb.0:1326; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241327; GFX10-NEXT: s_waitcnt lgkmcnt(0)1328; GFX10-NEXT: v_mov_b32_e32 v0, s21329; GFX10-NEXT: v_mov_b32_e32 v1, s31330; GFX10-NEXT: s_mov_b32 s3, 0x310160001331; GFX10-NEXT: s_mov_b32 s2, -11332; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x01333; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01334; GFX10-NEXT: s_endpgm1335;1336; GFX11-LABEL: dpp_test_f32_imm_comb1:1337; GFX11: ; %bb.0:1338; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241339; GFX11-NEXT: s_waitcnt lgkmcnt(0)1340; GFX11-NEXT: v_mov_b32_e32 v0, s21341; GFX11-NEXT: v_mov_b32_e32 v1, s31342; GFX11-NEXT: s_mov_b32 s3, 0x310160001343; GFX11-NEXT: s_mov_b32 s2, -11344; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1345; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x01346; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01347; GFX11-NEXT: s_endpgm1348 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 0, i32 0, i32 0, i1 false)1349 store float %tmp0, ptr addrspace(1) %out1350 ret void1351}1352 1353define amdgpu_kernel void @dpp_test_f32_imm_comb2(ptr addrspace(1) %out, float %in1, float %in2) {1354; GFX8-OPT-LABEL: dpp_test_f32_imm_comb2:1355; GFX8-OPT: ; %bb.0:1356; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241357; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001358; GFX8-OPT-NEXT: s_mov_b32 s6, -11359; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1360; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21361; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31362; GFX8-OPT-NEXT: s_mov_b32 s4, s01363; GFX8-OPT-NEXT: s_mov_b32 s5, s11364; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x31365; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01366; GFX8-OPT-NEXT: s_endpgm1367;1368; GFX8-NOOPT-LABEL: dpp_test_f32_imm_comb2:1369; GFX8-NOOPT: ; %bb.0:1370; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1371; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241372; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1373; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301374; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1375; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11376; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11377; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001378; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11379; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31380; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81381; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71382; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61383; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51384; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41385; GFX8-NOOPT-NEXT: s_nop 11386; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x31387; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01388; GFX8-NOOPT-NEXT: s_endpgm1389;1390; GFX10-LABEL: dpp_test_f32_imm_comb2:1391; GFX10: ; %bb.0:1392; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241393; GFX10-NEXT: s_waitcnt lgkmcnt(0)1394; GFX10-NEXT: v_mov_b32_e32 v0, s21395; GFX10-NEXT: v_mov_b32_e32 v1, s31396; GFX10-NEXT: s_mov_b32 s3, 0x310160001397; GFX10-NEXT: s_mov_b32 s2, -11398; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x31399; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01400; GFX10-NEXT: s_endpgm1401;1402; GFX11-LABEL: dpp_test_f32_imm_comb2:1403; GFX11: ; %bb.0:1404; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241405; GFX11-NEXT: s_waitcnt lgkmcnt(0)1406; GFX11-NEXT: v_mov_b32_e32 v0, s21407; GFX11-NEXT: v_mov_b32_e32 v1, s31408; GFX11-NEXT: s_mov_b32 s3, 0x310160001409; GFX11-NEXT: s_mov_b32 s2, -11410; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1411; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x31412; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01413; GFX11-NEXT: s_endpgm1414 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 3, i32 3, i32 3, i1 false)1415 store float %tmp0, ptr addrspace(1) %out1416 ret void1417}1418 1419define amdgpu_kernel void @dpp_test_f32_imm_comb3(ptr addrspace(1) %out, float %in1, float %in2) {1420; GFX8-OPT-LABEL: dpp_test_f32_imm_comb3:1421; GFX8-OPT: ; %bb.0:1422; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241423; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001424; GFX8-OPT-NEXT: s_mov_b32 s6, -11425; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1426; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21427; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31428; GFX8-OPT-NEXT: s_mov_b32 s4, s01429; GFX8-OPT-NEXT: s_mov_b32 s5, s11430; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:11431; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01432; GFX8-OPT-NEXT: s_endpgm1433;1434; GFX8-NOOPT-LABEL: dpp_test_f32_imm_comb3:1435; GFX8-NOOPT: ; %bb.0:1436; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1437; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241438; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1439; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301440; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1441; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11442; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11443; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001444; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11445; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31446; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81447; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71448; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61449; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51450; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41451; GFX8-NOOPT-NEXT: s_nop 11452; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:11453; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01454; GFX8-NOOPT-NEXT: s_endpgm1455;1456; GFX10-LABEL: dpp_test_f32_imm_comb3:1457; GFX10: ; %bb.0:1458; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241459; GFX10-NEXT: s_waitcnt lgkmcnt(0)1460; GFX10-NEXT: v_mov_b32_e32 v0, s21461; GFX10-NEXT: v_mov_b32_e32 v1, s31462; GFX10-NEXT: s_mov_b32 s3, 0x310160001463; GFX10-NEXT: s_mov_b32 s2, -11464; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:11465; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01466; GFX10-NEXT: s_endpgm1467;1468; GFX11-LABEL: dpp_test_f32_imm_comb3:1469; GFX11: ; %bb.0:1470; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241471; GFX11-NEXT: s_waitcnt lgkmcnt(0)1472; GFX11-NEXT: v_mov_b32_e32 v0, s21473; GFX11-NEXT: v_mov_b32_e32 v1, s31474; GFX11-NEXT: s_mov_b32 s3, 0x310160001475; GFX11-NEXT: s_mov_b32 s2, -11476; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1477; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:11478; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01479; GFX11-NEXT: s_endpgm1480 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 1, i32 2, i32 3, i1 true)1481 store float %tmp0, ptr addrspace(1) %out1482 ret void1483}1484 1485define amdgpu_kernel void @dpp_test_f32_imm_comb4(ptr addrspace(1) %out, float %in1, float %in2) {1486; GFX8-OPT-LABEL: dpp_test_f32_imm_comb4:1487; GFX8-OPT: ; %bb.0:1488; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241489; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001490; GFX8-OPT-NEXT: s_mov_b32 s6, -11491; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1492; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21493; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31494; GFX8-OPT-NEXT: s_mov_b32 s4, s01495; GFX8-OPT-NEXT: s_mov_b32 s5, s11496; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:11497; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01498; GFX8-OPT-NEXT: s_endpgm1499;1500; GFX8-NOOPT-LABEL: dpp_test_f32_imm_comb4:1501; GFX8-NOOPT: ; %bb.0:1502; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1503; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241504; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1505; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301506; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1507; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11508; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11509; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001510; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11511; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31512; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81513; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71514; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61515; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51516; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41517; GFX8-NOOPT-NEXT: s_nop 11518; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:11519; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01520; GFX8-NOOPT-NEXT: s_endpgm1521;1522; GFX10-LABEL: dpp_test_f32_imm_comb4:1523; GFX10: ; %bb.0:1524; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241525; GFX10-NEXT: s_waitcnt lgkmcnt(0)1526; GFX10-NEXT: v_mov_b32_e32 v0, s21527; GFX10-NEXT: v_mov_b32_e32 v1, s31528; GFX10-NEXT: s_mov_b32 s3, 0x310160001529; GFX10-NEXT: s_mov_b32 s2, -11530; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:11531; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01532; GFX10-NEXT: s_endpgm1533;1534; GFX11-LABEL: dpp_test_f32_imm_comb4:1535; GFX11: ; %bb.0:1536; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241537; GFX11-NEXT: s_waitcnt lgkmcnt(0)1538; GFX11-NEXT: v_mov_b32_e32 v0, s21539; GFX11-NEXT: v_mov_b32_e32 v1, s31540; GFX11-NEXT: s_mov_b32 s3, 0x310160001541; GFX11-NEXT: s_mov_b32 s2, -11542; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1543; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:11544; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01545; GFX11-NEXT: s_endpgm1546 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 4, i32 3, i32 2, i1 true)1547 store float %tmp0, ptr addrspace(1) %out1548 ret void1549}1550 1551define amdgpu_kernel void @dpp_test_f32_imm_comb5(ptr addrspace(1) %out, float %in1, float %in2) {1552; GFX8-OPT-LABEL: dpp_test_f32_imm_comb5:1553; GFX8-OPT: ; %bb.0:1554; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241555; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001556; GFX8-OPT-NEXT: s_mov_b32 s6, -11557; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1558; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21559; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31560; GFX8-OPT-NEXT: s_mov_b32 s4, s01561; GFX8-OPT-NEXT: s_mov_b32 s5, s11562; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:11563; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01564; GFX8-OPT-NEXT: s_endpgm1565;1566; GFX8-NOOPT-LABEL: dpp_test_f32_imm_comb5:1567; GFX8-NOOPT: ; %bb.0:1568; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1569; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241570; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1571; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301572; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1573; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11574; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11575; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001576; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11577; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31578; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81579; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71580; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61581; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51582; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41583; GFX8-NOOPT-NEXT: s_nop 11584; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:11585; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01586; GFX8-NOOPT-NEXT: s_endpgm1587;1588; GFX10-LABEL: dpp_test_f32_imm_comb5:1589; GFX10: ; %bb.0:1590; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241591; GFX10-NEXT: s_waitcnt lgkmcnt(0)1592; GFX10-NEXT: v_mov_b32_e32 v0, s21593; GFX10-NEXT: v_mov_b32_e32 v1, s31594; GFX10-NEXT: s_mov_b32 s3, 0x310160001595; GFX10-NEXT: s_mov_b32 s2, -11596; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:11597; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01598; GFX10-NEXT: s_endpgm1599;1600; GFX11-LABEL: dpp_test_f32_imm_comb5:1601; GFX11: ; %bb.0:1602; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241603; GFX11-NEXT: s_waitcnt lgkmcnt(0)1604; GFX11-NEXT: v_mov_b32_e32 v0, s21605; GFX11-NEXT: v_mov_b32_e32 v1, s31606; GFX11-NEXT: s_mov_b32 s3, 0x310160001607; GFX11-NEXT: s_mov_b32 s2, -11608; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1609; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:11610; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01611; GFX11-NEXT: s_endpgm1612 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 63, i32 14, i32 13, i1 true)1613 store float %tmp0, ptr addrspace(1) %out1614 ret void1615}1616 1617define amdgpu_kernel void @dpp_test_f32_imm_comb6(ptr addrspace(1) %out, float %in1, float %in2) {1618; GFX8-OPT-LABEL: dpp_test_f32_imm_comb6:1619; GFX8-OPT: ; %bb.0:1620; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241621; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001622; GFX8-OPT-NEXT: s_mov_b32 s6, -11623; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1624; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21625; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31626; GFX8-OPT-NEXT: s_mov_b32 s4, s01627; GFX8-OPT-NEXT: s_mov_b32 s5, s11628; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:11629; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01630; GFX8-OPT-NEXT: s_endpgm1631;1632; GFX8-NOOPT-LABEL: dpp_test_f32_imm_comb6:1633; GFX8-NOOPT: ; %bb.0:1634; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1635; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241636; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1637; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301638; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1639; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11640; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11641; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001642; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11643; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31644; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81645; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71646; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61647; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51648; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41649; GFX8-NOOPT-NEXT: s_nop 11650; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:11651; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01652; GFX8-NOOPT-NEXT: s_endpgm1653;1654; GFX10-LABEL: dpp_test_f32_imm_comb6:1655; GFX10: ; %bb.0:1656; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241657; GFX10-NEXT: s_waitcnt lgkmcnt(0)1658; GFX10-NEXT: v_mov_b32_e32 v0, s21659; GFX10-NEXT: v_mov_b32_e32 v1, s31660; GFX10-NEXT: s_mov_b32 s3, 0x310160001661; GFX10-NEXT: s_mov_b32 s2, -11662; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:11663; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01664; GFX10-NEXT: s_endpgm1665;1666; GFX11-LABEL: dpp_test_f32_imm_comb6:1667; GFX11: ; %bb.0:1668; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241669; GFX11-NEXT: s_waitcnt lgkmcnt(0)1670; GFX11-NEXT: v_mov_b32_e32 v0, s21671; GFX11-NEXT: v_mov_b32_e32 v1, s31672; GFX11-NEXT: s_mov_b32 s3, 0x310160001673; GFX11-NEXT: s_mov_b32 s2, -11674; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1675; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:11676; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01677; GFX11-NEXT: s_endpgm1678 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 63, i32 15, i32 15, i1 true)1679 store float %tmp0, ptr addrspace(1) %out1680 ret void1681}1682 1683 1684define amdgpu_kernel void @dpp_test_f32_imm_comb7(ptr addrspace(1) %out, float %in1, float %in2) {1685; GFX8-OPT-LABEL: dpp_test_f32_imm_comb7:1686; GFX8-OPT: ; %bb.0:1687; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241688; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001689; GFX8-OPT-NEXT: s_mov_b32 s6, -11690; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1691; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21692; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31693; GFX8-OPT-NEXT: s_mov_b32 s4, s01694; GFX8-OPT-NEXT: s_mov_b32 s5, s11695; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:11696; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01697; GFX8-OPT-NEXT: s_endpgm1698;1699; GFX8-NOOPT-LABEL: dpp_test_f32_imm_comb7:1700; GFX8-NOOPT: ; %bb.0:1701; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1702; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241703; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1704; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301705; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1706; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11707; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11708; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001709; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11710; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31711; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81712; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71713; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61714; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51715; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41716; GFX8-NOOPT-NEXT: s_nop 11717; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:11718; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01719; GFX8-NOOPT-NEXT: s_endpgm1720;1721; GFX10-LABEL: dpp_test_f32_imm_comb7:1722; GFX10: ; %bb.0:1723; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241724; GFX10-NEXT: s_waitcnt lgkmcnt(0)1725; GFX10-NEXT: v_mov_b32_e32 v0, s21726; GFX10-NEXT: v_mov_b32_e32 v1, s31727; GFX10-NEXT: s_mov_b32 s3, 0x310160001728; GFX10-NEXT: s_mov_b32 s2, -11729; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:11730; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01731; GFX10-NEXT: s_endpgm1732;1733; GFX11-LABEL: dpp_test_f32_imm_comb7:1734; GFX11: ; %bb.0:1735; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241736; GFX11-NEXT: s_waitcnt lgkmcnt(0)1737; GFX11-NEXT: v_mov_b32_e32 v0, s21738; GFX11-NEXT: v_mov_b32_e32 v1, s31739; GFX11-NEXT: s_mov_b32 s3, 0x310160001740; GFX11-NEXT: s_mov_b32 s2, -11741; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1742; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:11743; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01744; GFX11-NEXT: s_endpgm1745 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 64, i32 0, i32 0, i1 true)1746 store float %tmp0, ptr addrspace(1) %out1747 ret void1748}1749 1750define amdgpu_kernel void @dpp_test_f32_imm_comb8(ptr addrspace(1) %out, float %in1, float %in2) {1751; GFX8-OPT-LABEL: dpp_test_f32_imm_comb8:1752; GFX8-OPT: ; %bb.0:1753; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241754; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001755; GFX8-OPT-NEXT: s_mov_b32 s6, -11756; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1757; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21758; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31759; GFX8-OPT-NEXT: s_mov_b32 s4, s01760; GFX8-OPT-NEXT: s_mov_b32 s5, s11761; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:11762; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01763; GFX8-OPT-NEXT: s_endpgm1764;1765; GFX8-NOOPT-LABEL: dpp_test_f32_imm_comb8:1766; GFX8-NOOPT: ; %bb.0:1767; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1768; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241769; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1770; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301771; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1772; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11773; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11774; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001775; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11776; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31777; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81778; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71779; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61780; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51781; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41782; GFX8-NOOPT-NEXT: s_nop 11783; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:11784; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01785; GFX8-NOOPT-NEXT: s_endpgm1786;1787; GFX10-LABEL: dpp_test_f32_imm_comb8:1788; GFX10: ; %bb.0:1789; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241790; GFX10-NEXT: s_waitcnt lgkmcnt(0)1791; GFX10-NEXT: v_mov_b32_e32 v0, s21792; GFX10-NEXT: v_mov_b32_e32 v1, s31793; GFX10-NEXT: s_mov_b32 s3, 0x310160001794; GFX10-NEXT: s_mov_b32 s2, -11795; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:11796; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01797; GFX10-NEXT: s_endpgm1798;1799; GFX11-LABEL: dpp_test_f32_imm_comb8:1800; GFX11: ; %bb.0:1801; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241802; GFX11-NEXT: s_waitcnt lgkmcnt(0)1803; GFX11-NEXT: v_mov_b32_e32 v0, s21804; GFX11-NEXT: v_mov_b32_e32 v1, s31805; GFX11-NEXT: s_mov_b32 s3, 0x310160001806; GFX11-NEXT: s_mov_b32 s2, -11807; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1808; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:11809; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01810; GFX11-NEXT: s_endpgm1811 %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %in1, float %in2, i32 31, i32 15, i32 0, i1 true)1812 store float %tmp0, ptr addrspace(1) %out1813 ret void1814}1815 1816define amdgpu_kernel void @dpp_test_v2i16(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {1817; GFX8-OPT-LABEL: dpp_test_v2i16:1818; GFX8-OPT: ; %bb.0:1819; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241820; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001821; GFX8-OPT-NEXT: s_mov_b32 s6, -11822; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1823; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21824; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31825; GFX8-OPT-NEXT: s_mov_b32 s4, s01826; GFX8-OPT-NEXT: s_mov_b32 s5, s11827; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11828; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01829; GFX8-OPT-NEXT: s_endpgm1830;1831; GFX8-NOOPT-LABEL: dpp_test_v2i16:1832; GFX8-NOOPT: ; %bb.0:1833; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1834; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241835; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1836; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301837; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1838; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11839; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11840; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001841; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11842; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31843; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81844; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71845; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61846; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51847; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41848; GFX8-NOOPT-NEXT: s_nop 11849; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11850; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01851; GFX8-NOOPT-NEXT: s_endpgm1852;1853; GFX10-LABEL: dpp_test_v2i16:1854; GFX10: ; %bb.0:1855; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241856; GFX10-NEXT: s_waitcnt lgkmcnt(0)1857; GFX10-NEXT: v_mov_b32_e32 v0, s21858; GFX10-NEXT: v_mov_b32_e32 v1, s31859; GFX10-NEXT: s_mov_b32 s3, 0x310160001860; GFX10-NEXT: s_mov_b32 s2, -11861; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11862; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01863; GFX10-NEXT: s_endpgm1864;1865; GFX11-LABEL: dpp_test_v2i16:1866; GFX11: ; %bb.0:1867; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241868; GFX11-NEXT: s_waitcnt lgkmcnt(0)1869; GFX11-NEXT: v_mov_b32_e32 v0, s21870; GFX11-NEXT: v_mov_b32_e32 v1, s31871; GFX11-NEXT: s_mov_b32 s3, 0x310160001872; GFX11-NEXT: s_mov_b32 s2, -11873; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1874; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x11875; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01876; GFX11-NEXT: s_endpgm1877 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 1, i32 1, i32 1, i1 false)1878 store <2 x i16> %tmp0, ptr addrspace(1) %out1879 ret void1880}1881 1882define amdgpu_kernel void @dpp_test_v2i16_imm_comb1(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {1883; GFX8-OPT-LABEL: dpp_test_v2i16_imm_comb1:1884; GFX8-OPT: ; %bb.0:1885; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241886; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001887; GFX8-OPT-NEXT: s_mov_b32 s6, -11888; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1889; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21890; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31891; GFX8-OPT-NEXT: s_mov_b32 s4, s01892; GFX8-OPT-NEXT: s_mov_b32 s5, s11893; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x01894; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01895; GFX8-OPT-NEXT: s_endpgm1896;1897; GFX8-NOOPT-LABEL: dpp_test_v2i16_imm_comb1:1898; GFX8-NOOPT: ; %bb.0:1899; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1900; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241901; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1902; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301903; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1904; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11905; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11906; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001907; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11908; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31909; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81910; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71911; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61912; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51913; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41914; GFX8-NOOPT-NEXT: s_nop 11915; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x01916; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01917; GFX8-NOOPT-NEXT: s_endpgm1918;1919; GFX10-LABEL: dpp_test_v2i16_imm_comb1:1920; GFX10: ; %bb.0:1921; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241922; GFX10-NEXT: s_waitcnt lgkmcnt(0)1923; GFX10-NEXT: v_mov_b32_e32 v0, s21924; GFX10-NEXT: v_mov_b32_e32 v1, s31925; GFX10-NEXT: s_mov_b32 s3, 0x310160001926; GFX10-NEXT: s_mov_b32 s2, -11927; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x01928; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01929; GFX10-NEXT: s_endpgm1930;1931; GFX11-LABEL: dpp_test_v2i16_imm_comb1:1932; GFX11: ; %bb.0:1933; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241934; GFX11-NEXT: s_waitcnt lgkmcnt(0)1935; GFX11-NEXT: v_mov_b32_e32 v0, s21936; GFX11-NEXT: v_mov_b32_e32 v1, s31937; GFX11-NEXT: s_mov_b32 s3, 0x310160001938; GFX11-NEXT: s_mov_b32 s2, -11939; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1940; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x01941; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 01942; GFX11-NEXT: s_endpgm1943 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 0, i32 0, i32 0, i1 false)1944 store <2 x i16> %tmp0, ptr addrspace(1) %out1945 ret void1946}1947 1948define amdgpu_kernel void @dpp_test_v2i16_imm_comb2(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {1949; GFX8-OPT-LABEL: dpp_test_v2i16_imm_comb2:1950; GFX8-OPT: ; %bb.0:1951; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241952; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0001953; GFX8-OPT-NEXT: s_mov_b32 s6, -11954; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)1955; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s21956; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s31957; GFX8-OPT-NEXT: s_mov_b32 s4, s01958; GFX8-OPT-NEXT: s_mov_b32 s5, s11959; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x31960; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 01961; GFX8-OPT-NEXT: s_endpgm1962;1963; GFX8-NOOPT-LABEL: dpp_test_v2i16_imm_comb2:1964; GFX8-NOOPT: ; %bb.0:1965; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]1966; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x241967; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c1968; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x301969; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)1970; GFX8-NOOPT-NEXT: s_mov_b32 s8, s11971; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11972; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0001973; GFX8-NOOPT-NEXT: s_mov_b32 s7, -11974; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31975; GFX8-NOOPT-NEXT: s_mov_b32 s1, s81976; GFX8-NOOPT-NEXT: s_mov_b32 s2, s71977; GFX8-NOOPT-NEXT: s_mov_b32 s3, s61978; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s51979; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s41980; GFX8-NOOPT-NEXT: s_nop 11981; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x31982; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 01983; GFX8-NOOPT-NEXT: s_endpgm1984;1985; GFX10-LABEL: dpp_test_v2i16_imm_comb2:1986; GFX10: ; %bb.0:1987; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241988; GFX10-NEXT: s_waitcnt lgkmcnt(0)1989; GFX10-NEXT: v_mov_b32_e32 v0, s21990; GFX10-NEXT: v_mov_b32_e32 v1, s31991; GFX10-NEXT: s_mov_b32 s3, 0x310160001992; GFX10-NEXT: s_mov_b32 s2, -11993; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x31994; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 01995; GFX10-NEXT: s_endpgm1996;1997; GFX11-LABEL: dpp_test_v2i16_imm_comb2:1998; GFX11: ; %bb.0:1999; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242000; GFX11-NEXT: s_waitcnt lgkmcnt(0)2001; GFX11-NEXT: v_mov_b32_e32 v0, s22002; GFX11-NEXT: v_mov_b32_e32 v1, s32003; GFX11-NEXT: s_mov_b32 s3, 0x310160002004; GFX11-NEXT: s_mov_b32 s2, -12005; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2006; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x32007; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02008; GFX11-NEXT: s_endpgm2009 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 3, i32 3, i32 3, i1 false)2010 store <2 x i16> %tmp0, ptr addrspace(1) %out2011 ret void2012}2013 2014define amdgpu_kernel void @dpp_test_v2i16_imm_comb3(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {2015; GFX8-OPT-LABEL: dpp_test_v2i16_imm_comb3:2016; GFX8-OPT: ; %bb.0:2017; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242018; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002019; GFX8-OPT-NEXT: s_mov_b32 s6, -12020; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2021; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22022; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32023; GFX8-OPT-NEXT: s_mov_b32 s4, s02024; GFX8-OPT-NEXT: s_mov_b32 s5, s12025; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:12026; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02027; GFX8-OPT-NEXT: s_endpgm2028;2029; GFX8-NOOPT-LABEL: dpp_test_v2i16_imm_comb3:2030; GFX8-NOOPT: ; %bb.0:2031; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2032; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242033; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2034; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302035; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2036; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12037; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12038; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002039; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12040; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32041; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82042; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72043; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62044; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52045; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42046; GFX8-NOOPT-NEXT: s_nop 12047; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:12048; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02049; GFX8-NOOPT-NEXT: s_endpgm2050;2051; GFX10-LABEL: dpp_test_v2i16_imm_comb3:2052; GFX10: ; %bb.0:2053; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242054; GFX10-NEXT: s_waitcnt lgkmcnt(0)2055; GFX10-NEXT: v_mov_b32_e32 v0, s22056; GFX10-NEXT: v_mov_b32_e32 v1, s32057; GFX10-NEXT: s_mov_b32 s3, 0x310160002058; GFX10-NEXT: s_mov_b32 s2, -12059; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:12060; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02061; GFX10-NEXT: s_endpgm2062;2063; GFX11-LABEL: dpp_test_v2i16_imm_comb3:2064; GFX11: ; %bb.0:2065; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242066; GFX11-NEXT: s_waitcnt lgkmcnt(0)2067; GFX11-NEXT: v_mov_b32_e32 v0, s22068; GFX11-NEXT: v_mov_b32_e32 v1, s32069; GFX11-NEXT: s_mov_b32 s3, 0x310160002070; GFX11-NEXT: s_mov_b32 s2, -12071; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2072; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:12073; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02074; GFX11-NEXT: s_endpgm2075 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 1, i32 2, i32 3, i1 true)2076 store <2 x i16> %tmp0, ptr addrspace(1) %out2077 ret void2078}2079 2080define amdgpu_kernel void @dpp_test_v2i16_imm_comb4(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {2081; GFX8-OPT-LABEL: dpp_test_v2i16_imm_comb4:2082; GFX8-OPT: ; %bb.0:2083; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242084; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002085; GFX8-OPT-NEXT: s_mov_b32 s6, -12086; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2087; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22088; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32089; GFX8-OPT-NEXT: s_mov_b32 s4, s02090; GFX8-OPT-NEXT: s_mov_b32 s5, s12091; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:12092; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02093; GFX8-OPT-NEXT: s_endpgm2094;2095; GFX8-NOOPT-LABEL: dpp_test_v2i16_imm_comb4:2096; GFX8-NOOPT: ; %bb.0:2097; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2098; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242099; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2100; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302101; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2102; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12103; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12104; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002105; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12106; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32107; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82108; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72109; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62110; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52111; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42112; GFX8-NOOPT-NEXT: s_nop 12113; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:12114; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02115; GFX8-NOOPT-NEXT: s_endpgm2116;2117; GFX10-LABEL: dpp_test_v2i16_imm_comb4:2118; GFX10: ; %bb.0:2119; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242120; GFX10-NEXT: s_waitcnt lgkmcnt(0)2121; GFX10-NEXT: v_mov_b32_e32 v0, s22122; GFX10-NEXT: v_mov_b32_e32 v1, s32123; GFX10-NEXT: s_mov_b32 s3, 0x310160002124; GFX10-NEXT: s_mov_b32 s2, -12125; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:12126; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02127; GFX10-NEXT: s_endpgm2128;2129; GFX11-LABEL: dpp_test_v2i16_imm_comb4:2130; GFX11: ; %bb.0:2131; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242132; GFX11-NEXT: s_waitcnt lgkmcnt(0)2133; GFX11-NEXT: v_mov_b32_e32 v0, s22134; GFX11-NEXT: v_mov_b32_e32 v1, s32135; GFX11-NEXT: s_mov_b32 s3, 0x310160002136; GFX11-NEXT: s_mov_b32 s2, -12137; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2138; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:12139; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02140; GFX11-NEXT: s_endpgm2141 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 4, i32 3, i32 2, i1 true)2142 store <2 x i16> %tmp0, ptr addrspace(1) %out2143 ret void2144}2145 2146define amdgpu_kernel void @dpp_test_v2i16_imm_comb5(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {2147; GFX8-OPT-LABEL: dpp_test_v2i16_imm_comb5:2148; GFX8-OPT: ; %bb.0:2149; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242150; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002151; GFX8-OPT-NEXT: s_mov_b32 s6, -12152; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2153; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22154; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32155; GFX8-OPT-NEXT: s_mov_b32 s4, s02156; GFX8-OPT-NEXT: s_mov_b32 s5, s12157; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:12158; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02159; GFX8-OPT-NEXT: s_endpgm2160;2161; GFX8-NOOPT-LABEL: dpp_test_v2i16_imm_comb5:2162; GFX8-NOOPT: ; %bb.0:2163; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2164; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242165; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2166; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302167; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2168; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12169; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12170; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002171; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12172; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32173; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82174; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72175; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62176; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52177; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42178; GFX8-NOOPT-NEXT: s_nop 12179; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:12180; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02181; GFX8-NOOPT-NEXT: s_endpgm2182;2183; GFX10-LABEL: dpp_test_v2i16_imm_comb5:2184; GFX10: ; %bb.0:2185; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242186; GFX10-NEXT: s_waitcnt lgkmcnt(0)2187; GFX10-NEXT: v_mov_b32_e32 v0, s22188; GFX10-NEXT: v_mov_b32_e32 v1, s32189; GFX10-NEXT: s_mov_b32 s3, 0x310160002190; GFX10-NEXT: s_mov_b32 s2, -12191; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:12192; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02193; GFX10-NEXT: s_endpgm2194;2195; GFX11-LABEL: dpp_test_v2i16_imm_comb5:2196; GFX11: ; %bb.0:2197; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242198; GFX11-NEXT: s_waitcnt lgkmcnt(0)2199; GFX11-NEXT: v_mov_b32_e32 v0, s22200; GFX11-NEXT: v_mov_b32_e32 v1, s32201; GFX11-NEXT: s_mov_b32 s3, 0x310160002202; GFX11-NEXT: s_mov_b32 s2, -12203; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2204; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:12205; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02206; GFX11-NEXT: s_endpgm2207 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 63, i32 14, i32 13, i1 true)2208 store <2 x i16> %tmp0, ptr addrspace(1) %out2209 ret void2210}2211 2212define amdgpu_kernel void @dpp_test_v2i16_imm_comb6(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {2213; GFX8-OPT-LABEL: dpp_test_v2i16_imm_comb6:2214; GFX8-OPT: ; %bb.0:2215; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242216; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002217; GFX8-OPT-NEXT: s_mov_b32 s6, -12218; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2219; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22220; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32221; GFX8-OPT-NEXT: s_mov_b32 s4, s02222; GFX8-OPT-NEXT: s_mov_b32 s5, s12223; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:12224; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02225; GFX8-OPT-NEXT: s_endpgm2226;2227; GFX8-NOOPT-LABEL: dpp_test_v2i16_imm_comb6:2228; GFX8-NOOPT: ; %bb.0:2229; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2230; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242231; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2232; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302233; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2234; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12235; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12236; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002237; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12238; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32239; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82240; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72241; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62242; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52243; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42244; GFX8-NOOPT-NEXT: s_nop 12245; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:12246; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02247; GFX8-NOOPT-NEXT: s_endpgm2248;2249; GFX10-LABEL: dpp_test_v2i16_imm_comb6:2250; GFX10: ; %bb.0:2251; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242252; GFX10-NEXT: s_waitcnt lgkmcnt(0)2253; GFX10-NEXT: v_mov_b32_e32 v0, s22254; GFX10-NEXT: v_mov_b32_e32 v1, s32255; GFX10-NEXT: s_mov_b32 s3, 0x310160002256; GFX10-NEXT: s_mov_b32 s2, -12257; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:12258; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02259; GFX10-NEXT: s_endpgm2260;2261; GFX11-LABEL: dpp_test_v2i16_imm_comb6:2262; GFX11: ; %bb.0:2263; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242264; GFX11-NEXT: s_waitcnt lgkmcnt(0)2265; GFX11-NEXT: v_mov_b32_e32 v0, s22266; GFX11-NEXT: v_mov_b32_e32 v1, s32267; GFX11-NEXT: s_mov_b32 s3, 0x310160002268; GFX11-NEXT: s_mov_b32 s2, -12269; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2270; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:12271; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02272; GFX11-NEXT: s_endpgm2273 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 63, i32 15, i32 15, i1 true)2274 store <2 x i16> %tmp0, ptr addrspace(1) %out2275 ret void2276}2277 2278define amdgpu_kernel void @dpp_test_v2i16_imm_comb7(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {2279; GFX8-OPT-LABEL: dpp_test_v2i16_imm_comb7:2280; GFX8-OPT: ; %bb.0:2281; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242282; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002283; GFX8-OPT-NEXT: s_mov_b32 s6, -12284; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2285; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22286; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32287; GFX8-OPT-NEXT: s_mov_b32 s4, s02288; GFX8-OPT-NEXT: s_mov_b32 s5, s12289; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:12290; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02291; GFX8-OPT-NEXT: s_endpgm2292;2293; GFX8-NOOPT-LABEL: dpp_test_v2i16_imm_comb7:2294; GFX8-NOOPT: ; %bb.0:2295; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2296; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242297; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2298; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302299; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2300; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12301; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12302; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002303; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12304; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32305; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82306; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72307; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62308; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52309; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42310; GFX8-NOOPT-NEXT: s_nop 12311; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:12312; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02313; GFX8-NOOPT-NEXT: s_endpgm2314;2315; GFX10-LABEL: dpp_test_v2i16_imm_comb7:2316; GFX10: ; %bb.0:2317; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242318; GFX10-NEXT: s_waitcnt lgkmcnt(0)2319; GFX10-NEXT: v_mov_b32_e32 v0, s22320; GFX10-NEXT: v_mov_b32_e32 v1, s32321; GFX10-NEXT: s_mov_b32 s3, 0x310160002322; GFX10-NEXT: s_mov_b32 s2, -12323; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:12324; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02325; GFX10-NEXT: s_endpgm2326;2327; GFX11-LABEL: dpp_test_v2i16_imm_comb7:2328; GFX11: ; %bb.0:2329; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242330; GFX11-NEXT: s_waitcnt lgkmcnt(0)2331; GFX11-NEXT: v_mov_b32_e32 v0, s22332; GFX11-NEXT: v_mov_b32_e32 v1, s32333; GFX11-NEXT: s_mov_b32 s3, 0x310160002334; GFX11-NEXT: s_mov_b32 s2, -12335; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2336; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:12337; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02338; GFX11-NEXT: s_endpgm2339 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 64, i32 0, i32 0, i1 true)2340 store <2 x i16> %tmp0, ptr addrspace(1) %out2341 ret void2342}2343 2344define amdgpu_kernel void @dpp_test_v2i16_imm_comb8(ptr addrspace(1) %out, <2 x i16> %in1, <2 x i16> %in2) {2345; GFX8-OPT-LABEL: dpp_test_v2i16_imm_comb8:2346; GFX8-OPT: ; %bb.0:2347; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242348; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002349; GFX8-OPT-NEXT: s_mov_b32 s6, -12350; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2351; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22352; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32353; GFX8-OPT-NEXT: s_mov_b32 s4, s02354; GFX8-OPT-NEXT: s_mov_b32 s5, s12355; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:12356; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02357; GFX8-OPT-NEXT: s_endpgm2358;2359; GFX8-NOOPT-LABEL: dpp_test_v2i16_imm_comb8:2360; GFX8-NOOPT: ; %bb.0:2361; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2362; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242363; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2364; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302365; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2366; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12367; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12368; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002369; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12370; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32371; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82372; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72373; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62374; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52375; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42376; GFX8-NOOPT-NEXT: s_nop 12377; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:12378; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02379; GFX8-NOOPT-NEXT: s_endpgm2380;2381; GFX10-LABEL: dpp_test_v2i16_imm_comb8:2382; GFX10: ; %bb.0:2383; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242384; GFX10-NEXT: s_waitcnt lgkmcnt(0)2385; GFX10-NEXT: v_mov_b32_e32 v0, s22386; GFX10-NEXT: v_mov_b32_e32 v1, s32387; GFX10-NEXT: s_mov_b32 s3, 0x310160002388; GFX10-NEXT: s_mov_b32 s2, -12389; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:12390; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02391; GFX10-NEXT: s_endpgm2392;2393; GFX11-LABEL: dpp_test_v2i16_imm_comb8:2394; GFX11: ; %bb.0:2395; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242396; GFX11-NEXT: s_waitcnt lgkmcnt(0)2397; GFX11-NEXT: v_mov_b32_e32 v0, s22398; GFX11-NEXT: v_mov_b32_e32 v1, s32399; GFX11-NEXT: s_mov_b32 s3, 0x310160002400; GFX11-NEXT: s_mov_b32 s2, -12401; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2402; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:12403; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02404; GFX11-NEXT: s_endpgm2405 %tmp0 = call <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16> %in1, <2 x i16> %in2, i32 31, i32 15, i32 0, i1 true)2406 store <2 x i16> %tmp0, ptr addrspace(1) %out2407 ret void2408}2409 2410define amdgpu_kernel void @dpp_test_v2f16(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2411; GFX8-OPT-LABEL: dpp_test_v2f16:2412; GFX8-OPT: ; %bb.0:2413; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242414; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002415; GFX8-OPT-NEXT: s_mov_b32 s6, -12416; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2417; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22418; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32419; GFX8-OPT-NEXT: s_mov_b32 s4, s02420; GFX8-OPT-NEXT: s_mov_b32 s5, s12421; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x12422; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02423; GFX8-OPT-NEXT: s_endpgm2424;2425; GFX8-NOOPT-LABEL: dpp_test_v2f16:2426; GFX8-NOOPT: ; %bb.0:2427; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2428; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242429; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2430; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302431; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2432; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12433; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12434; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002435; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12436; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32437; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82438; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72439; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62440; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52441; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42442; GFX8-NOOPT-NEXT: s_nop 12443; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x12444; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02445; GFX8-NOOPT-NEXT: s_endpgm2446;2447; GFX10-LABEL: dpp_test_v2f16:2448; GFX10: ; %bb.0:2449; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242450; GFX10-NEXT: s_waitcnt lgkmcnt(0)2451; GFX10-NEXT: v_mov_b32_e32 v0, s22452; GFX10-NEXT: v_mov_b32_e32 v1, s32453; GFX10-NEXT: s_mov_b32 s3, 0x310160002454; GFX10-NEXT: s_mov_b32 s2, -12455; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x12456; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02457; GFX10-NEXT: s_endpgm2458;2459; GFX11-LABEL: dpp_test_v2f16:2460; GFX11: ; %bb.0:2461; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242462; GFX11-NEXT: s_waitcnt lgkmcnt(0)2463; GFX11-NEXT: v_mov_b32_e32 v0, s22464; GFX11-NEXT: v_mov_b32_e32 v1, s32465; GFX11-NEXT: s_mov_b32 s3, 0x310160002466; GFX11-NEXT: s_mov_b32 s2, -12467; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2468; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x12469; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02470; GFX11-NEXT: s_endpgm2471 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 1, i32 1, i32 1, i1 false)2472 store <2 x half> %tmp0, ptr addrspace(1) %out2473 ret void2474}2475 2476define amdgpu_kernel void @dpp_test_v2f16_imm_comb1(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2477; GFX8-OPT-LABEL: dpp_test_v2f16_imm_comb1:2478; GFX8-OPT: ; %bb.0:2479; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242480; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002481; GFX8-OPT-NEXT: s_mov_b32 s6, -12482; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2483; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22484; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32485; GFX8-OPT-NEXT: s_mov_b32 s4, s02486; GFX8-OPT-NEXT: s_mov_b32 s5, s12487; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x02488; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02489; GFX8-OPT-NEXT: s_endpgm2490;2491; GFX8-NOOPT-LABEL: dpp_test_v2f16_imm_comb1:2492; GFX8-NOOPT: ; %bb.0:2493; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2494; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242495; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2496; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302497; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2498; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12499; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12500; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002501; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12502; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32503; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82504; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72505; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62506; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52507; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42508; GFX8-NOOPT-NEXT: s_nop 12509; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x02510; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02511; GFX8-NOOPT-NEXT: s_endpgm2512;2513; GFX10-LABEL: dpp_test_v2f16_imm_comb1:2514; GFX10: ; %bb.0:2515; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242516; GFX10-NEXT: s_waitcnt lgkmcnt(0)2517; GFX10-NEXT: v_mov_b32_e32 v0, s22518; GFX10-NEXT: v_mov_b32_e32 v1, s32519; GFX10-NEXT: s_mov_b32 s3, 0x310160002520; GFX10-NEXT: s_mov_b32 s2, -12521; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x02522; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02523; GFX10-NEXT: s_endpgm2524;2525; GFX11-LABEL: dpp_test_v2f16_imm_comb1:2526; GFX11: ; %bb.0:2527; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242528; GFX11-NEXT: s_waitcnt lgkmcnt(0)2529; GFX11-NEXT: v_mov_b32_e32 v0, s22530; GFX11-NEXT: v_mov_b32_e32 v1, s32531; GFX11-NEXT: s_mov_b32 s3, 0x310160002532; GFX11-NEXT: s_mov_b32 s2, -12533; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2534; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,0] row_mask:0x0 bank_mask:0x02535; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02536; GFX11-NEXT: s_endpgm2537 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 0, i32 0, i32 0, i1 false)2538 store <2 x half> %tmp0, ptr addrspace(1) %out2539 ret void2540}2541 2542define amdgpu_kernel void @dpp_test_v2f16_imm_comb2(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2543; GFX8-OPT-LABEL: dpp_test_v2f16_imm_comb2:2544; GFX8-OPT: ; %bb.0:2545; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242546; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002547; GFX8-OPT-NEXT: s_mov_b32 s6, -12548; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2549; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22550; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32551; GFX8-OPT-NEXT: s_mov_b32 s4, s02552; GFX8-OPT-NEXT: s_mov_b32 s5, s12553; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x32554; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02555; GFX8-OPT-NEXT: s_endpgm2556;2557; GFX8-NOOPT-LABEL: dpp_test_v2f16_imm_comb2:2558; GFX8-NOOPT: ; %bb.0:2559; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2560; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242561; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2562; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302563; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2564; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12565; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12566; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002567; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12568; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32569; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82570; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72571; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62572; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52573; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42574; GFX8-NOOPT-NEXT: s_nop 12575; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x32576; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02577; GFX8-NOOPT-NEXT: s_endpgm2578;2579; GFX10-LABEL: dpp_test_v2f16_imm_comb2:2580; GFX10: ; %bb.0:2581; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242582; GFX10-NEXT: s_waitcnt lgkmcnt(0)2583; GFX10-NEXT: v_mov_b32_e32 v0, s22584; GFX10-NEXT: v_mov_b32_e32 v1, s32585; GFX10-NEXT: s_mov_b32 s3, 0x310160002586; GFX10-NEXT: s_mov_b32 s2, -12587; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x32588; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02589; GFX10-NEXT: s_endpgm2590;2591; GFX11-LABEL: dpp_test_v2f16_imm_comb2:2592; GFX11: ; %bb.0:2593; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242594; GFX11-NEXT: s_waitcnt lgkmcnt(0)2595; GFX11-NEXT: v_mov_b32_e32 v0, s22596; GFX11-NEXT: v_mov_b32_e32 v1, s32597; GFX11-NEXT: s_mov_b32 s3, 0x310160002598; GFX11-NEXT: s_mov_b32 s2, -12599; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2600; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,0,0,0] row_mask:0x3 bank_mask:0x32601; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02602; GFX11-NEXT: s_endpgm2603 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 3, i32 3, i32 3, i1 false)2604 store <2 x half> %tmp0, ptr addrspace(1) %out2605 ret void2606}2607 2608define amdgpu_kernel void @dpp_test_v2f16_imm_comb3(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2609; GFX8-OPT-LABEL: dpp_test_v2f16_imm_comb3:2610; GFX8-OPT: ; %bb.0:2611; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242612; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002613; GFX8-OPT-NEXT: s_mov_b32 s6, -12614; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2615; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22616; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32617; GFX8-OPT-NEXT: s_mov_b32 s4, s02618; GFX8-OPT-NEXT: s_mov_b32 s5, s12619; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:12620; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02621; GFX8-OPT-NEXT: s_endpgm2622;2623; GFX8-NOOPT-LABEL: dpp_test_v2f16_imm_comb3:2624; GFX8-NOOPT: ; %bb.0:2625; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2626; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242627; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2628; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302629; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2630; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12631; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12632; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002633; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12634; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32635; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82636; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72637; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62638; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52639; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42640; GFX8-NOOPT-NEXT: s_nop 12641; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:12642; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02643; GFX8-NOOPT-NEXT: s_endpgm2644;2645; GFX10-LABEL: dpp_test_v2f16_imm_comb3:2646; GFX10: ; %bb.0:2647; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242648; GFX10-NEXT: s_waitcnt lgkmcnt(0)2649; GFX10-NEXT: v_mov_b32_e32 v0, s22650; GFX10-NEXT: v_mov_b32_e32 v1, s32651; GFX10-NEXT: s_mov_b32 s3, 0x310160002652; GFX10-NEXT: s_mov_b32 s2, -12653; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:12654; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02655; GFX10-NEXT: s_endpgm2656;2657; GFX11-LABEL: dpp_test_v2f16_imm_comb3:2658; GFX11: ; %bb.0:2659; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242660; GFX11-NEXT: s_waitcnt lgkmcnt(0)2661; GFX11-NEXT: v_mov_b32_e32 v0, s22662; GFX11-NEXT: v_mov_b32_e32 v1, s32663; GFX11-NEXT: s_mov_b32 s3, 0x310160002664; GFX11-NEXT: s_mov_b32 s2, -12665; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2666; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[1,0,0,0] row_mask:0x2 bank_mask:0x3 bound_ctrl:12667; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02668; GFX11-NEXT: s_endpgm2669 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 1, i32 2, i32 3, i1 true)2670 store <2 x half> %tmp0, ptr addrspace(1) %out2671 ret void2672}2673 2674define amdgpu_kernel void @dpp_test_v2f16_imm_comb4(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2675; GFX8-OPT-LABEL: dpp_test_v2f16_imm_comb4:2676; GFX8-OPT: ; %bb.0:2677; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242678; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002679; GFX8-OPT-NEXT: s_mov_b32 s6, -12680; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2681; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22682; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32683; GFX8-OPT-NEXT: s_mov_b32 s4, s02684; GFX8-OPT-NEXT: s_mov_b32 s5, s12685; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:12686; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02687; GFX8-OPT-NEXT: s_endpgm2688;2689; GFX8-NOOPT-LABEL: dpp_test_v2f16_imm_comb4:2690; GFX8-NOOPT: ; %bb.0:2691; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2692; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242693; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2694; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302695; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2696; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12697; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12698; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002699; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12700; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32701; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82702; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72703; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62704; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52705; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42706; GFX8-NOOPT-NEXT: s_nop 12707; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:12708; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02709; GFX8-NOOPT-NEXT: s_endpgm2710;2711; GFX10-LABEL: dpp_test_v2f16_imm_comb4:2712; GFX10: ; %bb.0:2713; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242714; GFX10-NEXT: s_waitcnt lgkmcnt(0)2715; GFX10-NEXT: v_mov_b32_e32 v0, s22716; GFX10-NEXT: v_mov_b32_e32 v1, s32717; GFX10-NEXT: s_mov_b32 s3, 0x310160002718; GFX10-NEXT: s_mov_b32 s2, -12719; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:12720; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02721; GFX10-NEXT: s_endpgm2722;2723; GFX11-LABEL: dpp_test_v2f16_imm_comb4:2724; GFX11: ; %bb.0:2725; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242726; GFX11-NEXT: s_waitcnt lgkmcnt(0)2727; GFX11-NEXT: v_mov_b32_e32 v0, s22728; GFX11-NEXT: v_mov_b32_e32 v1, s32729; GFX11-NEXT: s_mov_b32 s3, 0x310160002730; GFX11-NEXT: s_mov_b32 s2, -12731; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2732; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,1,0,0] row_mask:0x3 bank_mask:0x2 bound_ctrl:12733; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02734; GFX11-NEXT: s_endpgm2735 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 4, i32 3, i32 2, i1 true)2736 store <2 x half> %tmp0, ptr addrspace(1) %out2737 ret void2738}2739 2740define amdgpu_kernel void @dpp_test_v2f16_imm_comb5(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2741; GFX8-OPT-LABEL: dpp_test_v2f16_imm_comb5:2742; GFX8-OPT: ; %bb.0:2743; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242744; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002745; GFX8-OPT-NEXT: s_mov_b32 s6, -12746; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2747; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22748; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32749; GFX8-OPT-NEXT: s_mov_b32 s4, s02750; GFX8-OPT-NEXT: s_mov_b32 s5, s12751; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:12752; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02753; GFX8-OPT-NEXT: s_endpgm2754;2755; GFX8-NOOPT-LABEL: dpp_test_v2f16_imm_comb5:2756; GFX8-NOOPT: ; %bb.0:2757; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2758; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242759; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2760; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302761; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2762; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12763; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12764; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002765; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12766; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32767; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82768; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72769; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62770; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52771; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42772; GFX8-NOOPT-NEXT: s_nop 12773; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:12774; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02775; GFX8-NOOPT-NEXT: s_endpgm2776;2777; GFX10-LABEL: dpp_test_v2f16_imm_comb5:2778; GFX10: ; %bb.0:2779; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242780; GFX10-NEXT: s_waitcnt lgkmcnt(0)2781; GFX10-NEXT: v_mov_b32_e32 v0, s22782; GFX10-NEXT: v_mov_b32_e32 v1, s32783; GFX10-NEXT: s_mov_b32 s3, 0x310160002784; GFX10-NEXT: s_mov_b32 s2, -12785; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:12786; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02787; GFX10-NEXT: s_endpgm2788;2789; GFX11-LABEL: dpp_test_v2f16_imm_comb5:2790; GFX11: ; %bb.0:2791; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242792; GFX11-NEXT: s_waitcnt lgkmcnt(0)2793; GFX11-NEXT: v_mov_b32_e32 v0, s22794; GFX11-NEXT: v_mov_b32_e32 v1, s32795; GFX11-NEXT: s_mov_b32 s3, 0x310160002796; GFX11-NEXT: s_mov_b32 s2, -12797; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2798; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xe bank_mask:0xd bound_ctrl:12799; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02800; GFX11-NEXT: s_endpgm2801 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 63, i32 14, i32 13, i1 true)2802 store <2 x half> %tmp0, ptr addrspace(1) %out2803 ret void2804}2805 2806define amdgpu_kernel void @dpp_test_v2f16_imm_comb6(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2807; GFX8-OPT-LABEL: dpp_test_v2f16_imm_comb6:2808; GFX8-OPT: ; %bb.0:2809; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242810; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002811; GFX8-OPT-NEXT: s_mov_b32 s6, -12812; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2813; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22814; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32815; GFX8-OPT-NEXT: s_mov_b32 s4, s02816; GFX8-OPT-NEXT: s_mov_b32 s5, s12817; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:12818; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02819; GFX8-OPT-NEXT: s_endpgm2820;2821; GFX8-NOOPT-LABEL: dpp_test_v2f16_imm_comb6:2822; GFX8-NOOPT: ; %bb.0:2823; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2824; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242825; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2826; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302827; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2828; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12829; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12830; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002831; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12832; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32833; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82834; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72835; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62836; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52837; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42838; GFX8-NOOPT-NEXT: s_nop 12839; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:12840; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02841; GFX8-NOOPT-NEXT: s_endpgm2842;2843; GFX10-LABEL: dpp_test_v2f16_imm_comb6:2844; GFX10: ; %bb.0:2845; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242846; GFX10-NEXT: s_waitcnt lgkmcnt(0)2847; GFX10-NEXT: v_mov_b32_e32 v0, s22848; GFX10-NEXT: v_mov_b32_e32 v1, s32849; GFX10-NEXT: s_mov_b32 s3, 0x310160002850; GFX10-NEXT: s_mov_b32 s2, -12851; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:12852; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02853; GFX10-NEXT: s_endpgm2854;2855; GFX11-LABEL: dpp_test_v2f16_imm_comb6:2856; GFX11: ; %bb.0:2857; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242858; GFX11-NEXT: s_waitcnt lgkmcnt(0)2859; GFX11-NEXT: v_mov_b32_e32 v0, s22860; GFX11-NEXT: v_mov_b32_e32 v1, s32861; GFX11-NEXT: s_mov_b32 s3, 0x310160002862; GFX11-NEXT: s_mov_b32 s2, -12863; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2864; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,3,0] row_mask:0xf bank_mask:0xf bound_ctrl:12865; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02866; GFX11-NEXT: s_endpgm2867 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 63, i32 15, i32 15, i1 true)2868 store <2 x half> %tmp0, ptr addrspace(1) %out2869 ret void2870}2871 2872define amdgpu_kernel void @dpp_test_v2f16_imm_comb7(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2873; GFX8-OPT-LABEL: dpp_test_v2f16_imm_comb7:2874; GFX8-OPT: ; %bb.0:2875; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242876; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002877; GFX8-OPT-NEXT: s_mov_b32 s6, -12878; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2879; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22880; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32881; GFX8-OPT-NEXT: s_mov_b32 s4, s02882; GFX8-OPT-NEXT: s_mov_b32 s5, s12883; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:12884; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02885; GFX8-OPT-NEXT: s_endpgm2886;2887; GFX8-NOOPT-LABEL: dpp_test_v2f16_imm_comb7:2888; GFX8-NOOPT: ; %bb.0:2889; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2890; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242891; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2892; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302893; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2894; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12895; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12896; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002897; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12898; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32899; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82900; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72901; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62902; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52903; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42904; GFX8-NOOPT-NEXT: s_nop 12905; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:12906; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02907; GFX8-NOOPT-NEXT: s_endpgm2908;2909; GFX10-LABEL: dpp_test_v2f16_imm_comb7:2910; GFX10: ; %bb.0:2911; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242912; GFX10-NEXT: s_waitcnt lgkmcnt(0)2913; GFX10-NEXT: v_mov_b32_e32 v0, s22914; GFX10-NEXT: v_mov_b32_e32 v1, s32915; GFX10-NEXT: s_mov_b32 s3, 0x310160002916; GFX10-NEXT: s_mov_b32 s2, -12917; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:12918; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02919; GFX10-NEXT: s_endpgm2920;2921; GFX11-LABEL: dpp_test_v2f16_imm_comb7:2922; GFX11: ; %bb.0:2923; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242924; GFX11-NEXT: s_waitcnt lgkmcnt(0)2925; GFX11-NEXT: v_mov_b32_e32 v0, s22926; GFX11-NEXT: v_mov_b32_e32 v1, s32927; GFX11-NEXT: s_mov_b32 s3, 0x310160002928; GFX11-NEXT: s_mov_b32 s2, -12929; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2930; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[0,0,0,1] row_mask:0x0 bank_mask:0x0 bound_ctrl:12931; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02932; GFX11-NEXT: s_endpgm2933 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 64, i32 0, i32 0, i1 true)2934 store <2 x half> %tmp0, ptr addrspace(1) %out2935 ret void2936}2937 2938define amdgpu_kernel void @dpp_test_v2f16_imm_comb8(ptr addrspace(1) %out, <2 x half> %in1, <2 x half> %in2) {2939; GFX8-OPT-LABEL: dpp_test_v2f16_imm_comb8:2940; GFX8-OPT: ; %bb.0:2941; GFX8-OPT-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242942; GFX8-OPT-NEXT: s_mov_b32 s7, 0xf0002943; GFX8-OPT-NEXT: s_mov_b32 s6, -12944; GFX8-OPT-NEXT: s_waitcnt lgkmcnt(0)2945; GFX8-OPT-NEXT: v_mov_b32_e32 v0, s22946; GFX8-OPT-NEXT: v_mov_b32_e32 v1, s32947; GFX8-OPT-NEXT: s_mov_b32 s4, s02948; GFX8-OPT-NEXT: s_mov_b32 s5, s12949; GFX8-OPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:12950; GFX8-OPT-NEXT: buffer_store_dword v0, off, s[4:7], 02951; GFX8-OPT-NEXT: s_endpgm2952;2953; GFX8-NOOPT-LABEL: dpp_test_v2f16_imm_comb8:2954; GFX8-NOOPT: ; %bb.0:2955; GFX8-NOOPT-NEXT: s_mov_b64 s[2:3], s[4:5]2956; GFX8-NOOPT-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x242957; GFX8-NOOPT-NEXT: s_load_dword s5, s[2:3], 0x2c2958; GFX8-NOOPT-NEXT: s_load_dword s4, s[2:3], 0x302959; GFX8-NOOPT-NEXT: s_waitcnt lgkmcnt(0)2960; GFX8-NOOPT-NEXT: s_mov_b32 s8, s12961; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12962; GFX8-NOOPT-NEXT: s_mov_b32 s6, 0xf0002963; GFX8-NOOPT-NEXT: s_mov_b32 s7, -12964; GFX8-NOOPT-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32965; GFX8-NOOPT-NEXT: s_mov_b32 s1, s82966; GFX8-NOOPT-NEXT: s_mov_b32 s2, s72967; GFX8-NOOPT-NEXT: s_mov_b32 s3, s62968; GFX8-NOOPT-NEXT: v_mov_b32_e32 v0, s52969; GFX8-NOOPT-NEXT: v_mov_b32_e32 v1, s42970; GFX8-NOOPT-NEXT: s_nop 12971; GFX8-NOOPT-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:12972; GFX8-NOOPT-NEXT: buffer_store_dword v0, off, s[0:3], 02973; GFX8-NOOPT-NEXT: s_endpgm2974;2975; GFX10-LABEL: dpp_test_v2f16_imm_comb8:2976; GFX10: ; %bb.0:2977; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242978; GFX10-NEXT: s_waitcnt lgkmcnt(0)2979; GFX10-NEXT: v_mov_b32_e32 v0, s22980; GFX10-NEXT: v_mov_b32_e32 v1, s32981; GFX10-NEXT: s_mov_b32 s3, 0x310160002982; GFX10-NEXT: s_mov_b32 s2, -12983; GFX10-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:12984; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 02985; GFX10-NEXT: s_endpgm2986;2987; GFX11-LABEL: dpp_test_v2f16_imm_comb8:2988; GFX11: ; %bb.0:2989; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242990; GFX11-NEXT: s_waitcnt lgkmcnt(0)2991; GFX11-NEXT: v_mov_b32_e32 v0, s22992; GFX11-NEXT: v_mov_b32_e32 v1, s32993; GFX11-NEXT: s_mov_b32 s3, 0x310160002994; GFX11-NEXT: s_mov_b32 s2, -12995; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2996; GFX11-NEXT: v_mov_b32_dpp v0, v1 quad_perm:[3,3,1,0] row_mask:0xf bank_mask:0x0 bound_ctrl:12997; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 02998; GFX11-NEXT: s_endpgm2999 %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> %in1, <2 x half> %in2, i32 31, i32 15, i32 0, i1 true)3000 store <2 x half> %tmp0, ptr addrspace(1) %out3001 ret void3002}3003 3004declare i32 @llvm.amdgcn.workitem.id.x()3005declare void @llvm.amdgcn.s.barrier()3006declare i32 @llvm.amdgcn.update.dpp.i32(i32, i32, i32, i32, i32, i1) #03007declare <2 x i16> @llvm.amdgcn.update.dpp.v2i16(<2 x i16>, <2 x i16>, i32, i32, i32, i1) #03008declare <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half>, <2 x half>, i32, i32, i32, i1) #03009declare float @llvm.amdgcn.update.dpp.f32(float, float, i32, i32, i32, i1) #03010declare i64 @llvm.amdgcn.update.dpp.i64(i64, i64, i32, i32, i32, i1) #03011 3012attributes #0 = { nounwind readnone convergent }3013;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3014; GCN: {{.*}}3015; GCN-OPT: {{.*}}3016; GFX8: {{.*}}3017