785 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12-SDAG %s3; RUN: llc -global-isel=1 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12-GISEL %s4 5declare i32 @llvm.amdgcn.permlane16.var(i32, i32, i32, i1, i1)6declare i32 @llvm.amdgcn.permlanex16.var(i32, i32, i32, i1, i1)7declare i32 @llvm.amdgcn.workitem.id.x()8declare i32 @llvm.amdgcn.workitem.id.y()9 10define amdgpu_kernel void @v_permlane16var_b32_vv(ptr addrspace(1) %out, i32 %src0, i32 %src1) {11; GFX12-SDAG-LABEL: v_permlane16var_b32_vv:12; GFX12-SDAG: ; %bb.0:13; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x2414; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 015; GFX12-SDAG-NEXT: s_wait_kmcnt 0x016; GFX12-SDAG-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s317; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)18; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v119; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]20; GFX12-SDAG-NEXT: s_endpgm21;22; GFX12-GISEL-LABEL: v_permlane16var_b32_vv:23; GFX12-GISEL: ; %bb.0:24; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x2425; GFX12-GISEL-NEXT: s_wait_kmcnt 0x026; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s327; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)28; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v129; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 030; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]31; GFX12-GISEL-NEXT: s_endpgm32 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %src0, i32 %src0, i32 %src1, i1 false, i1 false)33 store i32 %v, ptr addrspace(1) %out34 ret void35}36 37define amdgpu_kernel void @v_permlane16var_b32_vi(ptr addrspace(1) %out, i32 %src0) {38; GFX12-SDAG-LABEL: v_permlane16var_b32_vi:39; GFX12-SDAG: ; %bb.0:40; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x2441; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 142; GFX12-SDAG-NEXT: s_wait_kmcnt 0x043; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s244; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)45; GFX12-SDAG-NEXT: v_permlane16_var_b32 v1, v1, v046; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[0:1]47; GFX12-SDAG-NEXT: s_endpgm48;49; GFX12-GISEL-LABEL: v_permlane16var_b32_vi:50; GFX12-GISEL: ; %bb.0:51; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x2452; GFX12-GISEL-NEXT: s_wait_kmcnt 0x053; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, s254; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)55; GFX12-GISEL-NEXT: v_permlane16_var_b32 v1, v1, v056; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 057; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[0:1]58; GFX12-GISEL-NEXT: s_endpgm59 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %src0, i32 %src0, i32 1, i1 false, i1 false)60 store i32 %v, ptr addrspace(1) %out61 ret void62}63 64define amdgpu_kernel void @v_permlane16var_b32_vl(ptr addrspace(1) %out, i32 %src0) {65; GFX12-SDAG-LABEL: v_permlane16var_b32_vl:66; GFX12-SDAG: ; %bb.0:67; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x2468; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 0xc1d169; GFX12-SDAG-NEXT: s_wait_kmcnt 0x070; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s271; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)72; GFX12-SDAG-NEXT: v_permlane16_var_b32 v1, v1, v073; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[0:1]74; GFX12-SDAG-NEXT: s_endpgm75;76; GFX12-GISEL-LABEL: v_permlane16var_b32_vl:77; GFX12-GISEL: ; %bb.0:78; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x2479; GFX12-GISEL-NEXT: s_wait_kmcnt 0x080; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, 0xc1d1 :: v_dual_mov_b32 v1, s281; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)82; GFX12-GISEL-NEXT: v_permlane16_var_b32 v1, v1, v083; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 084; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[0:1]85; GFX12-GISEL-NEXT: s_endpgm86 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %src0, i32 %src0, i32 49617, i1 false, i1 false)87 store i32 %v, ptr addrspace(1) %out88 ret void89}90 91define amdgpu_kernel void @v_permlane16var_b32_vvv(ptr addrspace(1) %out, i32 %src0) {92; GFX12-SDAG-LABEL: v_permlane16var_b32_vvv:93; GFX12-SDAG: ; %bb.0:94; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x2495; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v096; GFX12-SDAG-NEXT: s_wait_kmcnt 0x097; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s298; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)99; GFX12-SDAG-NEXT: v_permlane16_var_b32 v1, v1, v0100; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[0:1]101; GFX12-SDAG-NEXT: s_endpgm102;103; GFX12-GISEL-LABEL: v_permlane16var_b32_vvv:104; GFX12-GISEL: ; %bb.0:105; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x24106; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0107; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0108; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)109; GFX12-GISEL-NEXT: v_permlane16_var_b32 v1, v1, v0110; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 0111; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[0:1]112; GFX12-GISEL-NEXT: s_endpgm113 %tidx = call i32 @llvm.amdgcn.workitem.id.x()114 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %src0, i32 %src0, i32 %tidx, i1 false, i1 false)115 store i32 %v, ptr addrspace(1) %out116 ret void117}118 119define amdgpu_kernel void @v_permlane16var_b32_vv_fi(ptr addrspace(1) %out, i32 %src0, i32 %src1) {120; GFX12-SDAG-LABEL: v_permlane16var_b32_vv_fi:121; GFX12-SDAG: ; %bb.0:122; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24123; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 0124; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0125; GFX12-SDAG-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3126; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)127; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[1,0]128; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]129; GFX12-SDAG-NEXT: s_endpgm130;131; GFX12-GISEL-LABEL: v_permlane16var_b32_vv_fi:132; GFX12-GISEL: ; %bb.0:133; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24134; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0135; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3136; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)137; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[1,0]138; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0139; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]140; GFX12-GISEL-NEXT: s_endpgm141 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %src0, i32 %src0, i32 %src1, i1 true, i1 false)142 store i32 %v, ptr addrspace(1) %out143 ret void144}145 146define amdgpu_kernel void @v_permlane16var_b32_vv_bc(ptr addrspace(1) %out, i32 %src0, i32 %src1) {147; GFX12-SDAG-LABEL: v_permlane16var_b32_vv_bc:148; GFX12-SDAG: ; %bb.0:149; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24150; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 0151; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0152; GFX12-SDAG-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3153; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)154; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[0,1]155; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]156; GFX12-SDAG-NEXT: s_endpgm157;158; GFX12-GISEL-LABEL: v_permlane16var_b32_vv_bc:159; GFX12-GISEL: ; %bb.0:160; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24161; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0162; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3163; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)164; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[0,1]165; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0166; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]167; GFX12-GISEL-NEXT: s_endpgm168 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %src0, i32 %src0, i32 %src1, i1 false, i1 true)169 store i32 %v, ptr addrspace(1) %out170 ret void171}172 173define amdgpu_kernel void @v_permlane16var_b32_vv_fi_bc(ptr addrspace(1) %out, i32 %src0, i32 %src1) {174; GFX12-SDAG-LABEL: v_permlane16var_b32_vv_fi_bc:175; GFX12-SDAG: ; %bb.0:176; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24177; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 0178; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0179; GFX12-SDAG-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3180; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)181; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[1,1]182; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]183; GFX12-SDAG-NEXT: s_endpgm184;185; GFX12-GISEL-LABEL: v_permlane16var_b32_vv_fi_bc:186; GFX12-GISEL: ; %bb.0:187; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24188; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0189; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3190; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)191; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[1,1]192; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0193; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]194; GFX12-GISEL-NEXT: s_endpgm195 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %src0, i32 %src0, i32 %src1, i1 true, i1 true)196 store i32 %v, ptr addrspace(1) %out197 ret void198}199 200define amdgpu_kernel void @v_permlanex16var_b32_vv(ptr addrspace(1) %out, i32 %src0, i32 %src1) {201; GFX12-SDAG-LABEL: v_permlanex16var_b32_vv:202; GFX12-SDAG: ; %bb.0:203; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24204; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 0205; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0206; GFX12-SDAG-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3207; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)208; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1209; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]210; GFX12-SDAG-NEXT: s_endpgm211;212; GFX12-GISEL-LABEL: v_permlanex16var_b32_vv:213; GFX12-GISEL: ; %bb.0:214; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24215; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0216; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3217; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)218; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1219; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0220; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]221; GFX12-GISEL-NEXT: s_endpgm222 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %src0, i32 %src0, i32 %src1, i1 false, i1 false)223 store i32 %v, ptr addrspace(1) %out224 ret void225}226 227define amdgpu_kernel void @v_permlanex16var_b32_vi(ptr addrspace(1) %out, i32 %src0) {228; GFX12-SDAG-LABEL: v_permlanex16var_b32_vi:229; GFX12-SDAG: ; %bb.0:230; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x24231; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 1232; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0233; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2234; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)235; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v1, v1, v0236; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[0:1]237; GFX12-SDAG-NEXT: s_endpgm238;239; GFX12-GISEL-LABEL: v_permlanex16var_b32_vi:240; GFX12-GISEL: ; %bb.0:241; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x24242; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0243; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, s2244; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)245; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v1, v1, v0246; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 0247; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[0:1]248; GFX12-GISEL-NEXT: s_endpgm249 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %src0, i32 %src0, i32 1, i1 false, i1 false)250 store i32 %v, ptr addrspace(1) %out251 ret void252}253 254define amdgpu_kernel void @v_permlanex16var_b32_vl(ptr addrspace(1) %out, i32 %src0) {255; GFX12-SDAG-LABEL: v_permlanex16var_b32_vl:256; GFX12-SDAG: ; %bb.0:257; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x24258; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 0xc1d1259; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0260; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2261; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)262; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v1, v1, v0263; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[0:1]264; GFX12-SDAG-NEXT: s_endpgm265;266; GFX12-GISEL-LABEL: v_permlanex16var_b32_vl:267; GFX12-GISEL: ; %bb.0:268; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x24269; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0270; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, 0xc1d1 :: v_dual_mov_b32 v1, s2271; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)272; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v1, v1, v0273; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 0274; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[0:1]275; GFX12-GISEL-NEXT: s_endpgm276 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %src0, i32 %src0, i32 49617, i1 false, i1 false)277 store i32 %v, ptr addrspace(1) %out278 ret void279}280 281define amdgpu_kernel void @v_permlanex16var_b32_vvv(ptr addrspace(1) %out, i32 %src0) {282; GFX12-SDAG-LABEL: v_permlanex16var_b32_vvv:283; GFX12-SDAG: ; %bb.0:284; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x24285; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0286; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0287; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2288; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)289; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v1, v1, v0290; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[0:1]291; GFX12-SDAG-NEXT: s_endpgm292;293; GFX12-GISEL-LABEL: v_permlanex16var_b32_vvv:294; GFX12-GISEL: ; %bb.0:295; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x24296; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0297; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0298; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)299; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v1, v1, v0300; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 0301; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[0:1]302; GFX12-GISEL-NEXT: s_endpgm303 %tidx = call i32 @llvm.amdgcn.workitem.id.x()304 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %src0, i32 %src0, i32 %tidx, i1 false, i1 false)305 store i32 %v, ptr addrspace(1) %out306 ret void307}308 309define amdgpu_kernel void @v_permlanex16var_b32_vv_fi(ptr addrspace(1) %out, i32 %src0, i32 %src1) {310; GFX12-SDAG-LABEL: v_permlanex16var_b32_vv_fi:311; GFX12-SDAG: ; %bb.0:312; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24313; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 0314; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0315; GFX12-SDAG-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3316; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)317; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[1,0]318; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]319; GFX12-SDAG-NEXT: s_endpgm320;321; GFX12-GISEL-LABEL: v_permlanex16var_b32_vv_fi:322; GFX12-GISEL: ; %bb.0:323; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24324; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0325; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3326; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)327; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[1,0]328; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0329; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]330; GFX12-GISEL-NEXT: s_endpgm331 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %src0, i32 %src0, i32 %src1, i1 true, i1 false)332 store i32 %v, ptr addrspace(1) %out333 ret void334}335 336define amdgpu_kernel void @v_permlanex16var_b32_vv_bc(ptr addrspace(1) %out, i32 %src0, i32 %src1) {337; GFX12-SDAG-LABEL: v_permlanex16var_b32_vv_bc:338; GFX12-SDAG: ; %bb.0:339; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24340; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 0341; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0342; GFX12-SDAG-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3343; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)344; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[0,1]345; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]346; GFX12-SDAG-NEXT: s_endpgm347;348; GFX12-GISEL-LABEL: v_permlanex16var_b32_vv_bc:349; GFX12-GISEL: ; %bb.0:350; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24351; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0352; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3353; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)354; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[0,1]355; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0356; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]357; GFX12-GISEL-NEXT: s_endpgm358 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %src0, i32 %src0, i32 %src1, i1 false, i1 true)359 store i32 %v, ptr addrspace(1) %out360 ret void361}362 363define amdgpu_kernel void @v_permlanex16var_b32_vv_fi_bc(ptr addrspace(1) %out, i32 %src0, i32 %src1) {364; GFX12-SDAG-LABEL: v_permlanex16var_b32_vv_fi_bc:365; GFX12-SDAG: ; %bb.0:366; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24367; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 0368; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0369; GFX12-SDAG-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3370; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)371; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[1,1]372; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]373; GFX12-SDAG-NEXT: s_endpgm374;375; GFX12-GISEL-LABEL: v_permlanex16var_b32_vv_fi_bc:376; GFX12-GISEL: ; %bb.0:377; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24378; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0379; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3380; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)381; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[1,1]382; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0383; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]384; GFX12-GISEL-NEXT: s_endpgm385 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %src0, i32 %src0, i32 %src1, i1 true, i1 true)386 store i32 %v, ptr addrspace(1) %out387 ret void388}389 390define amdgpu_kernel void @v_permlane16var_b32_tid_tid(ptr addrspace(1) %out, i32 %src0, i32 %src1) {391; GFX12-SDAG-LABEL: v_permlane16var_b32_tid_tid:392; GFX12-SDAG: ; %bb.0:393; GFX12-SDAG-NEXT: s_clause 0x1394; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30395; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24396; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0397; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0398; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2399; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)400; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v1401; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]402; GFX12-SDAG-NEXT: s_endpgm403;404; GFX12-GISEL-LABEL: v_permlane16var_b32_tid_tid:405; GFX12-GISEL: ; %bb.0:406; GFX12-GISEL-NEXT: s_clause 0x1407; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30408; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24409; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0410; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0411; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)412; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v1413; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0414; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]415; GFX12-GISEL-NEXT: s_endpgm416 %tidx = call i32 @llvm.amdgcn.workitem.id.x()417 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %tidx, i32 %tidx, i32 %src1, i1 false, i1 false)418 store i32 %v, ptr addrspace(1) %out419 ret void420}421 422define amdgpu_kernel void @v_permlane16var_b32_undef_tid(ptr addrspace(1) %out, i32 %src0, i32 %src1) {423; GFX12-SDAG-LABEL: v_permlane16var_b32_undef_tid:424; GFX12-SDAG: ; %bb.0:425; GFX12-SDAG-NEXT: s_clause 0x1426; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30427; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24428; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0429; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0430; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2431; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)432; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v1433; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]434; GFX12-SDAG-NEXT: s_endpgm435;436; GFX12-GISEL-LABEL: v_permlane16var_b32_undef_tid:437; GFX12-GISEL: ; %bb.0:438; GFX12-GISEL-NEXT: s_clause 0x1439; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30440; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24441; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0442; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0443; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)444; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v1445; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0446; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]447; GFX12-GISEL-NEXT: s_endpgm448 %tidx = call i32 @llvm.amdgcn.workitem.id.x()449 %undef = freeze i32 poison450 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %undef, i32 %tidx, i32 %src1, i1 false, i1 false)451 store i32 %v, ptr addrspace(1) %out452 ret void453}454 455define amdgpu_kernel void @v_permlane16var_b32_i_tid(ptr addrspace(1) %out, i32 %src0, i32 %src1) {456; GFX12-SDAG-LABEL: v_permlane16var_b32_i_tid:457; GFX12-SDAG: ; %bb.0:458; GFX12-SDAG-NEXT: s_clause 0x1459; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30460; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24461; GFX12-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0462; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0463; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, s2464; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)465; GFX12-SDAG-NEXT: v_permlane16_var_b32 v1, v0, v2466; GFX12-SDAG-NEXT: global_store_b32 v3, v1, s[0:1]467; GFX12-SDAG-NEXT: s_endpgm468;469; GFX12-GISEL-LABEL: v_permlane16var_b32_i_tid:470; GFX12-GISEL: ; %bb.0:471; GFX12-GISEL-NEXT: s_clause 0x1472; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30473; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24474; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0x3039475; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0476; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0477; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, s2478; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)479; GFX12-GISEL-NEXT: v_permlane16_var_b32 v1, v0, v2480; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 0481; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[0:1]482; GFX12-GISEL-NEXT: s_endpgm483 %tidx = call i32 @llvm.amdgcn.workitem.id.x()484 %v = call i32 @llvm.amdgcn.permlane16.var(i32 12345, i32 %tidx, i32 %src1, i1 false, i1 false)485 store i32 %v, ptr addrspace(1) %out486 ret void487}488 489define amdgpu_kernel void @v_permlane16var_b32_i_tid_fi(ptr addrspace(1) %out, i32 %src0, i32 %src1) {490; GFX12-SDAG-LABEL: v_permlane16var_b32_i_tid_fi:491; GFX12-SDAG: ; %bb.0:492; GFX12-SDAG-NEXT: s_clause 0x1493; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30494; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24495; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0496; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0497; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2498; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)499; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[1,0]500; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]501; GFX12-SDAG-NEXT: s_endpgm502;503; GFX12-GISEL-LABEL: v_permlane16var_b32_i_tid_fi:504; GFX12-GISEL: ; %bb.0:505; GFX12-GISEL-NEXT: s_clause 0x1506; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30507; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24508; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0509; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0510; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)511; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[1,0]512; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0513; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]514; GFX12-GISEL-NEXT: s_endpgm515 %tidx = call i32 @llvm.amdgcn.workitem.id.x()516 %undef = freeze i32 poison517 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %undef, i32 %tidx, i32 %src1, i1 true, i1 false)518 store i32 %v, ptr addrspace(1) %out519 ret void520}521 522define amdgpu_kernel void @v_permlane16var_b32_i_tid_bc(ptr addrspace(1) %out, i32 %src0, i32 %src1) {523; GFX12-SDAG-LABEL: v_permlane16var_b32_i_tid_bc:524; GFX12-SDAG: ; %bb.0:525; GFX12-SDAG-NEXT: s_clause 0x1526; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30527; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24528; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0529; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0530; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2531; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)532; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[0,1]533; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]534; GFX12-SDAG-NEXT: s_endpgm535;536; GFX12-GISEL-LABEL: v_permlane16var_b32_i_tid_bc:537; GFX12-GISEL: ; %bb.0:538; GFX12-GISEL-NEXT: s_clause 0x1539; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30540; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24541; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0542; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0543; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)544; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[0,1]545; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0546; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]547; GFX12-GISEL-NEXT: s_endpgm548 %tidx = call i32 @llvm.amdgcn.workitem.id.x()549 %undef = freeze i32 poison550 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %undef, i32 %tidx, i32 %src1, i1 false, i1 true)551 store i32 %v, ptr addrspace(1) %out552 ret void553}554 555define amdgpu_kernel void @v_permlane16var_b32_i_tid_fi_bc(ptr addrspace(1) %out, i32 %src0, i32 %src1) {556; GFX12-SDAG-LABEL: v_permlane16var_b32_i_tid_fi_bc:557; GFX12-SDAG: ; %bb.0:558; GFX12-SDAG-NEXT: s_clause 0x1559; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30560; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24561; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0562; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0563; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2564; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)565; GFX12-SDAG-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[1,1]566; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]567; GFX12-SDAG-NEXT: s_endpgm568;569; GFX12-GISEL-LABEL: v_permlane16var_b32_i_tid_fi_bc:570; GFX12-GISEL: ; %bb.0:571; GFX12-GISEL-NEXT: s_clause 0x1572; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30573; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24574; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0575; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0576; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)577; GFX12-GISEL-NEXT: v_permlane16_var_b32 v0, v0, v1 op_sel:[1,1]578; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0579; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]580; GFX12-GISEL-NEXT: s_endpgm581 %tidx = call i32 @llvm.amdgcn.workitem.id.x()582 %undef = freeze i32 poison583 %v = call i32 @llvm.amdgcn.permlane16.var(i32 %undef, i32 %tidx, i32 %src1, i1 true, i1 true)584 store i32 %v, ptr addrspace(1) %out585 ret void586}587 588define amdgpu_kernel void @v_permlanex16var_b32_tid_tid(ptr addrspace(1) %out, i32 %src0, i32 %src1) {589; GFX12-SDAG-LABEL: v_permlanex16var_b32_tid_tid:590; GFX12-SDAG: ; %bb.0:591; GFX12-SDAG-NEXT: s_clause 0x1592; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30593; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24594; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0595; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0596; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2597; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)598; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1599; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]600; GFX12-SDAG-NEXT: s_endpgm601;602; GFX12-GISEL-LABEL: v_permlanex16var_b32_tid_tid:603; GFX12-GISEL: ; %bb.0:604; GFX12-GISEL-NEXT: s_clause 0x1605; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30606; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24607; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0608; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0609; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)610; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1611; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0612; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]613; GFX12-GISEL-NEXT: s_endpgm614 %tidx = call i32 @llvm.amdgcn.workitem.id.x()615 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %tidx, i32 %tidx, i32 %src1, i1 false, i1 false)616 store i32 %v, ptr addrspace(1) %out617 ret void618}619 620define amdgpu_kernel void @v_permlanex16var_b32_undef_tid(ptr addrspace(1) %out, i32 %src0, i32 %src1) {621; GFX12-SDAG-LABEL: v_permlanex16var_b32_undef_tid:622; GFX12-SDAG: ; %bb.0:623; GFX12-SDAG-NEXT: s_clause 0x1624; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30625; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24626; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0627; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0628; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2629; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)630; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1631; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]632; GFX12-SDAG-NEXT: s_endpgm633;634; GFX12-GISEL-LABEL: v_permlanex16var_b32_undef_tid:635; GFX12-GISEL: ; %bb.0:636; GFX12-GISEL-NEXT: s_clause 0x1637; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30638; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24639; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0640; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0641; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)642; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1643; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0644; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]645; GFX12-GISEL-NEXT: s_endpgm646 %tidx = call i32 @llvm.amdgcn.workitem.id.x()647 %undef = freeze i32 poison648 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %undef, i32 %tidx, i32 %src1, i1 false, i1 false)649 store i32 %v, ptr addrspace(1) %out650 ret void651}652 653define amdgpu_kernel void @v_permlanex16var_b32_i_tid(ptr addrspace(1) %out, i32 %src0, i32 %src1) {654; GFX12-SDAG-LABEL: v_permlanex16var_b32_i_tid:655; GFX12-SDAG: ; %bb.0:656; GFX12-SDAG-NEXT: s_clause 0x1657; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30658; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24659; GFX12-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0660; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0661; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, s2662; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)663; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v1, v0, v2664; GFX12-SDAG-NEXT: global_store_b32 v3, v1, s[0:1]665; GFX12-SDAG-NEXT: s_endpgm666;667; GFX12-GISEL-LABEL: v_permlanex16var_b32_i_tid:668; GFX12-GISEL: ; %bb.0:669; GFX12-GISEL-NEXT: s_clause 0x1670; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30671; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24672; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0x3039673; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0674; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0675; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, s2676; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)677; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v1, v0, v2678; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 0679; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[0:1]680; GFX12-GISEL-NEXT: s_endpgm681 %tidx = call i32 @llvm.amdgcn.workitem.id.x()682 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 12345, i32 %tidx, i32 %src1, i1 false, i1 false)683 store i32 %v, ptr addrspace(1) %out684 ret void685}686 687define amdgpu_kernel void @v_permlanex16var_b32_i_tid_fi(ptr addrspace(1) %out, i32 %src0, i32 %src1) {688; GFX12-SDAG-LABEL: v_permlanex16var_b32_i_tid_fi:689; GFX12-SDAG: ; %bb.0:690; GFX12-SDAG-NEXT: s_clause 0x1691; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30692; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24693; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0694; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0695; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2696; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)697; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[1,0]698; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]699; GFX12-SDAG-NEXT: s_endpgm700;701; GFX12-GISEL-LABEL: v_permlanex16var_b32_i_tid_fi:702; GFX12-GISEL: ; %bb.0:703; GFX12-GISEL-NEXT: s_clause 0x1704; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30705; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24706; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0707; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0708; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)709; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[1,0]710; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0711; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]712; GFX12-GISEL-NEXT: s_endpgm713 %tidx = call i32 @llvm.amdgcn.workitem.id.x()714 %undef = freeze i32 poison715 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %undef, i32 %tidx, i32 %src1, i1 true, i1 false)716 store i32 %v, ptr addrspace(1) %out717 ret void718}719 720define amdgpu_kernel void @v_permlanex16var_b32_i_tid_bc(ptr addrspace(1) %out, i32 %src0, i32 %src1) {721; GFX12-SDAG-LABEL: v_permlanex16var_b32_i_tid_bc:722; GFX12-SDAG: ; %bb.0:723; GFX12-SDAG-NEXT: s_clause 0x1724; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30725; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24726; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0727; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0728; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2729; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)730; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[0,1]731; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]732; GFX12-SDAG-NEXT: s_endpgm733;734; GFX12-GISEL-LABEL: v_permlanex16var_b32_i_tid_bc:735; GFX12-GISEL: ; %bb.0:736; GFX12-GISEL-NEXT: s_clause 0x1737; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30738; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24739; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0740; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0741; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)742; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[0,1]743; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0744; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]745; GFX12-GISEL-NEXT: s_endpgm746 %tidx = call i32 @llvm.amdgcn.workitem.id.x()747 %undef = freeze i32 poison748 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %undef, i32 %tidx, i32 %src1, i1 false, i1 true)749 store i32 %v, ptr addrspace(1) %out750 ret void751}752 753define amdgpu_kernel void @v_permlanex16var_b32_i_tid_fi_bc(ptr addrspace(1) %out, i32 %src0, i32 %src1) {754; GFX12-SDAG-LABEL: v_permlanex16var_b32_i_tid_fi_bc:755; GFX12-SDAG: ; %bb.0:756; GFX12-SDAG-NEXT: s_clause 0x1757; GFX12-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x30758; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24759; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0760; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0761; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s2762; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)763; GFX12-SDAG-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[1,1]764; GFX12-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]765; GFX12-SDAG-NEXT: s_endpgm766;767; GFX12-GISEL-LABEL: v_permlanex16var_b32_i_tid_fi_bc:768; GFX12-GISEL: ; %bb.0:769; GFX12-GISEL-NEXT: s_clause 0x1770; GFX12-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x30771; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24772; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0773; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0774; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)775; GFX12-GISEL-NEXT: v_permlanex16_var_b32 v0, v0, v1 op_sel:[1,1]776; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0777; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]778; GFX12-GISEL-NEXT: s_endpgm779 %tidx = call i32 @llvm.amdgcn.workitem.id.x()780 %undef = freeze i32 poison781 %v = call i32 @llvm.amdgcn.permlanex16.var(i32 %undef, i32 %tidx, i32 %src1, i1 true, i1 true)782 store i32 %v, ptr addrspace(1) %out783 ret void784}785