brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.9 KiB · 356b767 Raw
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