10529 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=gfx1010 < %s | FileCheck -check-prefixes=GFX10,GFX10-SDAG %s3; RUN: llc -global-isel=1 -global-isel-abort=2 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10,GFX10-GISEL %s4; RUN: llc -global-isel=0 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11,GFX11-SDAG %s5; RUN: llc -global-isel=1 -global-isel-abort=2 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11,GFX11-GISEL %s6; RUN: llc -global-isel=0 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12,GFX12-SDAG %s7; RUN: llc -global-isel=1 -global-isel-abort=2 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12,GFX12-GISEL %s8 9declare i32 @llvm.amdgcn.permlane16(i32, i32, i32, i32, i1, i1)10declare i32 @llvm.amdgcn.permlanex16(i32, i32, i32, i32, i1, i1)11declare i32 @llvm.amdgcn.workitem.id.x()12declare i32 @llvm.amdgcn.workitem.id.y()13 14define amdgpu_kernel void @v_permlane16_b32_vss_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {15; GFX10-LABEL: v_permlane16_b32_vss_i32:16; GFX10: ; %bb.0:17; GFX10-NEXT: s_clause 0x118; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2419; GFX10-NEXT: s_load_dword s6, s[4:5], 0x3420; GFX10-NEXT: v_mov_b32_e32 v1, 021; GFX10-NEXT: s_waitcnt lgkmcnt(0)22; GFX10-NEXT: v_mov_b32_e32 v0, s223; GFX10-NEXT: v_permlane16_b32 v0, v0, s3, s624; GFX10-NEXT: global_store_dword v1, v0, s[0:1]25; GFX10-NEXT: s_endpgm26;27; GFX11-LABEL: v_permlane16_b32_vss_i32:28; GFX11: ; %bb.0:29; GFX11-NEXT: s_clause 0x130; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x2431; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x3432; GFX11-NEXT: s_waitcnt lgkmcnt(0)33; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s234; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)35; GFX11-NEXT: v_permlane16_b32 v0, v0, s3, s436; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]37; GFX11-NEXT: s_endpgm38;39; GFX12-LABEL: v_permlane16_b32_vss_i32:40; GFX12: ; %bb.0:41; GFX12-NEXT: s_clause 0x142; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x2443; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x3444; GFX12-NEXT: s_wait_kmcnt 0x045; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s246; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)47; GFX12-NEXT: v_permlane16_b32 v0, v0, s3, s448; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]49; GFX12-NEXT: s_endpgm50 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 false, i1 false)51 store i32 %v, ptr addrspace(1) %out52 ret void53}54 55define amdgpu_kernel void @v_permlane16_b32_vss_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {56; GFX10-LABEL: v_permlane16_b32_vss_f32:57; GFX10: ; %bb.0:58; GFX10-NEXT: s_clause 0x159; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2460; GFX10-NEXT: s_load_dword s6, s[4:5], 0x3461; GFX10-NEXT: v_mov_b32_e32 v1, 062; GFX10-NEXT: s_waitcnt lgkmcnt(0)63; GFX10-NEXT: v_mov_b32_e32 v0, s264; GFX10-NEXT: v_permlane16_b32 v0, v0, s3, s665; GFX10-NEXT: global_store_dword v1, v0, s[0:1]66; GFX10-NEXT: s_endpgm67;68; GFX11-LABEL: v_permlane16_b32_vss_f32:69; GFX11: ; %bb.0:70; GFX11-NEXT: s_clause 0x171; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x2472; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x3473; GFX11-NEXT: s_waitcnt lgkmcnt(0)74; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s275; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)76; GFX11-NEXT: v_permlane16_b32 v0, v0, s3, s477; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]78; GFX11-NEXT: s_endpgm79;80; GFX12-LABEL: v_permlane16_b32_vss_f32:81; GFX12: ; %bb.0:82; GFX12-NEXT: s_clause 0x183; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x2484; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x3485; GFX12-NEXT: s_wait_kmcnt 0x086; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s287; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)88; GFX12-NEXT: v_permlane16_b32 v0, v0, s3, s489; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]90; GFX12-NEXT: s_endpgm91 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 false, i1 false)92 store float %v, ptr addrspace(1) %out93 ret void94}95 96define amdgpu_kernel void @v_permlane16_b32_vss_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {97; GFX10-SDAG-LABEL: v_permlane16_b32_vss_i64:98; GFX10-SDAG: ; %bb.0:99; GFX10-SDAG-NEXT: s_clause 0x1100; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24101; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34102; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 0103; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)104; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s3105; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2106; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s7107; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s7108; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]109; GFX10-SDAG-NEXT: s_endpgm110;111; GFX10-GISEL-LABEL: v_permlane16_b32_vss_i64:112; GFX10-GISEL: ; %bb.0:113; GFX10-GISEL-NEXT: s_clause 0x1114; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24115; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34116; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 0117; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)118; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2119; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s3120; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s7121; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s7122; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]123; GFX10-GISEL-NEXT: s_endpgm124;125; GFX11-SDAG-LABEL: v_permlane16_b32_vss_i64:126; GFX11-SDAG: ; %bb.0:127; GFX11-SDAG-NEXT: s_clause 0x1128; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24129; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x34130; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)131; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3132; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s2133; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)134; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5135; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5136; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]137; GFX11-SDAG-NEXT: s_endpgm138;139; GFX11-GISEL-LABEL: v_permlane16_b32_vss_i64:140; GFX11-GISEL: ; %bb.0:141; GFX11-GISEL-NEXT: s_clause 0x1142; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24143; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x34144; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 0145; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)146; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3147; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)148; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5149; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5150; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]151; GFX11-GISEL-NEXT: s_endpgm152;153; GFX12-SDAG-LABEL: v_permlane16_b32_vss_i64:154; GFX12-SDAG: ; %bb.0:155; GFX12-SDAG-NEXT: s_clause 0x1156; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24157; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x34158; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0159; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3160; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s2161; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)162; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5163; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5164; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]165; GFX12-SDAG-NEXT: s_endpgm166;167; GFX12-GISEL-LABEL: v_permlane16_b32_vss_i64:168; GFX12-GISEL: ; %bb.0:169; GFX12-GISEL-NEXT: s_clause 0x1170; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24171; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x34172; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 0173; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0174; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3175; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)176; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5177; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5178; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]179; GFX12-GISEL-NEXT: s_endpgm180 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 false, i1 false)181 store i64 %v, ptr addrspace(1) %out182 ret void183}184 185define amdgpu_kernel void @v_permlane16_b32_vss_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {186; GFX10-SDAG-LABEL: v_permlane16_b32_vss_f64:187; GFX10-SDAG: ; %bb.0:188; GFX10-SDAG-NEXT: s_clause 0x1189; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24190; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34191; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 0192; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)193; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s3194; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2195; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s7196; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s7197; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]198; GFX10-SDAG-NEXT: s_endpgm199;200; GFX10-GISEL-LABEL: v_permlane16_b32_vss_f64:201; GFX10-GISEL: ; %bb.0:202; GFX10-GISEL-NEXT: s_clause 0x1203; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24204; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34205; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 0206; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)207; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2208; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s3209; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s7210; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s7211; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]212; GFX10-GISEL-NEXT: s_endpgm213;214; GFX11-SDAG-LABEL: v_permlane16_b32_vss_f64:215; GFX11-SDAG: ; %bb.0:216; GFX11-SDAG-NEXT: s_clause 0x1217; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24218; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x34219; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)220; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3221; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s2222; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)223; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5224; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5225; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]226; GFX11-SDAG-NEXT: s_endpgm227;228; GFX11-GISEL-LABEL: v_permlane16_b32_vss_f64:229; GFX11-GISEL: ; %bb.0:230; GFX11-GISEL-NEXT: s_clause 0x1231; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24232; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x34233; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 0234; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)235; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3236; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)237; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5238; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5239; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]240; GFX11-GISEL-NEXT: s_endpgm241;242; GFX12-SDAG-LABEL: v_permlane16_b32_vss_f64:243; GFX12-SDAG: ; %bb.0:244; GFX12-SDAG-NEXT: s_clause 0x1245; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24246; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x34247; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0248; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3249; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s2250; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)251; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5252; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5253; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]254; GFX12-SDAG-NEXT: s_endpgm255;256; GFX12-GISEL-LABEL: v_permlane16_b32_vss_f64:257; GFX12-GISEL: ; %bb.0:258; GFX12-GISEL-NEXT: s_clause 0x1259; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24260; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x34261; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 0262; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0263; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3264; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)265; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5266; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5267; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]268; GFX12-GISEL-NEXT: s_endpgm269 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 false, i1 false)270 store double %v, ptr addrspace(1) %out271 ret void272}273 274define amdgpu_kernel void @v_permlane16_b32_vii_i32(ptr addrspace(1) %out, i32 %src0) {275; GFX10-LABEL: v_permlane16_b32_vii_i32:276; GFX10: ; %bb.0:277; GFX10-NEXT: s_clause 0x1278; GFX10-NEXT: s_load_dword s2, s[4:5], 0x2c279; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24280; GFX10-NEXT: v_mov_b32_e32 v1, 0281; GFX10-NEXT: s_waitcnt lgkmcnt(0)282; GFX10-NEXT: v_mov_b32_e32 v0, s2283; GFX10-NEXT: v_permlane16_b32 v0, v0, 1, 2284; GFX10-NEXT: global_store_dword v1, v0, s[0:1]285; GFX10-NEXT: s_endpgm286;287; GFX11-LABEL: v_permlane16_b32_vii_i32:288; GFX11: ; %bb.0:289; GFX11-NEXT: s_clause 0x1290; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c291; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24292; GFX11-NEXT: s_waitcnt lgkmcnt(0)293; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2294; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)295; GFX11-NEXT: v_permlane16_b32 v0, v0, 1, 2296; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]297; GFX11-NEXT: s_endpgm298;299; GFX12-LABEL: v_permlane16_b32_vii_i32:300; GFX12: ; %bb.0:301; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x24302; GFX12-NEXT: s_wait_kmcnt 0x0303; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2304; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)305; GFX12-NEXT: v_permlane16_b32 v0, v0, 1, 2306; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]307; GFX12-NEXT: s_endpgm308 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 1, i32 2, i1 false, i1 false)309 store i32 %v, ptr addrspace(1) %out310 ret void311}312 313define amdgpu_kernel void @v_permlane16_b32_vii_f32(ptr addrspace(1) %out, float %src0) {314; GFX10-LABEL: v_permlane16_b32_vii_f32:315; GFX10: ; %bb.0:316; GFX10-NEXT: s_clause 0x1317; GFX10-NEXT: s_load_dword s2, s[4:5], 0x2c318; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24319; GFX10-NEXT: v_mov_b32_e32 v1, 0320; GFX10-NEXT: s_waitcnt lgkmcnt(0)321; GFX10-NEXT: v_mov_b32_e32 v0, s2322; GFX10-NEXT: v_permlane16_b32 v0, v0, 1, 2323; GFX10-NEXT: global_store_dword v1, v0, s[0:1]324; GFX10-NEXT: s_endpgm325;326; GFX11-LABEL: v_permlane16_b32_vii_f32:327; GFX11: ; %bb.0:328; GFX11-NEXT: s_clause 0x1329; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c330; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24331; GFX11-NEXT: s_waitcnt lgkmcnt(0)332; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2333; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)334; GFX11-NEXT: v_permlane16_b32 v0, v0, 1, 2335; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]336; GFX11-NEXT: s_endpgm337;338; GFX12-LABEL: v_permlane16_b32_vii_f32:339; GFX12: ; %bb.0:340; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x24341; GFX12-NEXT: s_wait_kmcnt 0x0342; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2343; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)344; GFX12-NEXT: v_permlane16_b32 v0, v0, 1, 2345; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]346; GFX12-NEXT: s_endpgm347 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 1, i32 2, i1 false, i1 false)348 store float %v, ptr addrspace(1) %out349 ret void350}351 352define amdgpu_kernel void @v_permlane16_b32_vii_i64(ptr addrspace(1) %out, i64 %src0) {353; GFX10-SDAG-LABEL: v_permlane16_b32_vii_i64:354; GFX10-SDAG: ; %bb.0:355; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24356; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 0357; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)358; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s3359; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2360; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, 1, 2361; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, 1, 2362; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]363; GFX10-SDAG-NEXT: s_endpgm364;365; GFX10-GISEL-LABEL: v_permlane16_b32_vii_i64:366; GFX10-GISEL: ; %bb.0:367; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24368; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 0369; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)370; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2371; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s3372; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, 1, 2373; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, 1, 2374; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]375; GFX10-GISEL-NEXT: s_endpgm376;377; GFX11-SDAG-LABEL: v_permlane16_b32_vii_i64:378; GFX11-SDAG: ; %bb.0:379; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24380; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)381; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3382; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s2383; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)384; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, 1, 2385; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, 1, 2386; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]387; GFX11-SDAG-NEXT: s_endpgm388;389; GFX11-GISEL-LABEL: v_permlane16_b32_vii_i64:390; GFX11-GISEL: ; %bb.0:391; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24392; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 0393; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)394; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3395; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)396; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, 1, 2397; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, 1, 2398; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]399; GFX11-GISEL-NEXT: s_endpgm400;401; GFX12-SDAG-LABEL: v_permlane16_b32_vii_i64:402; GFX12-SDAG: ; %bb.0:403; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24404; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0405; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3406; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s2407; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)408; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, 1, 2409; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, 1, 2410; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]411; GFX12-SDAG-NEXT: s_endpgm412;413; GFX12-GISEL-LABEL: v_permlane16_b32_vii_i64:414; GFX12-GISEL: ; %bb.0:415; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24416; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 0417; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0418; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3419; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)420; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, 1, 2421; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, 1, 2422; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]423; GFX12-GISEL-NEXT: s_endpgm424 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 1, i32 2, i1 false, i1 false)425 store i64 %v, ptr addrspace(1) %out426 ret void427}428 429define amdgpu_kernel void @v_permlane16_b32_vii_f64(ptr addrspace(1) %out, double %src0) {430; GFX10-SDAG-LABEL: v_permlane16_b32_vii_f64:431; GFX10-SDAG: ; %bb.0:432; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24433; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 0434; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)435; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s3436; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2437; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, 1, 2438; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, 1, 2439; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]440; GFX10-SDAG-NEXT: s_endpgm441;442; GFX10-GISEL-LABEL: v_permlane16_b32_vii_f64:443; GFX10-GISEL: ; %bb.0:444; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24445; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 0446; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)447; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2448; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s3449; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, 1, 2450; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, 1, 2451; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]452; GFX10-GISEL-NEXT: s_endpgm453;454; GFX11-SDAG-LABEL: v_permlane16_b32_vii_f64:455; GFX11-SDAG: ; %bb.0:456; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24457; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)458; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3459; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s2460; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)461; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, 1, 2462; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, 1, 2463; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]464; GFX11-SDAG-NEXT: s_endpgm465;466; GFX11-GISEL-LABEL: v_permlane16_b32_vii_f64:467; GFX11-GISEL: ; %bb.0:468; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24469; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 0470; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)471; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3472; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)473; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, 1, 2474; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, 1, 2475; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]476; GFX11-GISEL-NEXT: s_endpgm477;478; GFX12-SDAG-LABEL: v_permlane16_b32_vii_f64:479; GFX12-SDAG: ; %bb.0:480; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24481; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0482; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3483; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s2484; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)485; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, 1, 2486; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, 1, 2487; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]488; GFX12-SDAG-NEXT: s_endpgm489;490; GFX12-GISEL-LABEL: v_permlane16_b32_vii_f64:491; GFX12-GISEL: ; %bb.0:492; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24493; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 0494; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0495; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3496; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)497; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, 1, 2498; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, 1, 2499; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]500; GFX12-GISEL-NEXT: s_endpgm501 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 1, i32 2, i1 false, i1 false)502 store double %v, ptr addrspace(1) %out503 ret void504}505 506; FIXME-GFX10PLUS: It is allowed to have both immediates as literals507define amdgpu_kernel void @v_permlane16_b32_vll_i32(ptr addrspace(1) %out, i32 %src0) {508; GFX10-LABEL: v_permlane16_b32_vll_i32:509; GFX10: ; %bb.0:510; GFX10-NEXT: s_clause 0x1511; GFX10-NEXT: s_load_dword s2, s[4:5], 0x2c512; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24513; GFX10-NEXT: v_mov_b32_e32 v1, 0514; GFX10-NEXT: s_waitcnt lgkmcnt(0)515; GFX10-NEXT: v_mov_b32_e32 v0, s2516; GFX10-NEXT: s_movk_i32 s2, 0x1234517; GFX10-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1518; GFX10-NEXT: global_store_dword v1, v0, s[0:1]519; GFX10-NEXT: s_endpgm520;521; GFX11-LABEL: v_permlane16_b32_vll_i32:522; GFX11: ; %bb.0:523; GFX11-NEXT: s_clause 0x1524; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c525; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24526; GFX11-NEXT: s_waitcnt lgkmcnt(0)527; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2528; GFX11-NEXT: s_movk_i32 s2, 0x1234529; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)530; GFX11-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1531; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]532; GFX11-NEXT: s_endpgm533;534; GFX12-LABEL: v_permlane16_b32_vll_i32:535; GFX12: ; %bb.0:536; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x24537; GFX12-NEXT: s_wait_kmcnt 0x0538; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2539; GFX12-NEXT: s_movk_i32 s2, 0x1234540; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)541; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)542; GFX12-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1543; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]544; GFX12-NEXT: s_endpgm545 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 4660, i32 49617, i1 false, i1 false)546 store i32 %v, ptr addrspace(1) %out547 ret void548}549 550define amdgpu_kernel void @v_permlane16_b32_vll_i64(ptr addrspace(1) %out, i64 %src0) {551; GFX10-SDAG-LABEL: v_permlane16_b32_vll_i64:552; GFX10-SDAG: ; %bb.0:553; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24554; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 0555; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)556; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s3557; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2558; GFX10-SDAG-NEXT: s_movk_i32 s2, 0x1234559; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1560; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1561; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]562; GFX10-SDAG-NEXT: s_endpgm563;564; GFX10-GISEL-LABEL: v_permlane16_b32_vll_i64:565; GFX10-GISEL: ; %bb.0:566; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24567; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 0568; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)569; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2570; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s3571; GFX10-GISEL-NEXT: s_movk_i32 s2, 0x1234572; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1573; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1574; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]575; GFX10-GISEL-NEXT: s_endpgm576;577; GFX11-SDAG-LABEL: v_permlane16_b32_vll_i64:578; GFX11-SDAG: ; %bb.0:579; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24580; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)581; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3582; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s2583; GFX11-SDAG-NEXT: s_movk_i32 s2, 0x1234584; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)585; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1586; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)587; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1588; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]589; GFX11-SDAG-NEXT: s_endpgm590;591; GFX11-GISEL-LABEL: v_permlane16_b32_vll_i64:592; GFX11-GISEL: ; %bb.0:593; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24594; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 0595; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)596; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3597; GFX11-GISEL-NEXT: s_movk_i32 s2, 0x1234598; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)599; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1600; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)601; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1602; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]603; GFX11-GISEL-NEXT: s_endpgm604;605; GFX12-SDAG-LABEL: v_permlane16_b32_vll_i64:606; GFX12-SDAG: ; %bb.0:607; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24608; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0609; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3610; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s2611; GFX12-SDAG-NEXT: s_movk_i32 s2, 0x1234612; GFX12-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0)613; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)614; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1615; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1616; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]617; GFX12-SDAG-NEXT: s_endpgm618;619; GFX12-GISEL-LABEL: v_permlane16_b32_vll_i64:620; GFX12-GISEL: ; %bb.0:621; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24622; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 0623; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0624; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3625; GFX12-GISEL-NEXT: s_movk_i32 s2, 0x1234626; GFX12-GISEL-NEXT: s_wait_alu depctr_sa_sdst(0)627; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)628; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1629; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1630; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]631; GFX12-GISEL-NEXT: s_endpgm632 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 4660, i32 49617, i1 false, i1 false)633 store i64 %v, ptr addrspace(1) %out634 ret void635}636 637define amdgpu_kernel void @v_permlane16_b32_vll_f32(ptr addrspace(1) %out,float %src0) {638; GFX10-LABEL: v_permlane16_b32_vll_f32:639; GFX10: ; %bb.0:640; GFX10-NEXT: s_clause 0x1641; GFX10-NEXT: s_load_dword s2, s[4:5], 0x2c642; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24643; GFX10-NEXT: v_mov_b32_e32 v1, 0644; GFX10-NEXT: s_waitcnt lgkmcnt(0)645; GFX10-NEXT: v_mov_b32_e32 v0, s2646; GFX10-NEXT: s_movk_i32 s2, 0x1234647; GFX10-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1648; GFX10-NEXT: global_store_dword v1, v0, s[0:1]649; GFX10-NEXT: s_endpgm650;651; GFX11-LABEL: v_permlane16_b32_vll_f32:652; GFX11: ; %bb.0:653; GFX11-NEXT: s_clause 0x1654; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c655; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x24656; GFX11-NEXT: s_waitcnt lgkmcnt(0)657; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2658; GFX11-NEXT: s_movk_i32 s2, 0x1234659; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)660; GFX11-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1661; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]662; GFX11-NEXT: s_endpgm663;664; GFX12-LABEL: v_permlane16_b32_vll_f32:665; GFX12: ; %bb.0:666; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x24667; GFX12-NEXT: s_wait_kmcnt 0x0668; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2669; GFX12-NEXT: s_movk_i32 s2, 0x1234670; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)671; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)672; GFX12-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1673; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]674; GFX12-NEXT: s_endpgm675 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 4660, i32 49617, i1 false, i1 false)676 store float %v, ptr addrspace(1) %out677 ret void678}679 680define amdgpu_kernel void @v_permlane16_b32_vll_f64(ptr addrspace(1) %out, double %src0) {681; GFX10-SDAG-LABEL: v_permlane16_b32_vll_f64:682; GFX10-SDAG: ; %bb.0:683; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24684; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 0685; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)686; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s3687; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2688; GFX10-SDAG-NEXT: s_movk_i32 s2, 0x1234689; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1690; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1691; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]692; GFX10-SDAG-NEXT: s_endpgm693;694; GFX10-GISEL-LABEL: v_permlane16_b32_vll_f64:695; GFX10-GISEL: ; %bb.0:696; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24697; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 0698; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)699; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2700; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s3701; GFX10-GISEL-NEXT: s_movk_i32 s2, 0x1234702; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1703; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1704; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]705; GFX10-GISEL-NEXT: s_endpgm706;707; GFX11-SDAG-LABEL: v_permlane16_b32_vll_f64:708; GFX11-SDAG: ; %bb.0:709; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24710; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)711; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3712; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s2713; GFX11-SDAG-NEXT: s_movk_i32 s2, 0x1234714; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)715; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1716; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)717; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1718; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]719; GFX11-SDAG-NEXT: s_endpgm720;721; GFX11-GISEL-LABEL: v_permlane16_b32_vll_f64:722; GFX11-GISEL: ; %bb.0:723; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24724; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 0725; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)726; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3727; GFX11-GISEL-NEXT: s_movk_i32 s2, 0x1234728; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)729; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1730; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)731; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1732; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]733; GFX11-GISEL-NEXT: s_endpgm734;735; GFX12-SDAG-LABEL: v_permlane16_b32_vll_f64:736; GFX12-SDAG: ; %bb.0:737; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24738; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0739; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3740; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s2741; GFX12-SDAG-NEXT: s_movk_i32 s2, 0x1234742; GFX12-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0)743; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)744; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1745; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1746; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]747; GFX12-SDAG-NEXT: s_endpgm748;749; GFX12-GISEL-LABEL: v_permlane16_b32_vll_f64:750; GFX12-GISEL: ; %bb.0:751; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24752; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 0753; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0754; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3755; GFX12-GISEL-NEXT: s_movk_i32 s2, 0x1234756; GFX12-GISEL-NEXT: s_wait_alu depctr_sa_sdst(0)757; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)758; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s2, 0xc1d1759; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s2, 0xc1d1760; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]761; GFX12-GISEL-NEXT: s_endpgm762 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 4660, i32 49617, i1 false, i1 false)763 store double %v, ptr addrspace(1) %out764 ret void765}766 767define amdgpu_kernel void @v_permlane16_b32_vvv_i32(ptr addrspace(1) %out, i32 %src0) {768; GFX10-SDAG-LABEL: v_permlane16_b32_vvv_i32:769; GFX10-SDAG: ; %bb.0:770; GFX10-SDAG-NEXT: s_clause 0x1771; GFX10-SDAG-NEXT: s_load_dword s2, s[4:5], 0x2c772; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24773; GFX10-SDAG-NEXT: v_readfirstlane_b32 s3, v0774; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)775; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2776; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v1777; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 0778; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s3, s2779; GFX10-SDAG-NEXT: global_store_dword v1, v0, s[0:1]780; GFX10-SDAG-NEXT: s_endpgm781;782; GFX10-GISEL-LABEL: v_permlane16_b32_vvv_i32:783; GFX10-GISEL: ; %bb.0:784; GFX10-GISEL-NEXT: s_clause 0x1785; GFX10-GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c786; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24787; GFX10-GISEL-NEXT: v_readfirstlane_b32 s3, v0788; GFX10-GISEL-NEXT: s_mov_b32 null, 0789; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v1790; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0791; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)792; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2793; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s4794; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]795; GFX10-GISEL-NEXT: s_endpgm796;797; GFX11-SDAG-LABEL: v_permlane16_b32_vvv_i32:798; GFX11-SDAG: ; %bb.0:799; GFX11-SDAG-NEXT: s_clause 0x1800; GFX11-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x2c801; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24802; GFX11-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v0803; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 10804; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)805; GFX11-SDAG-NEXT: v_readfirstlane_b32 s3, v1806; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)807; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, s2808; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v0809; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 0810; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)811; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s3, s2812; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]813; GFX11-SDAG-NEXT: s_endpgm814;815; GFX11-GISEL-LABEL: v_permlane16_b32_vvv_i32:816; GFX11-GISEL: ; %bb.0:817; GFX11-GISEL-NEXT: s_clause 0x1818; GFX11-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c819; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24820; GFX11-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v0821; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 10822; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)823; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v0824; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)825; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s2826; GFX11-GISEL-NEXT: v_readfirstlane_b32 s3, v1827; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 0828; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s4829; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]830; GFX11-GISEL-NEXT: s_endpgm831;832; GFX12-SDAG-LABEL: v_permlane16_b32_vvv_i32:833; GFX12-SDAG: ; %bb.0:834; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x24835; GFX12-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v0836; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 10837; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)838; GFX12-SDAG-NEXT: v_readfirstlane_b32 s3, v1839; GFX12-SDAG-NEXT: s_wait_kmcnt 0x0840; GFX12-SDAG-NEXT: v_mov_b32_e32 v1, s2841; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v0842; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 0843; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)844; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)845; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s3, s2846; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]847; GFX12-SDAG-NEXT: s_endpgm848;849; GFX12-GISEL-LABEL: v_permlane16_b32_vvv_i32:850; GFX12-GISEL: ; %bb.0:851; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x24852; GFX12-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v0853; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 10854; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)855; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v0856; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0857; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s2858; GFX12-GISEL-NEXT: v_readfirstlane_b32 s3, v1859; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0860; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)861; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)862; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s4863; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]864; GFX12-GISEL-NEXT: s_endpgm865 %tidx = call i32 @llvm.amdgcn.workitem.id.x()866 %tidy = call i32 @llvm.amdgcn.workitem.id.y()867 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)868 store i32 %v, ptr addrspace(1) %out869 ret void870}871 872define amdgpu_kernel void @v_permlane16_b32_vvv_i64(ptr addrspace(1) %out, i64 %src0) {873; GFX10-SDAG-LABEL: v_permlane16_b32_vvv_i64:874; GFX10-SDAG: ; %bb.0:875; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24876; GFX10-SDAG-NEXT: s_mov_b32 null, 0877; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v0878; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v1879; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 0880; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)881; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s3882; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2883; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5884; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5885; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]886; GFX10-SDAG-NEXT: s_endpgm887;888; GFX10-GISEL-LABEL: v_permlane16_b32_vvv_i64:889; GFX10-GISEL: ; %bb.0:890; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24891; GFX10-GISEL-NEXT: s_mov_b32 null, 0892; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v0893; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v1894; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 0895; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)896; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2897; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s3898; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5899; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5900; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]901; GFX10-GISEL-NEXT: s_endpgm902;903; GFX11-LABEL: v_permlane16_b32_vvv_i64:904; GFX11: ; %bb.0:905; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24906; GFX11-NEXT: v_and_b32_e32 v1, 0x3ff, v0907; GFX11-NEXT: v_bfe_u32 v0, v0, 10, 10908; GFX11-NEXT: v_mov_b32_e32 v2, 0909; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)910; GFX11-NEXT: v_readfirstlane_b32 s5, v0911; GFX11-NEXT: s_waitcnt lgkmcnt(0)912; GFX11-NEXT: v_mov_b32_e32 v0, s2913; GFX11-NEXT: v_readfirstlane_b32 s4, v1914; GFX11-NEXT: v_mov_b32_e32 v1, s3915; GFX11-NEXT: v_permlane16_b32 v0, v0, s4, s5916; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)917; GFX11-NEXT: v_permlane16_b32 v1, v1, s4, s5918; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]919; GFX11-NEXT: s_endpgm920;921; GFX12-LABEL: v_permlane16_b32_vvv_i64:922; GFX12: ; %bb.0:923; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x24924; GFX12-NEXT: v_and_b32_e32 v1, 0x3ff, v0925; GFX12-NEXT: v_bfe_u32 v0, v0, 10, 10926; GFX12-NEXT: v_mov_b32_e32 v2, 0927; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)928; GFX12-NEXT: v_readfirstlane_b32 s5, v0929; GFX12-NEXT: s_wait_kmcnt 0x0930; GFX12-NEXT: v_mov_b32_e32 v0, s2931; GFX12-NEXT: v_readfirstlane_b32 s4, v1932; GFX12-NEXT: v_mov_b32_e32 v1, s3933; GFX12-NEXT: v_permlane16_b32 v0, v0, s4, s5934; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)935; GFX12-NEXT: v_permlane16_b32 v1, v1, s4, s5936; GFX12-NEXT: global_store_b64 v2, v[0:1], s[0:1]937; GFX12-NEXT: s_endpgm938 %tidx = call i32 @llvm.amdgcn.workitem.id.x()939 %tidy = call i32 @llvm.amdgcn.workitem.id.y()940 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)941 store i64 %v, ptr addrspace(1) %out942 ret void943}944 945define amdgpu_kernel void @v_permlane16_b32_vvv_f32(ptr addrspace(1) %out, float %src0) {946; GFX10-SDAG-LABEL: v_permlane16_b32_vvv_f32:947; GFX10-SDAG: ; %bb.0:948; GFX10-SDAG-NEXT: s_clause 0x1949; GFX10-SDAG-NEXT: s_load_dword s2, s[4:5], 0x2c950; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24951; GFX10-SDAG-NEXT: v_readfirstlane_b32 s3, v0952; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)953; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s2954; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v1955; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 0956; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s3, s2957; GFX10-SDAG-NEXT: global_store_dword v1, v0, s[0:1]958; GFX10-SDAG-NEXT: s_endpgm959;960; GFX10-GISEL-LABEL: v_permlane16_b32_vvv_f32:961; GFX10-GISEL: ; %bb.0:962; GFX10-GISEL-NEXT: s_clause 0x1963; GFX10-GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c964; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24965; GFX10-GISEL-NEXT: v_readfirstlane_b32 s3, v0966; GFX10-GISEL-NEXT: s_mov_b32 null, 0967; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v1968; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0969; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)970; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s2971; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s4972; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]973; GFX10-GISEL-NEXT: s_endpgm974;975; GFX11-SDAG-LABEL: v_permlane16_b32_vvv_f32:976; GFX11-SDAG: ; %bb.0:977; GFX11-SDAG-NEXT: s_clause 0x1978; GFX11-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x2c979; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24980; GFX11-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v0981; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 10982; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)983; GFX11-SDAG-NEXT: v_readfirstlane_b32 s3, v1984; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)985; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, s2986; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v0987; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 0988; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)989; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s3, s2990; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]991; GFX11-SDAG-NEXT: s_endpgm992;993; GFX11-GISEL-LABEL: v_permlane16_b32_vvv_f32:994; GFX11-GISEL: ; %bb.0:995; GFX11-GISEL-NEXT: s_clause 0x1996; GFX11-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c997; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24998; GFX11-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v0999; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101000; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)1001; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v01002; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1003; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s21004; GFX11-GISEL-NEXT: v_readfirstlane_b32 s3, v11005; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 01006; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s41007; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1008; GFX11-GISEL-NEXT: s_endpgm1009;1010; GFX12-SDAG-LABEL: v_permlane16_b32_vvv_f32:1011; GFX12-SDAG: ; %bb.0:1012; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x241013; GFX12-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v01014; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101015; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)1016; GFX12-SDAG-NEXT: v_readfirstlane_b32 s3, v11017; GFX12-SDAG-NEXT: s_wait_kmcnt 0x01018; GFX12-SDAG-NEXT: v_mov_b32_e32 v1, s21019; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v01020; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 01021; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)1022; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)1023; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s3, s21024; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1025; GFX12-SDAG-NEXT: s_endpgm1026;1027; GFX12-GISEL-LABEL: v_permlane16_b32_vvv_f32:1028; GFX12-GISEL: ; %bb.0:1029; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x241030; GFX12-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v01031; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101032; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1033; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v01034; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01035; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s21036; GFX12-GISEL-NEXT: v_readfirstlane_b32 s3, v11037; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 01038; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)1039; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1040; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s41041; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1042; GFX12-GISEL-NEXT: s_endpgm1043 %tidx = call i32 @llvm.amdgcn.workitem.id.x()1044 %tidy = call i32 @llvm.amdgcn.workitem.id.y()1045 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)1046 store float %v, ptr addrspace(1) %out1047 ret void1048}1049 1050define amdgpu_kernel void @v_permlane16_b32_vvv_f64(ptr addrspace(1) %out, double %src0) {1051; GFX10-SDAG-LABEL: v_permlane16_b32_vvv_f64:1052; GFX10-SDAG: ; %bb.0:1053; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241054; GFX10-SDAG-NEXT: s_mov_b32 null, 01055; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v01056; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v11057; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 01058; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1059; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s31060; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21061; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s51062; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s51063; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1064; GFX10-SDAG-NEXT: s_endpgm1065;1066; GFX10-GISEL-LABEL: v_permlane16_b32_vvv_f64:1067; GFX10-GISEL: ; %bb.0:1068; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241069; GFX10-GISEL-NEXT: s_mov_b32 null, 01070; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v01071; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v11072; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 01073; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1074; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21075; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s31076; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s51077; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s51078; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1079; GFX10-GISEL-NEXT: s_endpgm1080;1081; GFX11-LABEL: v_permlane16_b32_vvv_f64:1082; GFX11: ; %bb.0:1083; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241084; GFX11-NEXT: v_and_b32_e32 v1, 0x3ff, v01085; GFX11-NEXT: v_bfe_u32 v0, v0, 10, 101086; GFX11-NEXT: v_mov_b32_e32 v2, 01087; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)1088; GFX11-NEXT: v_readfirstlane_b32 s5, v01089; GFX11-NEXT: s_waitcnt lgkmcnt(0)1090; GFX11-NEXT: v_mov_b32_e32 v0, s21091; GFX11-NEXT: v_readfirstlane_b32 s4, v11092; GFX11-NEXT: v_mov_b32_e32 v1, s31093; GFX11-NEXT: v_permlane16_b32 v0, v0, s4, s51094; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1095; GFX11-NEXT: v_permlane16_b32 v1, v1, s4, s51096; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]1097; GFX11-NEXT: s_endpgm1098;1099; GFX12-LABEL: v_permlane16_b32_vvv_f64:1100; GFX12: ; %bb.0:1101; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x241102; GFX12-NEXT: v_and_b32_e32 v1, 0x3ff, v01103; GFX12-NEXT: v_bfe_u32 v0, v0, 10, 101104; GFX12-NEXT: v_mov_b32_e32 v2, 01105; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)1106; GFX12-NEXT: v_readfirstlane_b32 s5, v01107; GFX12-NEXT: s_wait_kmcnt 0x01108; GFX12-NEXT: v_mov_b32_e32 v0, s21109; GFX12-NEXT: v_readfirstlane_b32 s4, v11110; GFX12-NEXT: v_mov_b32_e32 v1, s31111; GFX12-NEXT: v_permlane16_b32 v0, v0, s4, s51112; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)1113; GFX12-NEXT: v_permlane16_b32 v1, v1, s4, s51114; GFX12-NEXT: global_store_b64 v2, v[0:1], s[0:1]1115; GFX12-NEXT: s_endpgm1116 %tidx = call i32 @llvm.amdgcn.workitem.id.x()1117 %tidy = call i32 @llvm.amdgcn.workitem.id.y()1118 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)1119 store double %v, ptr addrspace(1) %out1120 ret void1121}1122 1123define amdgpu_kernel void @v_permlane16_b32_vvs_i32(ptr addrspace(1) %out, i32 %src0, i32 %src2) {1124; GFX10-SDAG-LABEL: v_permlane16_b32_vvs_i32:1125; GFX10-SDAG: ; %bb.0:1126; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241127; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1128; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s21129; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v01130; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, 01131; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, s31132; GFX10-SDAG-NEXT: global_store_dword v0, v1, s[0:1]1133; GFX10-SDAG-NEXT: s_endpgm1134;1135; GFX10-GISEL-LABEL: v_permlane16_b32_vvs_i32:1136; GFX10-GISEL: ; %bb.0:1137; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241138; GFX10-GISEL-NEXT: s_mov_b32 null, 01139; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v01140; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 01141; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1142; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21143; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s31144; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]1145; GFX10-GISEL-NEXT: s_endpgm1146;1147; GFX11-SDAG-LABEL: v_permlane16_b32_vvs_i32:1148; GFX11-SDAG: ; %bb.0:1149; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241150; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)1151; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v01152; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1153; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v01154; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 01155; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, s31156; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1157; GFX11-SDAG-NEXT: s_endpgm1158;1159; GFX11-GISEL-LABEL: v_permlane16_b32_vvs_i32:1160; GFX11-GISEL: ; %bb.0:1161; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241162; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v01163; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)1164; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v01165; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1166; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s21167; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s31168; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1169; GFX11-GISEL-NEXT: s_endpgm1170;1171; GFX12-SDAG-LABEL: v_permlane16_b32_vvs_i32:1172; GFX12-SDAG: ; %bb.0:1173; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241174; GFX12-SDAG-NEXT: s_wait_kmcnt 0x01175; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v01176; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)1177; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v01178; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 01179; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)1180; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, s31181; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1182; GFX12-SDAG-NEXT: s_endpgm1183;1184; GFX12-GISEL-LABEL: v_permlane16_b32_vvs_i32:1185; GFX12-GISEL: ; %bb.0:1186; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241187; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v01188; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)1189; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v01190; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01191; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s21192; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s31193; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1194; GFX12-GISEL-NEXT: s_endpgm1195 %tidx = call i32 @llvm.amdgcn.workitem.id.x()1196 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %tidx, i32 %src2, i1 false, i1 false)1197 store i32 %v, ptr addrspace(1) %out1198 ret void1199}1200 1201define amdgpu_kernel void @v_permlane16_b32_vvs_i64(ptr addrspace(1) %out, i64 %src0, i32 %src2) {1202; GFX10-SDAG-LABEL: v_permlane16_b32_vvs_i64:1203; GFX10-SDAG: ; %bb.0:1204; GFX10-SDAG-NEXT: s_clause 0x11205; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241206; GFX10-SDAG-NEXT: s_load_dword s6, s[4:5], 0x341207; GFX10-SDAG-NEXT: s_mov_b32 null, 01208; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v01209; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 01210; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1211; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s31212; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21213; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s61214; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s61215; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1216; GFX10-SDAG-NEXT: s_endpgm1217;1218; GFX10-GISEL-LABEL: v_permlane16_b32_vvs_i64:1219; GFX10-GISEL: ; %bb.0:1220; GFX10-GISEL-NEXT: s_clause 0x11221; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241222; GFX10-GISEL-NEXT: s_load_dword s6, s[4:5], 0x341223; GFX10-GISEL-NEXT: s_mov_b32 null, 01224; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v01225; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 01226; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1227; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21228; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s31229; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s61230; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s61231; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1232; GFX10-GISEL-NEXT: s_endpgm1233;1234; GFX11-LABEL: v_permlane16_b32_vvs_i64:1235; GFX11: ; %bb.0:1236; GFX11-NEXT: s_clause 0x11237; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241238; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x341239; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v01240; GFX11-NEXT: s_waitcnt lgkmcnt(0)1241; GFX11-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31242; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)1243; GFX11-NEXT: v_readfirstlane_b32 s5, v01244; GFX11-NEXT: v_mov_b32_e32 v0, s21245; GFX11-NEXT: v_permlane16_b32 v1, v1, s5, s41246; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1247; GFX11-NEXT: v_permlane16_b32 v0, v0, s5, s41248; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]1249; GFX11-NEXT: s_endpgm1250;1251; GFX12-LABEL: v_permlane16_b32_vvs_i64:1252; GFX12: ; %bb.0:1253; GFX12-NEXT: s_clause 0x11254; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x241255; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x341256; GFX12-NEXT: v_and_b32_e32 v0, 0x3ff, v01257; GFX12-NEXT: s_wait_kmcnt 0x01258; GFX12-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31259; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)1260; GFX12-NEXT: v_readfirstlane_b32 s5, v01261; GFX12-NEXT: v_mov_b32_e32 v0, s21262; GFX12-NEXT: v_permlane16_b32 v1, v1, s5, s41263; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)1264; GFX12-NEXT: v_permlane16_b32 v0, v0, s5, s41265; GFX12-NEXT: global_store_b64 v2, v[0:1], s[0:1]1266; GFX12-NEXT: s_endpgm1267 %tidx = call i32 @llvm.amdgcn.workitem.id.x()1268 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %tidx, i32 %src2, i1 false, i1 false)1269 store i64 %v, ptr addrspace(1) %out1270 ret void1271}1272 1273define amdgpu_kernel void @v_permlane16_b32_vvs_f32(ptr addrspace(1) %out, float %src0, i32 %src2) {1274; GFX10-SDAG-LABEL: v_permlane16_b32_vvs_f32:1275; GFX10-SDAG: ; %bb.0:1276; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241277; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1278; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s21279; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v01280; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, 01281; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, s31282; GFX10-SDAG-NEXT: global_store_dword v0, v1, s[0:1]1283; GFX10-SDAG-NEXT: s_endpgm1284;1285; GFX10-GISEL-LABEL: v_permlane16_b32_vvs_f32:1286; GFX10-GISEL: ; %bb.0:1287; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241288; GFX10-GISEL-NEXT: s_mov_b32 null, 01289; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v01290; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 01291; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1292; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21293; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s31294; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]1295; GFX10-GISEL-NEXT: s_endpgm1296;1297; GFX11-SDAG-LABEL: v_permlane16_b32_vvs_f32:1298; GFX11-SDAG: ; %bb.0:1299; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241300; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)1301; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v01302; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1303; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v01304; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 01305; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, s31306; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1307; GFX11-SDAG-NEXT: s_endpgm1308;1309; GFX11-GISEL-LABEL: v_permlane16_b32_vvs_f32:1310; GFX11-GISEL: ; %bb.0:1311; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241312; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v01313; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)1314; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v01315; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1316; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s21317; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s31318; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1319; GFX11-GISEL-NEXT: s_endpgm1320;1321; GFX12-SDAG-LABEL: v_permlane16_b32_vvs_f32:1322; GFX12-SDAG: ; %bb.0:1323; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241324; GFX12-SDAG-NEXT: s_wait_kmcnt 0x01325; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v01326; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)1327; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v01328; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 01329; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)1330; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s2, s31331; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1332; GFX12-SDAG-NEXT: s_endpgm1333;1334; GFX12-GISEL-LABEL: v_permlane16_b32_vvs_f32:1335; GFX12-GISEL: ; %bb.0:1336; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241337; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v01338; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)1339; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v01340; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01341; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s21342; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s31343; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1344; GFX12-GISEL-NEXT: s_endpgm1345 %tidx = call i32 @llvm.amdgcn.workitem.id.x()1346 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %tidx, i32 %src2, i1 false, i1 false)1347 store float %v, ptr addrspace(1) %out1348 ret void1349}1350 1351define amdgpu_kernel void @v_permlane16_b32_vvs_f64(ptr addrspace(1) %out, double %src0, i32 %src2) {1352; GFX10-SDAG-LABEL: v_permlane16_b32_vvs_f64:1353; GFX10-SDAG: ; %bb.0:1354; GFX10-SDAG-NEXT: s_clause 0x11355; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241356; GFX10-SDAG-NEXT: s_load_dword s6, s[4:5], 0x341357; GFX10-SDAG-NEXT: s_mov_b32 null, 01358; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v01359; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 01360; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1361; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s31362; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21363; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s61364; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s61365; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1366; GFX10-SDAG-NEXT: s_endpgm1367;1368; GFX10-GISEL-LABEL: v_permlane16_b32_vvs_f64:1369; GFX10-GISEL: ; %bb.0:1370; GFX10-GISEL-NEXT: s_clause 0x11371; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241372; GFX10-GISEL-NEXT: s_load_dword s6, s[4:5], 0x341373; GFX10-GISEL-NEXT: s_mov_b32 null, 01374; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v01375; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 01376; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1377; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21378; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s31379; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s61380; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s61381; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1382; GFX10-GISEL-NEXT: s_endpgm1383;1384; GFX11-LABEL: v_permlane16_b32_vvs_f64:1385; GFX11: ; %bb.0:1386; GFX11-NEXT: s_clause 0x11387; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241388; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x341389; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v01390; GFX11-NEXT: s_waitcnt lgkmcnt(0)1391; GFX11-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31392; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)1393; GFX11-NEXT: v_readfirstlane_b32 s5, v01394; GFX11-NEXT: v_mov_b32_e32 v0, s21395; GFX11-NEXT: v_permlane16_b32 v1, v1, s5, s41396; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1397; GFX11-NEXT: v_permlane16_b32 v0, v0, s5, s41398; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]1399; GFX11-NEXT: s_endpgm1400;1401; GFX12-LABEL: v_permlane16_b32_vvs_f64:1402; GFX12: ; %bb.0:1403; GFX12-NEXT: s_clause 0x11404; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x241405; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x341406; GFX12-NEXT: v_and_b32_e32 v0, 0x3ff, v01407; GFX12-NEXT: s_wait_kmcnt 0x01408; GFX12-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31409; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)1410; GFX12-NEXT: v_readfirstlane_b32 s5, v01411; GFX12-NEXT: v_mov_b32_e32 v0, s21412; GFX12-NEXT: v_permlane16_b32 v1, v1, s5, s41413; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)1414; GFX12-NEXT: v_permlane16_b32 v0, v0, s5, s41415; GFX12-NEXT: global_store_b64 v2, v[0:1], s[0:1]1416; GFX12-NEXT: s_endpgm1417 %tidx = call i32 @llvm.amdgcn.workitem.id.x()1418 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %tidx, i32 %src2, i1 false, i1 false)1419 store double %v, ptr addrspace(1) %out1420 ret void1421}1422 1423define amdgpu_kernel void @v_permlane16_b32_vsv_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1) {1424; GFX10-SDAG-LABEL: v_permlane16_b32_vsv_i32:1425; GFX10-SDAG: ; %bb.0:1426; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241427; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1428; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21429; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v11430; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 01431; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s3, s21432; GFX10-SDAG-NEXT: global_store_dword v1, v0, s[0:1]1433; GFX10-SDAG-NEXT: s_endpgm1434;1435; GFX10-GISEL-LABEL: v_permlane16_b32_vsv_i32:1436; GFX10-GISEL: ; %bb.0:1437; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241438; GFX10-GISEL-NEXT: s_mov_b32 null, 01439; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v11440; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 01441; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1442; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21443; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s41444; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]1445; GFX10-GISEL-NEXT: s_endpgm1446;1447; GFX11-SDAG-LABEL: v_permlane16_b32_vsv_i32:1448; GFX11-SDAG: ; %bb.0:1449; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241450; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101451; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)1452; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, s21453; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)1454; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v01455; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 01456; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s3, s21457; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1458; GFX11-SDAG-NEXT: s_endpgm1459;1460; GFX11-GISEL-LABEL: v_permlane16_b32_vsv_i32:1461; GFX11-GISEL: ; %bb.0:1462; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241463; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101464; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 01465; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1466; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v01467; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1468; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s21469; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s41470; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1471; GFX11-GISEL-NEXT: s_endpgm1472;1473; GFX12-SDAG-LABEL: v_permlane16_b32_vsv_i32:1474; GFX12-SDAG: ; %bb.0:1475; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241476; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101477; GFX12-SDAG-NEXT: s_wait_kmcnt 0x01478; GFX12-SDAG-NEXT: v_mov_b32_e32 v1, s21479; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)1480; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v01481; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 01482; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)1483; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s3, s21484; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1485; GFX12-SDAG-NEXT: s_endpgm1486;1487; GFX12-GISEL-LABEL: v_permlane16_b32_vsv_i32:1488; GFX12-GISEL: ; %bb.0:1489; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241490; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101491; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 01492; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1493; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v01494; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01495; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s21496; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s41497; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1498; GFX12-GISEL-NEXT: s_endpgm1499 %tidy = call i32 @llvm.amdgcn.workitem.id.y()1500 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %tidy, i1 false, i1 false)1501 store i32 %v, ptr addrspace(1) %out1502 ret void1503}1504 1505define amdgpu_kernel void @v_permlane16_b32_vsv_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1) {1506; GFX10-SDAG-LABEL: v_permlane16_b32_vsv_i64:1507; GFX10-SDAG: ; %bb.0:1508; GFX10-SDAG-NEXT: s_clause 0x11509; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241510; GFX10-SDAG-NEXT: s_load_dword s6, s[4:5], 0x341511; GFX10-SDAG-NEXT: s_mov_b32 null, 01512; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v11513; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 01514; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1515; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s31516; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21517; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s41518; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s41519; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1520; GFX10-SDAG-NEXT: s_endpgm1521;1522; GFX10-GISEL-LABEL: v_permlane16_b32_vsv_i64:1523; GFX10-GISEL: ; %bb.0:1524; GFX10-GISEL-NEXT: s_clause 0x11525; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241526; GFX10-GISEL-NEXT: s_load_dword s6, s[4:5], 0x341527; GFX10-GISEL-NEXT: s_mov_b32 null, 01528; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v11529; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 01530; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1531; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21532; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s31533; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s41534; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s41535; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1536; GFX10-GISEL-NEXT: s_endpgm1537;1538; GFX11-SDAG-LABEL: v_permlane16_b32_vsv_i64:1539; GFX11-SDAG: ; %bb.0:1540; GFX11-SDAG-NEXT: s_clause 0x11541; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241542; GFX11-SDAG-NEXT: s_load_b32 s4, s[4:5], 0x341543; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101544; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 01545; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1546; GFX11-SDAG-NEXT: v_readfirstlane_b32 s5, v01547; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)1548; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s21549; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s51550; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)1551; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s51552; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]1553; GFX11-SDAG-NEXT: s_endpgm1554;1555; GFX11-GISEL-LABEL: v_permlane16_b32_vsv_i64:1556; GFX11-GISEL: ; %bb.0:1557; GFX11-GISEL-NEXT: s_clause 0x11558; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241559; GFX11-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x341560; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101561; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 01562; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1563; GFX11-GISEL-NEXT: v_readfirstlane_b32 s5, v01564; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1565; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31566; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s51567; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1568; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s51569; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1570; GFX11-GISEL-NEXT: s_endpgm1571;1572; GFX12-SDAG-LABEL: v_permlane16_b32_vsv_i64:1573; GFX12-SDAG: ; %bb.0:1574; GFX12-SDAG-NEXT: s_clause 0x11575; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241576; GFX12-SDAG-NEXT: s_load_b32 s4, s[4:5], 0x341577; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101578; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 01579; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1580; GFX12-SDAG-NEXT: v_readfirstlane_b32 s5, v01581; GFX12-SDAG-NEXT: s_wait_kmcnt 0x01582; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s21583; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s51584; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)1585; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s51586; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]1587; GFX12-SDAG-NEXT: s_endpgm1588;1589; GFX12-GISEL-LABEL: v_permlane16_b32_vsv_i64:1590; GFX12-GISEL: ; %bb.0:1591; GFX12-GISEL-NEXT: s_clause 0x11592; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241593; GFX12-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x341594; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101595; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 01596; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1597; GFX12-GISEL-NEXT: v_readfirstlane_b32 s5, v01598; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01599; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31600; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s51601; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1602; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s51603; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1604; GFX12-GISEL-NEXT: s_endpgm1605 %tidy = call i32 @llvm.amdgcn.workitem.id.y()1606 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %tidy, i1 false, i1 false)1607 store i64 %v, ptr addrspace(1) %out1608 ret void1609}1610 1611define amdgpu_kernel void @v_permlane16_b32_vsv_f32(ptr addrspace(1) %out, float %src0, i32 %src1) {1612; GFX10-SDAG-LABEL: v_permlane16_b32_vsv_f32:1613; GFX10-SDAG: ; %bb.0:1614; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241615; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1616; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21617; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v11618; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 01619; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s3, s21620; GFX10-SDAG-NEXT: global_store_dword v1, v0, s[0:1]1621; GFX10-SDAG-NEXT: s_endpgm1622;1623; GFX10-GISEL-LABEL: v_permlane16_b32_vsv_f32:1624; GFX10-GISEL: ; %bb.0:1625; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241626; GFX10-GISEL-NEXT: s_mov_b32 null, 01627; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v11628; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 01629; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1630; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21631; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s41632; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]1633; GFX10-GISEL-NEXT: s_endpgm1634;1635; GFX11-SDAG-LABEL: v_permlane16_b32_vsv_f32:1636; GFX11-SDAG: ; %bb.0:1637; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241638; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101639; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)1640; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, s21641; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)1642; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v01643; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 01644; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s3, s21645; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1646; GFX11-SDAG-NEXT: s_endpgm1647;1648; GFX11-GISEL-LABEL: v_permlane16_b32_vsv_f32:1649; GFX11-GISEL: ; %bb.0:1650; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241651; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101652; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 01653; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1654; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v01655; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1656; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s21657; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s41658; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1659; GFX11-GISEL-NEXT: s_endpgm1660;1661; GFX12-SDAG-LABEL: v_permlane16_b32_vsv_f32:1662; GFX12-SDAG: ; %bb.0:1663; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241664; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101665; GFX12-SDAG-NEXT: s_wait_kmcnt 0x01666; GFX12-SDAG-NEXT: v_mov_b32_e32 v1, s21667; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)1668; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v01669; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 01670; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)1671; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s3, s21672; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]1673; GFX12-SDAG-NEXT: s_endpgm1674;1675; GFX12-GISEL-LABEL: v_permlane16_b32_vsv_f32:1676; GFX12-GISEL: ; %bb.0:1677; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241678; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101679; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 01680; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1681; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v01682; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01683; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s21684; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s3, s41685; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]1686; GFX12-GISEL-NEXT: s_endpgm1687 %tidy = call i32 @llvm.amdgcn.workitem.id.y()1688 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %tidy, i1 false, i1 false)1689 store float %v, ptr addrspace(1) %out1690 ret void1691}1692 1693define amdgpu_kernel void @v_permlane16_b32_vsv_f64(ptr addrspace(1) %out, double %src0, i32 %src1) {1694; GFX10-SDAG-LABEL: v_permlane16_b32_vsv_f64:1695; GFX10-SDAG: ; %bb.0:1696; GFX10-SDAG-NEXT: s_clause 0x11697; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241698; GFX10-SDAG-NEXT: s_load_dword s6, s[4:5], 0x341699; GFX10-SDAG-NEXT: s_mov_b32 null, 01700; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v11701; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 01702; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1703; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s31704; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21705; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s41706; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s41707; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1708; GFX10-SDAG-NEXT: s_endpgm1709;1710; GFX10-GISEL-LABEL: v_permlane16_b32_vsv_f64:1711; GFX10-GISEL: ; %bb.0:1712; GFX10-GISEL-NEXT: s_clause 0x11713; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241714; GFX10-GISEL-NEXT: s_load_dword s6, s[4:5], 0x341715; GFX10-GISEL-NEXT: s_mov_b32 null, 01716; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v11717; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 01718; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1719; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21720; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s31721; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s41722; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s41723; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1724; GFX10-GISEL-NEXT: s_endpgm1725;1726; GFX11-SDAG-LABEL: v_permlane16_b32_vsv_f64:1727; GFX11-SDAG: ; %bb.0:1728; GFX11-SDAG-NEXT: s_clause 0x11729; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241730; GFX11-SDAG-NEXT: s_load_b32 s4, s[4:5], 0x341731; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101732; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 01733; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1734; GFX11-SDAG-NEXT: v_readfirstlane_b32 s5, v01735; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)1736; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s21737; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s51738; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)1739; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s51740; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]1741; GFX11-SDAG-NEXT: s_endpgm1742;1743; GFX11-GISEL-LABEL: v_permlane16_b32_vsv_f64:1744; GFX11-GISEL: ; %bb.0:1745; GFX11-GISEL-NEXT: s_clause 0x11746; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241747; GFX11-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x341748; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101749; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 01750; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1751; GFX11-GISEL-NEXT: v_readfirstlane_b32 s5, v01752; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1753; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31754; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s51755; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1756; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s51757; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1758; GFX11-GISEL-NEXT: s_endpgm1759;1760; GFX12-SDAG-LABEL: v_permlane16_b32_vsv_f64:1761; GFX12-SDAG: ; %bb.0:1762; GFX12-SDAG-NEXT: s_clause 0x11763; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241764; GFX12-SDAG-NEXT: s_load_b32 s4, s[4:5], 0x341765; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 101766; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 01767; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1768; GFX12-SDAG-NEXT: v_readfirstlane_b32 s5, v01769; GFX12-SDAG-NEXT: s_wait_kmcnt 0x01770; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s21771; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s51772; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)1773; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s51774; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]1775; GFX12-SDAG-NEXT: s_endpgm1776;1777; GFX12-GISEL-LABEL: v_permlane16_b32_vsv_f64:1778; GFX12-GISEL: ; %bb.0:1779; GFX12-GISEL-NEXT: s_clause 0x11780; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241781; GFX12-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x341782; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 101783; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 01784; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)1785; GFX12-GISEL-NEXT: v_readfirstlane_b32 s5, v01786; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01787; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31788; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s51789; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1790; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s51791; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1792; GFX12-GISEL-NEXT: s_endpgm1793 %tidy = call i32 @llvm.amdgcn.workitem.id.y()1794 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %tidy, i1 false, i1 false)1795 store double %v, ptr addrspace(1) %out1796 ret void1797}1798 1799define amdgpu_kernel void @v_permlane16_b32_vss_fi_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {1800; GFX10-LABEL: v_permlane16_b32_vss_fi_i32:1801; GFX10: ; %bb.0:1802; GFX10-NEXT: s_clause 0x11803; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241804; GFX10-NEXT: s_load_dword s6, s[4:5], 0x341805; GFX10-NEXT: v_mov_b32_e32 v1, 01806; GFX10-NEXT: s_waitcnt lgkmcnt(0)1807; GFX10-NEXT: v_mov_b32_e32 v0, s21808; GFX10-NEXT: v_permlane16_b32 v0, v0, s3, s6 op_sel:[1,0]1809; GFX10-NEXT: global_store_dword v1, v0, s[0:1]1810; GFX10-NEXT: s_endpgm1811;1812; GFX11-LABEL: v_permlane16_b32_vss_fi_i32:1813; GFX11: ; %bb.0:1814; GFX11-NEXT: s_clause 0x11815; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241816; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x341817; GFX11-NEXT: s_waitcnt lgkmcnt(0)1818; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s21819; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1820; GFX11-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,0]1821; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]1822; GFX11-NEXT: s_endpgm1823;1824; GFX12-LABEL: v_permlane16_b32_vss_fi_i32:1825; GFX12: ; %bb.0:1826; GFX12-NEXT: s_clause 0x11827; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x241828; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x341829; GFX12-NEXT: s_wait_kmcnt 0x01830; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s21831; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1832; GFX12-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,0]1833; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]1834; GFX12-NEXT: s_endpgm1835 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 true, i1 false)1836 store i32 %v, ptr addrspace(1) %out1837 ret void1838}1839 1840define amdgpu_kernel void @v_permlane16_b32_vss_fi_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {1841; GFX10-SDAG-LABEL: v_permlane16_b32_vss_fi_i64:1842; GFX10-SDAG: ; %bb.0:1843; GFX10-SDAG-NEXT: s_clause 0x11844; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241845; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341846; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 01847; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1848; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s31849; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21850; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,0]1851; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,0]1852; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1853; GFX10-SDAG-NEXT: s_endpgm1854;1855; GFX10-GISEL-LABEL: v_permlane16_b32_vss_fi_i64:1856; GFX10-GISEL: ; %bb.0:1857; GFX10-GISEL-NEXT: s_clause 0x11858; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241859; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341860; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 01861; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1862; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21863; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s31864; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,0]1865; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,0]1866; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1867; GFX10-GISEL-NEXT: s_endpgm1868;1869; GFX11-SDAG-LABEL: v_permlane16_b32_vss_fi_i64:1870; GFX11-SDAG: ; %bb.0:1871; GFX11-SDAG-NEXT: s_clause 0x11872; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241873; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x341874; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)1875; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31876; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s21877; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1878; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]1879; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]1880; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]1881; GFX11-SDAG-NEXT: s_endpgm1882;1883; GFX11-GISEL-LABEL: v_permlane16_b32_vss_fi_i64:1884; GFX11-GISEL: ; %bb.0:1885; GFX11-GISEL-NEXT: s_clause 0x11886; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241887; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341888; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 01889; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1890; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31891; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)1892; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]1893; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]1894; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1895; GFX11-GISEL-NEXT: s_endpgm1896;1897; GFX12-SDAG-LABEL: v_permlane16_b32_vss_fi_i64:1898; GFX12-SDAG: ; %bb.0:1899; GFX12-SDAG-NEXT: s_clause 0x11900; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x241901; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x341902; GFX12-SDAG-NEXT: s_wait_kmcnt 0x01903; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31904; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s21905; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1906; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]1907; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]1908; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]1909; GFX12-SDAG-NEXT: s_endpgm1910;1911; GFX12-GISEL-LABEL: v_permlane16_b32_vss_fi_i64:1912; GFX12-GISEL: ; %bb.0:1913; GFX12-GISEL-NEXT: s_clause 0x11914; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241915; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341916; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 01917; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01918; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31919; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)1920; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]1921; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]1922; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1923; GFX12-GISEL-NEXT: s_endpgm1924 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 true, i1 false)1925 store i64 %v, ptr addrspace(1) %out1926 ret void1927}1928 1929define amdgpu_kernel void @v_permlane16_b32_vss_fi_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {1930; GFX10-LABEL: v_permlane16_b32_vss_fi_f32:1931; GFX10: ; %bb.0:1932; GFX10-NEXT: s_clause 0x11933; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241934; GFX10-NEXT: s_load_dword s6, s[4:5], 0x341935; GFX10-NEXT: v_mov_b32_e32 v1, 01936; GFX10-NEXT: s_waitcnt lgkmcnt(0)1937; GFX10-NEXT: v_mov_b32_e32 v0, s21938; GFX10-NEXT: v_permlane16_b32 v0, v0, s3, s6 op_sel:[1,0]1939; GFX10-NEXT: global_store_dword v1, v0, s[0:1]1940; GFX10-NEXT: s_endpgm1941;1942; GFX11-LABEL: v_permlane16_b32_vss_fi_f32:1943; GFX11: ; %bb.0:1944; GFX11-NEXT: s_clause 0x11945; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x241946; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x341947; GFX11-NEXT: s_waitcnt lgkmcnt(0)1948; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s21949; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1950; GFX11-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,0]1951; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]1952; GFX11-NEXT: s_endpgm1953;1954; GFX12-LABEL: v_permlane16_b32_vss_fi_f32:1955; GFX12: ; %bb.0:1956; GFX12-NEXT: s_clause 0x11957; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x241958; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x341959; GFX12-NEXT: s_wait_kmcnt 0x01960; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s21961; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1962; GFX12-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,0]1963; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]1964; GFX12-NEXT: s_endpgm1965 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 true, i1 false)1966 store float %v, ptr addrspace(1) %out1967 ret void1968}1969 1970define amdgpu_kernel void @v_permlane16_b32_vss_fi_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {1971; GFX10-SDAG-LABEL: v_permlane16_b32_vss_fi_f64:1972; GFX10-SDAG: ; %bb.0:1973; GFX10-SDAG-NEXT: s_clause 0x11974; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241975; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341976; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 01977; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)1978; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s31979; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s21980; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,0]1981; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,0]1982; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1983; GFX10-SDAG-NEXT: s_endpgm1984;1985; GFX10-GISEL-LABEL: v_permlane16_b32_vss_fi_f64:1986; GFX10-GISEL: ; %bb.0:1987; GFX10-GISEL-NEXT: s_clause 0x11988; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241989; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341990; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 01991; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)1992; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s21993; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s31994; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,0]1995; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,0]1996; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1997; GFX10-GISEL-NEXT: s_endpgm1998;1999; GFX11-SDAG-LABEL: v_permlane16_b32_vss_fi_f64:2000; GFX11-SDAG: ; %bb.0:2001; GFX11-SDAG-NEXT: s_clause 0x12002; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242003; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342004; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)2005; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32006; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s22007; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2008; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]2009; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]2010; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2011; GFX11-SDAG-NEXT: s_endpgm2012;2013; GFX11-GISEL-LABEL: v_permlane16_b32_vss_fi_f64:2014; GFX11-GISEL: ; %bb.0:2015; GFX11-GISEL-NEXT: s_clause 0x12016; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242017; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342018; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 02019; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)2020; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32021; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2022; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]2023; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]2024; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2025; GFX11-GISEL-NEXT: s_endpgm2026;2027; GFX12-SDAG-LABEL: v_permlane16_b32_vss_fi_f64:2028; GFX12-SDAG: ; %bb.0:2029; GFX12-SDAG-NEXT: s_clause 0x12030; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242031; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342032; GFX12-SDAG-NEXT: s_wait_kmcnt 0x02033; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32034; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s22035; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2036; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]2037; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]2038; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2039; GFX12-SDAG-NEXT: s_endpgm2040;2041; GFX12-GISEL-LABEL: v_permlane16_b32_vss_fi_f64:2042; GFX12-GISEL: ; %bb.0:2043; GFX12-GISEL-NEXT: s_clause 0x12044; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242045; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342046; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 02047; GFX12-GISEL-NEXT: s_wait_kmcnt 0x02048; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32049; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2050; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]2051; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]2052; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2053; GFX12-GISEL-NEXT: s_endpgm2054 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 true, i1 false)2055 store double %v, ptr addrspace(1) %out2056 ret void2057}2058 2059define amdgpu_kernel void @v_permlane16_b32_vss_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {2060; GFX10-LABEL: v_permlane16_b32_vss_bc_i32:2061; GFX10: ; %bb.0:2062; GFX10-NEXT: s_clause 0x12063; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242064; GFX10-NEXT: s_load_dword s6, s[4:5], 0x342065; GFX10-NEXT: v_mov_b32_e32 v1, 02066; GFX10-NEXT: s_waitcnt lgkmcnt(0)2067; GFX10-NEXT: v_mov_b32_e32 v0, s22068; GFX10-NEXT: v_permlane16_b32 v0, v0, s3, s6 op_sel:[0,1]2069; GFX10-NEXT: global_store_dword v1, v0, s[0:1]2070; GFX10-NEXT: s_endpgm2071;2072; GFX11-LABEL: v_permlane16_b32_vss_bc_i32:2073; GFX11: ; %bb.0:2074; GFX11-NEXT: s_clause 0x12075; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242076; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x342077; GFX11-NEXT: s_waitcnt lgkmcnt(0)2078; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22079; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2080; GFX11-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[0,1]2081; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]2082; GFX11-NEXT: s_endpgm2083;2084; GFX12-LABEL: v_permlane16_b32_vss_bc_i32:2085; GFX12: ; %bb.0:2086; GFX12-NEXT: s_clause 0x12087; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x242088; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x342089; GFX12-NEXT: s_wait_kmcnt 0x02090; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22091; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2092; GFX12-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[0,1]2093; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]2094; GFX12-NEXT: s_endpgm2095 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 false, i1 true)2096 store i32 %v, ptr addrspace(1) %out2097 ret void2098}2099 2100define amdgpu_kernel void @v_permlane16_b32_vss_bc_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {2101; GFX10-SDAG-LABEL: v_permlane16_b32_vss_bc_i64:2102; GFX10-SDAG: ; %bb.0:2103; GFX10-SDAG-NEXT: s_clause 0x12104; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242105; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342106; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 02107; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)2108; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s32109; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s22110; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[0,1]2111; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[0,1]2112; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2113; GFX10-SDAG-NEXT: s_endpgm2114;2115; GFX10-GISEL-LABEL: v_permlane16_b32_vss_bc_i64:2116; GFX10-GISEL: ; %bb.0:2117; GFX10-GISEL-NEXT: s_clause 0x12118; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242119; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342120; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 02121; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)2122; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s22123; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s32124; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[0,1]2125; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[0,1]2126; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2127; GFX10-GISEL-NEXT: s_endpgm2128;2129; GFX11-SDAG-LABEL: v_permlane16_b32_vss_bc_i64:2130; GFX11-SDAG: ; %bb.0:2131; GFX11-SDAG-NEXT: s_clause 0x12132; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242133; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342134; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)2135; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32136; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s22137; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2138; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]2139; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]2140; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2141; GFX11-SDAG-NEXT: s_endpgm2142;2143; GFX11-GISEL-LABEL: v_permlane16_b32_vss_bc_i64:2144; GFX11-GISEL: ; %bb.0:2145; GFX11-GISEL-NEXT: s_clause 0x12146; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242147; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342148; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 02149; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)2150; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32151; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2152; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]2153; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]2154; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2155; GFX11-GISEL-NEXT: s_endpgm2156;2157; GFX12-SDAG-LABEL: v_permlane16_b32_vss_bc_i64:2158; GFX12-SDAG: ; %bb.0:2159; GFX12-SDAG-NEXT: s_clause 0x12160; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242161; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342162; GFX12-SDAG-NEXT: s_wait_kmcnt 0x02163; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32164; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s22165; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2166; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]2167; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]2168; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2169; GFX12-SDAG-NEXT: s_endpgm2170;2171; GFX12-GISEL-LABEL: v_permlane16_b32_vss_bc_i64:2172; GFX12-GISEL: ; %bb.0:2173; GFX12-GISEL-NEXT: s_clause 0x12174; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242175; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342176; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 02177; GFX12-GISEL-NEXT: s_wait_kmcnt 0x02178; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32179; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2180; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]2181; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]2182; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2183; GFX12-GISEL-NEXT: s_endpgm2184 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 false, i1 true)2185 store i64 %v, ptr addrspace(1) %out2186 ret void2187}2188 2189define amdgpu_kernel void @v_permlane16_b32_vss_bc_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {2190; GFX10-LABEL: v_permlane16_b32_vss_bc_f32:2191; GFX10: ; %bb.0:2192; GFX10-NEXT: s_clause 0x12193; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242194; GFX10-NEXT: s_load_dword s6, s[4:5], 0x342195; GFX10-NEXT: v_mov_b32_e32 v1, 02196; GFX10-NEXT: s_waitcnt lgkmcnt(0)2197; GFX10-NEXT: v_mov_b32_e32 v0, s22198; GFX10-NEXT: v_permlane16_b32 v0, v0, s3, s6 op_sel:[0,1]2199; GFX10-NEXT: global_store_dword v1, v0, s[0:1]2200; GFX10-NEXT: s_endpgm2201;2202; GFX11-LABEL: v_permlane16_b32_vss_bc_f32:2203; GFX11: ; %bb.0:2204; GFX11-NEXT: s_clause 0x12205; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242206; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x342207; GFX11-NEXT: s_waitcnt lgkmcnt(0)2208; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22209; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2210; GFX11-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[0,1]2211; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]2212; GFX11-NEXT: s_endpgm2213;2214; GFX12-LABEL: v_permlane16_b32_vss_bc_f32:2215; GFX12: ; %bb.0:2216; GFX12-NEXT: s_clause 0x12217; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x242218; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x342219; GFX12-NEXT: s_wait_kmcnt 0x02220; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22221; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2222; GFX12-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[0,1]2223; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]2224; GFX12-NEXT: s_endpgm2225 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 false, i1 true)2226 store float %v, ptr addrspace(1) %out2227 ret void2228}2229 2230define amdgpu_kernel void @v_permlane16_b32_vss_bc_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {2231; GFX10-SDAG-LABEL: v_permlane16_b32_vss_bc_f64:2232; GFX10-SDAG: ; %bb.0:2233; GFX10-SDAG-NEXT: s_clause 0x12234; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242235; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342236; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 02237; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)2238; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s32239; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s22240; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[0,1]2241; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[0,1]2242; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2243; GFX10-SDAG-NEXT: s_endpgm2244;2245; GFX10-GISEL-LABEL: v_permlane16_b32_vss_bc_f64:2246; GFX10-GISEL: ; %bb.0:2247; GFX10-GISEL-NEXT: s_clause 0x12248; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242249; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342250; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 02251; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)2252; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s22253; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s32254; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[0,1]2255; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[0,1]2256; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2257; GFX10-GISEL-NEXT: s_endpgm2258;2259; GFX11-SDAG-LABEL: v_permlane16_b32_vss_bc_f64:2260; GFX11-SDAG: ; %bb.0:2261; GFX11-SDAG-NEXT: s_clause 0x12262; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242263; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342264; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)2265; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32266; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s22267; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2268; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]2269; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]2270; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2271; GFX11-SDAG-NEXT: s_endpgm2272;2273; GFX11-GISEL-LABEL: v_permlane16_b32_vss_bc_f64:2274; GFX11-GISEL: ; %bb.0:2275; GFX11-GISEL-NEXT: s_clause 0x12276; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242277; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342278; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 02279; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)2280; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32281; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2282; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]2283; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]2284; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2285; GFX11-GISEL-NEXT: s_endpgm2286;2287; GFX12-SDAG-LABEL: v_permlane16_b32_vss_bc_f64:2288; GFX12-SDAG: ; %bb.0:2289; GFX12-SDAG-NEXT: s_clause 0x12290; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242291; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342292; GFX12-SDAG-NEXT: s_wait_kmcnt 0x02293; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32294; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s22295; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2296; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]2297; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]2298; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2299; GFX12-SDAG-NEXT: s_endpgm2300;2301; GFX12-GISEL-LABEL: v_permlane16_b32_vss_bc_f64:2302; GFX12-GISEL: ; %bb.0:2303; GFX12-GISEL-NEXT: s_clause 0x12304; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242305; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342306; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 02307; GFX12-GISEL-NEXT: s_wait_kmcnt 0x02308; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32309; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2310; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]2311; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]2312; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2313; GFX12-GISEL-NEXT: s_endpgm2314 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 false, i1 true)2315 store double %v, ptr addrspace(1) %out2316 ret void2317}2318 2319define amdgpu_kernel void @v_permlane16_b32_vss_fi_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {2320; GFX10-LABEL: v_permlane16_b32_vss_fi_bc_i32:2321; GFX10: ; %bb.0:2322; GFX10-NEXT: s_clause 0x12323; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242324; GFX10-NEXT: s_load_dword s6, s[4:5], 0x342325; GFX10-NEXT: v_mov_b32_e32 v1, 02326; GFX10-NEXT: s_waitcnt lgkmcnt(0)2327; GFX10-NEXT: v_mov_b32_e32 v0, s22328; GFX10-NEXT: v_permlane16_b32 v0, v0, s3, s6 op_sel:[1,1]2329; GFX10-NEXT: global_store_dword v1, v0, s[0:1]2330; GFX10-NEXT: s_endpgm2331;2332; GFX11-LABEL: v_permlane16_b32_vss_fi_bc_i32:2333; GFX11: ; %bb.0:2334; GFX11-NEXT: s_clause 0x12335; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242336; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x342337; GFX11-NEXT: s_waitcnt lgkmcnt(0)2338; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22339; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2340; GFX11-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,1]2341; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]2342; GFX11-NEXT: s_endpgm2343;2344; GFX12-LABEL: v_permlane16_b32_vss_fi_bc_i32:2345; GFX12: ; %bb.0:2346; GFX12-NEXT: s_clause 0x12347; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x242348; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x342349; GFX12-NEXT: s_wait_kmcnt 0x02350; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22351; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2352; GFX12-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,1]2353; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]2354; GFX12-NEXT: s_endpgm2355 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 true, i1 true)2356 store i32 %v, ptr addrspace(1) %out2357 ret void2358}2359 2360define amdgpu_kernel void @v_permlane16_b32_vss_fi_bc_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {2361; GFX10-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_i64:2362; GFX10-SDAG: ; %bb.0:2363; GFX10-SDAG-NEXT: s_clause 0x12364; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242365; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342366; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 02367; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)2368; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s32369; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s22370; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,1]2371; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,1]2372; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2373; GFX10-SDAG-NEXT: s_endpgm2374;2375; GFX10-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_i64:2376; GFX10-GISEL: ; %bb.0:2377; GFX10-GISEL-NEXT: s_clause 0x12378; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242379; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342380; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 02381; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)2382; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s22383; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s32384; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,1]2385; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,1]2386; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2387; GFX10-GISEL-NEXT: s_endpgm2388;2389; GFX11-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_i64:2390; GFX11-SDAG: ; %bb.0:2391; GFX11-SDAG-NEXT: s_clause 0x12392; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242393; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342394; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)2395; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32396; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s22397; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2398; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]2399; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]2400; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2401; GFX11-SDAG-NEXT: s_endpgm2402;2403; GFX11-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_i64:2404; GFX11-GISEL: ; %bb.0:2405; GFX11-GISEL-NEXT: s_clause 0x12406; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242407; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342408; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 02409; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)2410; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32411; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2412; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]2413; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]2414; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2415; GFX11-GISEL-NEXT: s_endpgm2416;2417; GFX12-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_i64:2418; GFX12-SDAG: ; %bb.0:2419; GFX12-SDAG-NEXT: s_clause 0x12420; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242421; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342422; GFX12-SDAG-NEXT: s_wait_kmcnt 0x02423; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32424; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s22425; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2426; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]2427; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]2428; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2429; GFX12-SDAG-NEXT: s_endpgm2430;2431; GFX12-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_i64:2432; GFX12-GISEL: ; %bb.0:2433; GFX12-GISEL-NEXT: s_clause 0x12434; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242435; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342436; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 02437; GFX12-GISEL-NEXT: s_wait_kmcnt 0x02438; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32439; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2440; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]2441; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]2442; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2443; GFX12-GISEL-NEXT: s_endpgm2444 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 true, i1 true)2445 store i64 %v, ptr addrspace(1) %out2446 ret void2447}2448 2449define amdgpu_kernel void @v_permlane16_b32_vss_fi_bc_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {2450; GFX10-LABEL: v_permlane16_b32_vss_fi_bc_f32:2451; GFX10: ; %bb.0:2452; GFX10-NEXT: s_clause 0x12453; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242454; GFX10-NEXT: s_load_dword s6, s[4:5], 0x342455; GFX10-NEXT: v_mov_b32_e32 v1, 02456; GFX10-NEXT: s_waitcnt lgkmcnt(0)2457; GFX10-NEXT: v_mov_b32_e32 v0, s22458; GFX10-NEXT: v_permlane16_b32 v0, v0, s3, s6 op_sel:[1,1]2459; GFX10-NEXT: global_store_dword v1, v0, s[0:1]2460; GFX10-NEXT: s_endpgm2461;2462; GFX11-LABEL: v_permlane16_b32_vss_fi_bc_f32:2463; GFX11: ; %bb.0:2464; GFX11-NEXT: s_clause 0x12465; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242466; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x342467; GFX11-NEXT: s_waitcnt lgkmcnt(0)2468; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22469; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2470; GFX11-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,1]2471; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]2472; GFX11-NEXT: s_endpgm2473;2474; GFX12-LABEL: v_permlane16_b32_vss_fi_bc_f32:2475; GFX12: ; %bb.0:2476; GFX12-NEXT: s_clause 0x12477; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x242478; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x342479; GFX12-NEXT: s_wait_kmcnt 0x02480; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22481; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2482; GFX12-NEXT: v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,1]2483; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]2484; GFX12-NEXT: s_endpgm2485 %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 true, i1 true)2486 store float %v, ptr addrspace(1) %out2487 ret void2488}2489 2490define amdgpu_kernel void @v_permlane16_b32_vss_fi_bc_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {2491; GFX10-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_f64:2492; GFX10-SDAG: ; %bb.0:2493; GFX10-SDAG-NEXT: s_clause 0x12494; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242495; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342496; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 02497; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)2498; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s32499; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s22500; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,1]2501; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,1]2502; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2503; GFX10-SDAG-NEXT: s_endpgm2504;2505; GFX10-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_f64:2506; GFX10-GISEL: ; %bb.0:2507; GFX10-GISEL-NEXT: s_clause 0x12508; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242509; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342510; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 02511; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)2512; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s22513; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s32514; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,1]2515; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,1]2516; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2517; GFX10-GISEL-NEXT: s_endpgm2518;2519; GFX11-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_f64:2520; GFX11-SDAG: ; %bb.0:2521; GFX11-SDAG-NEXT: s_clause 0x12522; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242523; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342524; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)2525; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32526; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s22527; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2528; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]2529; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]2530; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2531; GFX11-SDAG-NEXT: s_endpgm2532;2533; GFX11-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_f64:2534; GFX11-GISEL: ; %bb.0:2535; GFX11-GISEL-NEXT: s_clause 0x12536; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242537; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342538; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 02539; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)2540; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32541; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2542; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]2543; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]2544; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2545; GFX11-GISEL-NEXT: s_endpgm2546;2547; GFX12-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_f64:2548; GFX12-SDAG: ; %bb.0:2549; GFX12-SDAG-NEXT: s_clause 0x12550; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242551; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342552; GFX12-SDAG-NEXT: s_wait_kmcnt 0x02553; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32554; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s22555; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2556; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]2557; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]2558; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2559; GFX12-SDAG-NEXT: s_endpgm2560;2561; GFX12-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_f64:2562; GFX12-GISEL: ; %bb.0:2563; GFX12-GISEL-NEXT: s_clause 0x12564; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242565; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342566; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 02567; GFX12-GISEL-NEXT: s_wait_kmcnt 0x02568; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32569; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2570; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]2571; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]2572; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2573; GFX12-GISEL-NEXT: s_endpgm2574 %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 true, i1 true)2575 store double %v, ptr addrspace(1) %out2576 ret void2577}2578 2579define amdgpu_kernel void @v_permlanex16_b32_vss_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {2580; GFX10-LABEL: v_permlanex16_b32_vss_i32:2581; GFX10: ; %bb.0:2582; GFX10-NEXT: s_clause 0x12583; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242584; GFX10-NEXT: s_load_dword s6, s[4:5], 0x342585; GFX10-NEXT: v_mov_b32_e32 v1, 02586; GFX10-NEXT: s_waitcnt lgkmcnt(0)2587; GFX10-NEXT: v_mov_b32_e32 v0, s22588; GFX10-NEXT: v_permlanex16_b32 v0, v0, s3, s62589; GFX10-NEXT: global_store_dword v1, v0, s[0:1]2590; GFX10-NEXT: s_endpgm2591;2592; GFX11-LABEL: v_permlanex16_b32_vss_i32:2593; GFX11: ; %bb.0:2594; GFX11-NEXT: s_clause 0x12595; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242596; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x342597; GFX11-NEXT: s_waitcnt lgkmcnt(0)2598; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22599; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2600; GFX11-NEXT: v_permlanex16_b32 v0, v0, s3, s42601; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]2602; GFX11-NEXT: s_endpgm2603;2604; GFX12-LABEL: v_permlanex16_b32_vss_i32:2605; GFX12: ; %bb.0:2606; GFX12-NEXT: s_clause 0x12607; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x242608; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x342609; GFX12-NEXT: s_wait_kmcnt 0x02610; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22611; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2612; GFX12-NEXT: v_permlanex16_b32 v0, v0, s3, s42613; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]2614; GFX12-NEXT: s_endpgm2615 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 false, i1 false)2616 store i32 %v, ptr addrspace(1) %out2617 ret void2618}2619 2620define amdgpu_kernel void @v_permlanex16_b32_vss_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {2621; GFX10-LABEL: v_permlanex16_b32_vss_f32:2622; GFX10: ; %bb.0:2623; GFX10-NEXT: s_clause 0x12624; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242625; GFX10-NEXT: s_load_dword s6, s[4:5], 0x342626; GFX10-NEXT: v_mov_b32_e32 v1, 02627; GFX10-NEXT: s_waitcnt lgkmcnt(0)2628; GFX10-NEXT: v_mov_b32_e32 v0, s22629; GFX10-NEXT: v_permlanex16_b32 v0, v0, s3, s62630; GFX10-NEXT: global_store_dword v1, v0, s[0:1]2631; GFX10-NEXT: s_endpgm2632;2633; GFX11-LABEL: v_permlanex16_b32_vss_f32:2634; GFX11: ; %bb.0:2635; GFX11-NEXT: s_clause 0x12636; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x242637; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x342638; GFX11-NEXT: s_waitcnt lgkmcnt(0)2639; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22640; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2641; GFX11-NEXT: v_permlanex16_b32 v0, v0, s3, s42642; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]2643; GFX11-NEXT: s_endpgm2644;2645; GFX12-LABEL: v_permlanex16_b32_vss_f32:2646; GFX12: ; %bb.0:2647; GFX12-NEXT: s_clause 0x12648; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x242649; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x342650; GFX12-NEXT: s_wait_kmcnt 0x02651; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22652; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2653; GFX12-NEXT: v_permlanex16_b32 v0, v0, s3, s42654; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]2655; GFX12-NEXT: s_endpgm2656 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 false, i1 false)2657 store float %v, ptr addrspace(1) %out2658 ret void2659}2660 2661define amdgpu_kernel void @v_permlanex16_b32_vss_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {2662; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_i64:2663; GFX10-SDAG: ; %bb.0:2664; GFX10-SDAG-NEXT: s_clause 0x12665; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242666; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342667; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 02668; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)2669; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s32670; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s22671; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s72672; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s72673; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2674; GFX10-SDAG-NEXT: s_endpgm2675;2676; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_i64:2677; GFX10-GISEL: ; %bb.0:2678; GFX10-GISEL-NEXT: s_clause 0x12679; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242680; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342681; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 02682; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)2683; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s22684; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s32685; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s72686; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s72687; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2688; GFX10-GISEL-NEXT: s_endpgm2689;2690; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_i64:2691; GFX11-SDAG: ; %bb.0:2692; GFX11-SDAG-NEXT: s_clause 0x12693; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242694; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342695; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)2696; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32697; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s22698; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2699; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s52700; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s52701; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2702; GFX11-SDAG-NEXT: s_endpgm2703;2704; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_i64:2705; GFX11-GISEL: ; %bb.0:2706; GFX11-GISEL-NEXT: s_clause 0x12707; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242708; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342709; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 02710; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)2711; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32712; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2713; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s52714; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s52715; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2716; GFX11-GISEL-NEXT: s_endpgm2717;2718; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_i64:2719; GFX12-SDAG: ; %bb.0:2720; GFX12-SDAG-NEXT: s_clause 0x12721; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242722; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342723; GFX12-SDAG-NEXT: s_wait_kmcnt 0x02724; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32725; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s22726; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2727; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s52728; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s52729; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2730; GFX12-SDAG-NEXT: s_endpgm2731;2732; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_i64:2733; GFX12-GISEL: ; %bb.0:2734; GFX12-GISEL-NEXT: s_clause 0x12735; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242736; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342737; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 02738; GFX12-GISEL-NEXT: s_wait_kmcnt 0x02739; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32740; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2741; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s52742; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s52743; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2744; GFX12-GISEL-NEXT: s_endpgm2745 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 false, i1 false)2746 store i64 %v, ptr addrspace(1) %out2747 ret void2748}2749 2750define amdgpu_kernel void @v_permlanex16_b32_vss_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {2751; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_f64:2752; GFX10-SDAG: ; %bb.0:2753; GFX10-SDAG-NEXT: s_clause 0x12754; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242755; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342756; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 02757; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)2758; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s32759; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s22760; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s72761; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s72762; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2763; GFX10-SDAG-NEXT: s_endpgm2764;2765; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_f64:2766; GFX10-GISEL: ; %bb.0:2767; GFX10-GISEL-NEXT: s_clause 0x12768; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242769; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x342770; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 02771; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)2772; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s22773; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s32774; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s72775; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s72776; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2777; GFX10-GISEL-NEXT: s_endpgm2778;2779; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_f64:2780; GFX11-SDAG: ; %bb.0:2781; GFX11-SDAG-NEXT: s_clause 0x12782; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242783; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342784; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)2785; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32786; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s22787; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2788; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s52789; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s52790; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2791; GFX11-SDAG-NEXT: s_endpgm2792;2793; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_f64:2794; GFX11-GISEL: ; %bb.0:2795; GFX11-GISEL-NEXT: s_clause 0x12796; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242797; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342798; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 02799; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)2800; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32801; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2802; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s52803; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s52804; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2805; GFX11-GISEL-NEXT: s_endpgm2806;2807; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_f64:2808; GFX12-SDAG: ; %bb.0:2809; GFX12-SDAG-NEXT: s_clause 0x12810; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242811; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x342812; GFX12-SDAG-NEXT: s_wait_kmcnt 0x02813; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32814; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s22815; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2816; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s52817; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s52818; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2819; GFX12-SDAG-NEXT: s_endpgm2820;2821; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_f64:2822; GFX12-GISEL: ; %bb.0:2823; GFX12-GISEL-NEXT: s_clause 0x12824; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242825; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342826; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 02827; GFX12-GISEL-NEXT: s_wait_kmcnt 0x02828; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32829; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2830; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s52831; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s52832; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2833; GFX12-GISEL-NEXT: s_endpgm2834 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 false, i1 false)2835 store double %v, ptr addrspace(1) %out2836 ret void2837}2838 2839define amdgpu_kernel void @v_permlanex16_b32_vii_i32(ptr addrspace(1) %out, i32 %src0) {2840; GFX10-LABEL: v_permlanex16_b32_vii_i32:2841; GFX10: ; %bb.0:2842; GFX10-NEXT: s_clause 0x12843; GFX10-NEXT: s_load_dword s2, s[4:5], 0x2c2844; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242845; GFX10-NEXT: v_mov_b32_e32 v1, 02846; GFX10-NEXT: s_waitcnt lgkmcnt(0)2847; GFX10-NEXT: v_mov_b32_e32 v0, s22848; GFX10-NEXT: v_permlanex16_b32 v0, v0, 1, 22849; GFX10-NEXT: global_store_dword v1, v0, s[0:1]2850; GFX10-NEXT: s_endpgm2851;2852; GFX11-LABEL: v_permlanex16_b32_vii_i32:2853; GFX11: ; %bb.0:2854; GFX11-NEXT: s_clause 0x12855; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c2856; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242857; GFX11-NEXT: s_waitcnt lgkmcnt(0)2858; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22859; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2860; GFX11-NEXT: v_permlanex16_b32 v0, v0, 1, 22861; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]2862; GFX11-NEXT: s_endpgm2863;2864; GFX12-LABEL: v_permlanex16_b32_vii_i32:2865; GFX12: ; %bb.0:2866; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x242867; GFX12-NEXT: s_wait_kmcnt 0x02868; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22869; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2870; GFX12-NEXT: v_permlanex16_b32 v0, v0, 1, 22871; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]2872; GFX12-NEXT: s_endpgm2873 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 1, i32 2, i1 false, i1 false)2874 store i32 %v, ptr addrspace(1) %out2875 ret void2876}2877 2878define amdgpu_kernel void @v_permlanex16_b32_vii_f32(ptr addrspace(1) %out, float %src0) {2879; GFX10-LABEL: v_permlanex16_b32_vii_f32:2880; GFX10: ; %bb.0:2881; GFX10-NEXT: s_clause 0x12882; GFX10-NEXT: s_load_dword s2, s[4:5], 0x2c2883; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242884; GFX10-NEXT: v_mov_b32_e32 v1, 02885; GFX10-NEXT: s_waitcnt lgkmcnt(0)2886; GFX10-NEXT: v_mov_b32_e32 v0, s22887; GFX10-NEXT: v_permlanex16_b32 v0, v0, 1, 22888; GFX10-NEXT: global_store_dword v1, v0, s[0:1]2889; GFX10-NEXT: s_endpgm2890;2891; GFX11-LABEL: v_permlanex16_b32_vii_f32:2892; GFX11: ; %bb.0:2893; GFX11-NEXT: s_clause 0x12894; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c2895; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x242896; GFX11-NEXT: s_waitcnt lgkmcnt(0)2897; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22898; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2899; GFX11-NEXT: v_permlanex16_b32 v0, v0, 1, 22900; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]2901; GFX11-NEXT: s_endpgm2902;2903; GFX12-LABEL: v_permlanex16_b32_vii_f32:2904; GFX12: ; %bb.0:2905; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x242906; GFX12-NEXT: s_wait_kmcnt 0x02907; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s22908; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2909; GFX12-NEXT: v_permlanex16_b32 v0, v0, 1, 22910; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]2911; GFX12-NEXT: s_endpgm2912 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 1, i32 2, i1 false, i1 false)2913 store float %v, ptr addrspace(1) %out2914 ret void2915}2916 2917define amdgpu_kernel void @v_permlanex16_b32_vii_i64(ptr addrspace(1) %out, i64 %src0) {2918; GFX10-SDAG-LABEL: v_permlanex16_b32_vii_i64:2919; GFX10-SDAG: ; %bb.0:2920; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242921; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 02922; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)2923; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s32924; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s22925; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, 1, 22926; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, 1, 22927; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2928; GFX10-SDAG-NEXT: s_endpgm2929;2930; GFX10-GISEL-LABEL: v_permlanex16_b32_vii_i64:2931; GFX10-GISEL: ; %bb.0:2932; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242933; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 02934; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)2935; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s22936; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s32937; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, 1, 22938; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, 1, 22939; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2940; GFX10-GISEL-NEXT: s_endpgm2941;2942; GFX11-SDAG-LABEL: v_permlanex16_b32_vii_i64:2943; GFX11-SDAG: ; %bb.0:2944; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242945; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)2946; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32947; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s22948; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2949; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, 1, 22950; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, 1, 22951; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2952; GFX11-SDAG-NEXT: s_endpgm2953;2954; GFX11-GISEL-LABEL: v_permlanex16_b32_vii_i64:2955; GFX11-GISEL: ; %bb.0:2956; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242957; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 02958; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)2959; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32960; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2961; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, 1, 22962; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, 1, 22963; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2964; GFX11-GISEL-NEXT: s_endpgm2965;2966; GFX12-SDAG-LABEL: v_permlanex16_b32_vii_i64:2967; GFX12-SDAG: ; %bb.0:2968; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x242969; GFX12-SDAG-NEXT: s_wait_kmcnt 0x02970; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s32971; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s22972; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2973; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, 1, 22974; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, 1, 22975; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]2976; GFX12-SDAG-NEXT: s_endpgm2977;2978; GFX12-GISEL-LABEL: v_permlanex16_b32_vii_i64:2979; GFX12-GISEL: ; %bb.0:2980; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242981; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 02982; GFX12-GISEL-NEXT: s_wait_kmcnt 0x02983; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s32984; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)2985; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, 1, 22986; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, 1, 22987; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2988; GFX12-GISEL-NEXT: s_endpgm2989 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 1, i32 2, i1 false, i1 false)2990 store i64 %v, ptr addrspace(1) %out2991 ret void2992}2993 2994define amdgpu_kernel void @v_permlanex16_b32_vii_f64(ptr addrspace(1) %out, double %src0) {2995; GFX10-SDAG-LABEL: v_permlanex16_b32_vii_f64:2996; GFX10-SDAG: ; %bb.0:2997; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242998; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 02999; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3000; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s33001; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23002; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, 1, 23003; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, 1, 23004; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3005; GFX10-SDAG-NEXT: s_endpgm3006;3007; GFX10-GISEL-LABEL: v_permlanex16_b32_vii_f64:3008; GFX10-GISEL: ; %bb.0:3009; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243010; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 03011; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3012; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23013; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s33014; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, 1, 23015; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, 1, 23016; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3017; GFX10-GISEL-NEXT: s_endpgm3018;3019; GFX11-SDAG-LABEL: v_permlanex16_b32_vii_f64:3020; GFX11-SDAG: ; %bb.0:3021; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243022; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)3023; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33024; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s23025; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3026; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, 1, 23027; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, 1, 23028; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]3029; GFX11-SDAG-NEXT: s_endpgm3030;3031; GFX11-GISEL-LABEL: v_permlanex16_b32_vii_f64:3032; GFX11-GISEL: ; %bb.0:3033; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243034; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 03035; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)3036; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s33037; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)3038; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, 1, 23039; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, 1, 23040; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]3041; GFX11-GISEL-NEXT: s_endpgm3042;3043; GFX12-SDAG-LABEL: v_permlanex16_b32_vii_f64:3044; GFX12-SDAG: ; %bb.0:3045; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243046; GFX12-SDAG-NEXT: s_wait_kmcnt 0x03047; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33048; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s23049; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3050; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, 1, 23051; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, 1, 23052; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]3053; GFX12-SDAG-NEXT: s_endpgm3054;3055; GFX12-GISEL-LABEL: v_permlanex16_b32_vii_f64:3056; GFX12-GISEL: ; %bb.0:3057; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243058; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 03059; GFX12-GISEL-NEXT: s_wait_kmcnt 0x03060; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s33061; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)3062; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, 1, 23063; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, 1, 23064; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]3065; GFX12-GISEL-NEXT: s_endpgm3066 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 1, i32 2, i1 false, i1 false)3067 store double %v, ptr addrspace(1) %out3068 ret void3069}3070 3071; FIXME-GFX10PLUS: It is allowed to have both immediates as literals3072define amdgpu_kernel void @v_permlanex16_b32_vll_i32(ptr addrspace(1) %out, i32 %src0) {3073; GFX10-LABEL: v_permlanex16_b32_vll_i32:3074; GFX10: ; %bb.0:3075; GFX10-NEXT: s_clause 0x13076; GFX10-NEXT: s_load_dword s2, s[4:5], 0x2c3077; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x243078; GFX10-NEXT: v_mov_b32_e32 v1, 03079; GFX10-NEXT: s_waitcnt lgkmcnt(0)3080; GFX10-NEXT: v_mov_b32_e32 v0, s23081; GFX10-NEXT: s_movk_i32 s2, 0x12343082; GFX10-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13083; GFX10-NEXT: global_store_dword v1, v0, s[0:1]3084; GFX10-NEXT: s_endpgm3085;3086; GFX11-LABEL: v_permlanex16_b32_vll_i32:3087; GFX11: ; %bb.0:3088; GFX11-NEXT: s_clause 0x13089; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c3090; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x243091; GFX11-NEXT: s_waitcnt lgkmcnt(0)3092; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s23093; GFX11-NEXT: s_movk_i32 s2, 0x12343094; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)3095; GFX11-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13096; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]3097; GFX11-NEXT: s_endpgm3098;3099; GFX12-LABEL: v_permlanex16_b32_vll_i32:3100; GFX12: ; %bb.0:3101; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x243102; GFX12-NEXT: s_wait_kmcnt 0x03103; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s23104; GFX12-NEXT: s_movk_i32 s2, 0x12343105; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3106; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3107; GFX12-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13108; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]3109; GFX12-NEXT: s_endpgm3110 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 4660, i32 49617, i1 false, i1 false)3111 store i32 %v, ptr addrspace(1) %out3112 ret void3113}3114 3115define amdgpu_kernel void @v_permlanex16_b32_vll_f32(ptr addrspace(1) %out, float %src0) {3116; GFX10-LABEL: v_permlanex16_b32_vll_f32:3117; GFX10: ; %bb.0:3118; GFX10-NEXT: s_clause 0x13119; GFX10-NEXT: s_load_dword s2, s[4:5], 0x2c3120; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x243121; GFX10-NEXT: v_mov_b32_e32 v1, 03122; GFX10-NEXT: s_waitcnt lgkmcnt(0)3123; GFX10-NEXT: v_mov_b32_e32 v0, s23124; GFX10-NEXT: s_movk_i32 s2, 0x12343125; GFX10-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13126; GFX10-NEXT: global_store_dword v1, v0, s[0:1]3127; GFX10-NEXT: s_endpgm3128;3129; GFX11-LABEL: v_permlanex16_b32_vll_f32:3130; GFX11: ; %bb.0:3131; GFX11-NEXT: s_clause 0x13132; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x2c3133; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x243134; GFX11-NEXT: s_waitcnt lgkmcnt(0)3135; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s23136; GFX11-NEXT: s_movk_i32 s2, 0x12343137; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)3138; GFX11-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13139; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]3140; GFX11-NEXT: s_endpgm3141;3142; GFX12-LABEL: v_permlanex16_b32_vll_f32:3143; GFX12: ; %bb.0:3144; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x243145; GFX12-NEXT: s_wait_kmcnt 0x03146; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s23147; GFX12-NEXT: s_movk_i32 s2, 0x12343148; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3149; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3150; GFX12-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13151; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]3152; GFX12-NEXT: s_endpgm3153 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 4660, i32 49617, i1 false, i1 false)3154 store float %v, ptr addrspace(1) %out3155 ret void3156}3157 3158define amdgpu_kernel void @v_permlanex16_b32_vll_i64(ptr addrspace(1) %out, i64 %src0) {3159; GFX10-SDAG-LABEL: v_permlanex16_b32_vll_i64:3160; GFX10-SDAG: ; %bb.0:3161; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243162; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 03163; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3164; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s33165; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23166; GFX10-SDAG-NEXT: s_movk_i32 s2, 0x12343167; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13168; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13169; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3170; GFX10-SDAG-NEXT: s_endpgm3171;3172; GFX10-GISEL-LABEL: v_permlanex16_b32_vll_i64:3173; GFX10-GISEL: ; %bb.0:3174; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243175; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 03176; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3177; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23178; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s33179; GFX10-GISEL-NEXT: s_movk_i32 s2, 0x12343180; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13181; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13182; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3183; GFX10-GISEL-NEXT: s_endpgm3184;3185; GFX11-SDAG-LABEL: v_permlanex16_b32_vll_i64:3186; GFX11-SDAG: ; %bb.0:3187; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243188; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)3189; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33190; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s23191; GFX11-SDAG-NEXT: s_movk_i32 s2, 0x12343192; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)3193; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13194; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)3195; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13196; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]3197; GFX11-SDAG-NEXT: s_endpgm3198;3199; GFX11-GISEL-LABEL: v_permlanex16_b32_vll_i64:3200; GFX11-GISEL: ; %bb.0:3201; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243202; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 03203; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)3204; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s33205; GFX11-GISEL-NEXT: s_movk_i32 s2, 0x12343206; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)3207; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13208; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)3209; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13210; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]3211; GFX11-GISEL-NEXT: s_endpgm3212;3213; GFX12-SDAG-LABEL: v_permlanex16_b32_vll_i64:3214; GFX12-SDAG: ; %bb.0:3215; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243216; GFX12-SDAG-NEXT: s_wait_kmcnt 0x03217; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33218; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s23219; GFX12-SDAG-NEXT: s_movk_i32 s2, 0x12343220; GFX12-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0)3221; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3222; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13223; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13224; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]3225; GFX12-SDAG-NEXT: s_endpgm3226;3227; GFX12-GISEL-LABEL: v_permlanex16_b32_vll_i64:3228; GFX12-GISEL: ; %bb.0:3229; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243230; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 03231; GFX12-GISEL-NEXT: s_wait_kmcnt 0x03232; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s33233; GFX12-GISEL-NEXT: s_movk_i32 s2, 0x12343234; GFX12-GISEL-NEXT: s_wait_alu depctr_sa_sdst(0)3235; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)3236; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13237; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13238; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]3239; GFX12-GISEL-NEXT: s_endpgm3240 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 4660, i32 49617, i1 false, i1 false)3241 store i64 %v, ptr addrspace(1) %out3242 ret void3243}3244 3245define amdgpu_kernel void @v_permlanex16_b32_vll_f64(ptr addrspace(1) %out, double %src0) {3246; GFX10-SDAG-LABEL: v_permlanex16_b32_vll_f64:3247; GFX10-SDAG: ; %bb.0:3248; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243249; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 03250; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3251; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s33252; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23253; GFX10-SDAG-NEXT: s_movk_i32 s2, 0x12343254; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13255; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13256; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3257; GFX10-SDAG-NEXT: s_endpgm3258;3259; GFX10-GISEL-LABEL: v_permlanex16_b32_vll_f64:3260; GFX10-GISEL: ; %bb.0:3261; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243262; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 03263; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3264; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23265; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s33266; GFX10-GISEL-NEXT: s_movk_i32 s2, 0x12343267; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13268; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13269; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3270; GFX10-GISEL-NEXT: s_endpgm3271;3272; GFX11-SDAG-LABEL: v_permlanex16_b32_vll_f64:3273; GFX11-SDAG: ; %bb.0:3274; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243275; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)3276; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33277; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s23278; GFX11-SDAG-NEXT: s_movk_i32 s2, 0x12343279; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)3280; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13281; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)3282; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13283; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]3284; GFX11-SDAG-NEXT: s_endpgm3285;3286; GFX11-GISEL-LABEL: v_permlanex16_b32_vll_f64:3287; GFX11-GISEL: ; %bb.0:3288; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243289; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 03290; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)3291; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s33292; GFX11-GISEL-NEXT: s_movk_i32 s2, 0x12343293; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)3294; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13295; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)3296; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13297; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]3298; GFX11-GISEL-NEXT: s_endpgm3299;3300; GFX12-SDAG-LABEL: v_permlanex16_b32_vll_f64:3301; GFX12-SDAG: ; %bb.0:3302; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243303; GFX12-SDAG-NEXT: s_wait_kmcnt 0x03304; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33305; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s23306; GFX12-SDAG-NEXT: s_movk_i32 s2, 0x12343307; GFX12-SDAG-NEXT: s_wait_alu depctr_sa_sdst(0)3308; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)3309; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13310; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13311; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]3312; GFX12-SDAG-NEXT: s_endpgm3313;3314; GFX12-GISEL-LABEL: v_permlanex16_b32_vll_f64:3315; GFX12-GISEL: ; %bb.0:3316; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243317; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 03318; GFX12-GISEL-NEXT: s_wait_kmcnt 0x03319; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s33320; GFX12-GISEL-NEXT: s_movk_i32 s2, 0x12343321; GFX12-GISEL-NEXT: s_wait_alu depctr_sa_sdst(0)3322; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)3323; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s2, 0xc1d13324; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s2, 0xc1d13325; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]3326; GFX12-GISEL-NEXT: s_endpgm3327 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 4660, i32 49617, i1 false, i1 false)3328 store double %v, ptr addrspace(1) %out3329 ret void3330}3331 3332define amdgpu_kernel void @v_permlanex16_b32_vvv_i32(ptr addrspace(1) %out, i32 %src0) {3333; GFX10-SDAG-LABEL: v_permlanex16_b32_vvv_i32:3334; GFX10-SDAG: ; %bb.0:3335; GFX10-SDAG-NEXT: s_clause 0x13336; GFX10-SDAG-NEXT: s_load_dword s2, s[4:5], 0x2c3337; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x243338; GFX10-SDAG-NEXT: v_readfirstlane_b32 s3, v03339; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3340; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23341; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v13342; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 03343; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s3, s23344; GFX10-SDAG-NEXT: global_store_dword v1, v0, s[0:1]3345; GFX10-SDAG-NEXT: s_endpgm3346;3347; GFX10-GISEL-LABEL: v_permlanex16_b32_vvv_i32:3348; GFX10-GISEL: ; %bb.0:3349; GFX10-GISEL-NEXT: s_clause 0x13350; GFX10-GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c3351; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x243352; GFX10-GISEL-NEXT: v_readfirstlane_b32 s3, v03353; GFX10-GISEL-NEXT: s_mov_b32 null, 03354; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v13355; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 03356; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3357; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23358; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s43359; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]3360; GFX10-GISEL-NEXT: s_endpgm3361;3362; GFX11-SDAG-LABEL: v_permlanex16_b32_vvv_i32:3363; GFX11-SDAG: ; %bb.0:3364; GFX11-SDAG-NEXT: s_clause 0x13365; GFX11-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x2c3366; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x243367; GFX11-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v03368; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 103369; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)3370; GFX11-SDAG-NEXT: v_readfirstlane_b32 s3, v13371; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)3372; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, s23373; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v03374; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 03375; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)3376; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s3, s23377; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]3378; GFX11-SDAG-NEXT: s_endpgm3379;3380; GFX11-GISEL-LABEL: v_permlanex16_b32_vvv_i32:3381; GFX11-GISEL: ; %bb.0:3382; GFX11-GISEL-NEXT: s_clause 0x13383; GFX11-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c3384; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x243385; GFX11-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v03386; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 103387; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)3388; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v03389; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)3390; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s23391; GFX11-GISEL-NEXT: v_readfirstlane_b32 s3, v13392; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 03393; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s43394; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3395; GFX11-GISEL-NEXT: s_endpgm3396;3397; GFX12-SDAG-LABEL: v_permlanex16_b32_vvv_i32:3398; GFX12-SDAG: ; %bb.0:3399; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x243400; GFX12-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v03401; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 103402; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)3403; GFX12-SDAG-NEXT: v_readfirstlane_b32 s3, v13404; GFX12-SDAG-NEXT: s_wait_kmcnt 0x03405; GFX12-SDAG-NEXT: v_mov_b32_e32 v1, s23406; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v03407; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 03408; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)3409; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)3410; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s3, s23411; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]3412; GFX12-SDAG-NEXT: s_endpgm3413;3414; GFX12-GISEL-LABEL: v_permlanex16_b32_vvv_i32:3415; GFX12-GISEL: ; %bb.0:3416; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x243417; GFX12-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v03418; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 103419; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3420; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v03421; GFX12-GISEL-NEXT: s_wait_kmcnt 0x03422; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s23423; GFX12-GISEL-NEXT: v_readfirstlane_b32 s3, v13424; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 03425; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)3426; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)3427; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s43428; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3429; GFX12-GISEL-NEXT: s_endpgm3430 %tidx = call i32 @llvm.amdgcn.workitem.id.x()3431 %tidy = call i32 @llvm.amdgcn.workitem.id.y()3432 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)3433 store i32 %v, ptr addrspace(1) %out3434 ret void3435}3436 3437define amdgpu_kernel void @v_permlanex16_b32_vvv_f32(ptr addrspace(1) %out, float %src0) {3438; GFX10-SDAG-LABEL: v_permlanex16_b32_vvv_f32:3439; GFX10-SDAG: ; %bb.0:3440; GFX10-SDAG-NEXT: s_clause 0x13441; GFX10-SDAG-NEXT: s_load_dword s2, s[4:5], 0x2c3442; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x243443; GFX10-SDAG-NEXT: v_readfirstlane_b32 s3, v03444; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3445; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23446; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v13447; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 03448; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s3, s23449; GFX10-SDAG-NEXT: global_store_dword v1, v0, s[0:1]3450; GFX10-SDAG-NEXT: s_endpgm3451;3452; GFX10-GISEL-LABEL: v_permlanex16_b32_vvv_f32:3453; GFX10-GISEL: ; %bb.0:3454; GFX10-GISEL-NEXT: s_clause 0x13455; GFX10-GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c3456; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x243457; GFX10-GISEL-NEXT: v_readfirstlane_b32 s3, v03458; GFX10-GISEL-NEXT: s_mov_b32 null, 03459; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v13460; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 03461; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3462; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23463; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s43464; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]3465; GFX10-GISEL-NEXT: s_endpgm3466;3467; GFX11-SDAG-LABEL: v_permlanex16_b32_vvv_f32:3468; GFX11-SDAG: ; %bb.0:3469; GFX11-SDAG-NEXT: s_clause 0x13470; GFX11-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x2c3471; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x243472; GFX11-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v03473; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 103474; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)3475; GFX11-SDAG-NEXT: v_readfirstlane_b32 s3, v13476; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)3477; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, s23478; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v03479; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 03480; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)3481; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s3, s23482; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]3483; GFX11-SDAG-NEXT: s_endpgm3484;3485; GFX11-GISEL-LABEL: v_permlanex16_b32_vvv_f32:3486; GFX11-GISEL: ; %bb.0:3487; GFX11-GISEL-NEXT: s_clause 0x13488; GFX11-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c3489; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x243490; GFX11-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v03491; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 103492; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)3493; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v03494; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)3495; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s23496; GFX11-GISEL-NEXT: v_readfirstlane_b32 s3, v13497; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 03498; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s43499; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3500; GFX11-GISEL-NEXT: s_endpgm3501;3502; GFX12-SDAG-LABEL: v_permlanex16_b32_vvv_f32:3503; GFX12-SDAG: ; %bb.0:3504; GFX12-SDAG-NEXT: s_load_b96 s[0:2], s[4:5], 0x243505; GFX12-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v03506; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 103507; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)3508; GFX12-SDAG-NEXT: v_readfirstlane_b32 s3, v13509; GFX12-SDAG-NEXT: s_wait_kmcnt 0x03510; GFX12-SDAG-NEXT: v_mov_b32_e32 v1, s23511; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v03512; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 03513; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)3514; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)3515; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s3, s23516; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]3517; GFX12-SDAG-NEXT: s_endpgm3518;3519; GFX12-GISEL-LABEL: v_permlanex16_b32_vvv_f32:3520; GFX12-GISEL: ; %bb.0:3521; GFX12-GISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x243522; GFX12-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v03523; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 103524; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3525; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v03526; GFX12-GISEL-NEXT: s_wait_kmcnt 0x03527; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s23528; GFX12-GISEL-NEXT: v_readfirstlane_b32 s3, v13529; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 03530; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)3531; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)3532; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s43533; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3534; GFX12-GISEL-NEXT: s_endpgm3535 %tidx = call i32 @llvm.amdgcn.workitem.id.x()3536 %tidy = call i32 @llvm.amdgcn.workitem.id.y()3537 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)3538 store float %v, ptr addrspace(1) %out3539 ret void3540}3541 3542define amdgpu_kernel void @v_permlanex16_b32_vvv_i64(ptr addrspace(1) %out, i64 %src0) {3543; GFX10-SDAG-LABEL: v_permlanex16_b32_vvv_i64:3544; GFX10-SDAG: ; %bb.0:3545; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243546; GFX10-SDAG-NEXT: s_mov_b32 null, 03547; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v03548; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v13549; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 03550; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3551; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s33552; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23553; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s53554; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s53555; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3556; GFX10-SDAG-NEXT: s_endpgm3557;3558; GFX10-GISEL-LABEL: v_permlanex16_b32_vvv_i64:3559; GFX10-GISEL: ; %bb.0:3560; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243561; GFX10-GISEL-NEXT: s_mov_b32 null, 03562; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v03563; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v13564; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 03565; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3566; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23567; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s33568; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s53569; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s53570; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3571; GFX10-GISEL-NEXT: s_endpgm3572;3573; GFX11-LABEL: v_permlanex16_b32_vvv_i64:3574; GFX11: ; %bb.0:3575; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x243576; GFX11-NEXT: v_and_b32_e32 v1, 0x3ff, v03577; GFX11-NEXT: v_bfe_u32 v0, v0, 10, 103578; GFX11-NEXT: v_mov_b32_e32 v2, 03579; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)3580; GFX11-NEXT: v_readfirstlane_b32 s5, v03581; GFX11-NEXT: s_waitcnt lgkmcnt(0)3582; GFX11-NEXT: v_mov_b32_e32 v0, s23583; GFX11-NEXT: v_readfirstlane_b32 s4, v13584; GFX11-NEXT: v_mov_b32_e32 v1, s33585; GFX11-NEXT: v_permlanex16_b32 v0, v0, s4, s53586; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)3587; GFX11-NEXT: v_permlanex16_b32 v1, v1, s4, s53588; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]3589; GFX11-NEXT: s_endpgm3590;3591; GFX12-LABEL: v_permlanex16_b32_vvv_i64:3592; GFX12: ; %bb.0:3593; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x243594; GFX12-NEXT: v_and_b32_e32 v1, 0x3ff, v03595; GFX12-NEXT: v_bfe_u32 v0, v0, 10, 103596; GFX12-NEXT: v_mov_b32_e32 v2, 03597; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)3598; GFX12-NEXT: v_readfirstlane_b32 s5, v03599; GFX12-NEXT: s_wait_kmcnt 0x03600; GFX12-NEXT: v_mov_b32_e32 v0, s23601; GFX12-NEXT: v_readfirstlane_b32 s4, v13602; GFX12-NEXT: v_mov_b32_e32 v1, s33603; GFX12-NEXT: v_permlanex16_b32 v0, v0, s4, s53604; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)3605; GFX12-NEXT: v_permlanex16_b32 v1, v1, s4, s53606; GFX12-NEXT: global_store_b64 v2, v[0:1], s[0:1]3607; GFX12-NEXT: s_endpgm3608 %tidx = call i32 @llvm.amdgcn.workitem.id.x()3609 %tidy = call i32 @llvm.amdgcn.workitem.id.y()3610 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)3611 store i64 %v, ptr addrspace(1) %out3612 ret void3613}3614 3615define amdgpu_kernel void @v_permlanex16_b32_vvv_f64(ptr addrspace(1) %out, double %src0) {3616; GFX10-SDAG-LABEL: v_permlanex16_b32_vvv_f64:3617; GFX10-SDAG: ; %bb.0:3618; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243619; GFX10-SDAG-NEXT: s_mov_b32 null, 03620; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v03621; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v13622; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 03623; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3624; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s33625; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23626; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s53627; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s53628; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3629; GFX10-SDAG-NEXT: s_endpgm3630;3631; GFX10-GISEL-LABEL: v_permlanex16_b32_vvv_f64:3632; GFX10-GISEL: ; %bb.0:3633; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243634; GFX10-GISEL-NEXT: s_mov_b32 null, 03635; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v03636; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v13637; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 03638; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3639; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23640; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s33641; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s53642; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s53643; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3644; GFX10-GISEL-NEXT: s_endpgm3645;3646; GFX11-LABEL: v_permlanex16_b32_vvv_f64:3647; GFX11: ; %bb.0:3648; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x243649; GFX11-NEXT: v_and_b32_e32 v1, 0x3ff, v03650; GFX11-NEXT: v_bfe_u32 v0, v0, 10, 103651; GFX11-NEXT: v_mov_b32_e32 v2, 03652; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)3653; GFX11-NEXT: v_readfirstlane_b32 s5, v03654; GFX11-NEXT: s_waitcnt lgkmcnt(0)3655; GFX11-NEXT: v_mov_b32_e32 v0, s23656; GFX11-NEXT: v_readfirstlane_b32 s4, v13657; GFX11-NEXT: v_mov_b32_e32 v1, s33658; GFX11-NEXT: v_permlanex16_b32 v0, v0, s4, s53659; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)3660; GFX11-NEXT: v_permlanex16_b32 v1, v1, s4, s53661; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]3662; GFX11-NEXT: s_endpgm3663;3664; GFX12-LABEL: v_permlanex16_b32_vvv_f64:3665; GFX12: ; %bb.0:3666; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x243667; GFX12-NEXT: v_and_b32_e32 v1, 0x3ff, v03668; GFX12-NEXT: v_bfe_u32 v0, v0, 10, 103669; GFX12-NEXT: v_mov_b32_e32 v2, 03670; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)3671; GFX12-NEXT: v_readfirstlane_b32 s5, v03672; GFX12-NEXT: s_wait_kmcnt 0x03673; GFX12-NEXT: v_mov_b32_e32 v0, s23674; GFX12-NEXT: v_readfirstlane_b32 s4, v13675; GFX12-NEXT: v_mov_b32_e32 v1, s33676; GFX12-NEXT: v_permlanex16_b32 v0, v0, s4, s53677; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)3678; GFX12-NEXT: v_permlanex16_b32 v1, v1, s4, s53679; GFX12-NEXT: global_store_b64 v2, v[0:1], s[0:1]3680; GFX12-NEXT: s_endpgm3681 %tidx = call i32 @llvm.amdgcn.workitem.id.x()3682 %tidy = call i32 @llvm.amdgcn.workitem.id.y()3683 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)3684 store double %v, ptr addrspace(1) %out3685 ret void3686}3687 3688define amdgpu_kernel void @v_permlanex16_b32_vvs_i32(ptr addrspace(1) %out, i32 %src0, i32 %src2) {3689; GFX10-SDAG-LABEL: v_permlanex16_b32_vvs_i32:3690; GFX10-SDAG: ; %bb.0:3691; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243692; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3693; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s23694; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v03695; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, 03696; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, s33697; GFX10-SDAG-NEXT: global_store_dword v0, v1, s[0:1]3698; GFX10-SDAG-NEXT: s_endpgm3699;3700; GFX10-GISEL-LABEL: v_permlanex16_b32_vvs_i32:3701; GFX10-GISEL: ; %bb.0:3702; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243703; GFX10-GISEL-NEXT: s_mov_b32 null, 03704; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v03705; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 03706; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3707; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23708; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s33709; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]3710; GFX10-GISEL-NEXT: s_endpgm3711;3712; GFX11-SDAG-LABEL: v_permlanex16_b32_vvs_i32:3713; GFX11-SDAG: ; %bb.0:3714; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243715; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)3716; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v03717; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)3718; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v03719; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 03720; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, s33721; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]3722; GFX11-SDAG-NEXT: s_endpgm3723;3724; GFX11-GISEL-LABEL: v_permlanex16_b32_vvs_i32:3725; GFX11-GISEL: ; %bb.0:3726; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243727; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v03728; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)3729; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v03730; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)3731; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s23732; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s33733; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3734; GFX11-GISEL-NEXT: s_endpgm3735;3736; GFX12-SDAG-LABEL: v_permlanex16_b32_vvs_i32:3737; GFX12-SDAG: ; %bb.0:3738; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243739; GFX12-SDAG-NEXT: s_wait_kmcnt 0x03740; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v03741; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)3742; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v03743; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 03744; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)3745; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, s33746; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]3747; GFX12-SDAG-NEXT: s_endpgm3748;3749; GFX12-GISEL-LABEL: v_permlanex16_b32_vvs_i32:3750; GFX12-GISEL: ; %bb.0:3751; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243752; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v03753; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)3754; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v03755; GFX12-GISEL-NEXT: s_wait_kmcnt 0x03756; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s23757; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s33758; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3759; GFX12-GISEL-NEXT: s_endpgm3760 %tidx = call i32 @llvm.amdgcn.workitem.id.x()3761 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %tidx, i32 %src2, i1 false, i1 false)3762 store i32 %v, ptr addrspace(1) %out3763 ret void3764}3765 3766define amdgpu_kernel void @v_permlanex16_b32_vvs_f32(ptr addrspace(1) %out, float %src0, i32 %src2) {3767; GFX10-SDAG-LABEL: v_permlanex16_b32_vvs_f32:3768; GFX10-SDAG: ; %bb.0:3769; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243770; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3771; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s23772; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v03773; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, 03774; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, s33775; GFX10-SDAG-NEXT: global_store_dword v0, v1, s[0:1]3776; GFX10-SDAG-NEXT: s_endpgm3777;3778; GFX10-GISEL-LABEL: v_permlanex16_b32_vvs_f32:3779; GFX10-GISEL: ; %bb.0:3780; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243781; GFX10-GISEL-NEXT: s_mov_b32 null, 03782; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v03783; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 03784; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3785; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23786; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s33787; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]3788; GFX10-GISEL-NEXT: s_endpgm3789;3790; GFX11-SDAG-LABEL: v_permlanex16_b32_vvs_f32:3791; GFX11-SDAG: ; %bb.0:3792; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243793; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)3794; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v03795; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)3796; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v03797; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 03798; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, s33799; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]3800; GFX11-SDAG-NEXT: s_endpgm3801;3802; GFX11-GISEL-LABEL: v_permlanex16_b32_vvs_f32:3803; GFX11-GISEL: ; %bb.0:3804; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243805; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v03806; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)3807; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v03808; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)3809; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s23810; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s33811; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3812; GFX11-GISEL-NEXT: s_endpgm3813;3814; GFX12-SDAG-LABEL: v_permlanex16_b32_vvs_f32:3815; GFX12-SDAG: ; %bb.0:3816; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x243817; GFX12-SDAG-NEXT: s_wait_kmcnt 0x03818; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v03819; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)3820; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v03821; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 03822; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)3823; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s2, s33824; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]3825; GFX12-SDAG-NEXT: s_endpgm3826;3827; GFX12-GISEL-LABEL: v_permlanex16_b32_vvs_f32:3828; GFX12-GISEL: ; %bb.0:3829; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x243830; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v03831; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)3832; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v03833; GFX12-GISEL-NEXT: s_wait_kmcnt 0x03834; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s23835; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s33836; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3837; GFX12-GISEL-NEXT: s_endpgm3838 %tidx = call i32 @llvm.amdgcn.workitem.id.x()3839 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %tidx, i32 %src2, i1 false, i1 false)3840 store float %v, ptr addrspace(1) %out3841 ret void3842}3843 3844define amdgpu_kernel void @v_permlanex16_b32_vvs_i64(ptr addrspace(1) %out, i64 %src0, i32 %src2) {3845; GFX10-SDAG-LABEL: v_permlanex16_b32_vvs_i64:3846; GFX10-SDAG: ; %bb.0:3847; GFX10-SDAG-NEXT: s_clause 0x13848; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243849; GFX10-SDAG-NEXT: s_load_dword s6, s[4:5], 0x343850; GFX10-SDAG-NEXT: s_mov_b32 null, 03851; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v03852; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 03853; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3854; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s33855; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23856; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s63857; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s63858; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3859; GFX10-SDAG-NEXT: s_endpgm3860;3861; GFX10-GISEL-LABEL: v_permlanex16_b32_vvs_i64:3862; GFX10-GISEL: ; %bb.0:3863; GFX10-GISEL-NEXT: s_clause 0x13864; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243865; GFX10-GISEL-NEXT: s_load_dword s6, s[4:5], 0x343866; GFX10-GISEL-NEXT: s_mov_b32 null, 03867; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v03868; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 03869; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3870; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23871; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s33872; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s63873; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s63874; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3875; GFX10-GISEL-NEXT: s_endpgm3876;3877; GFX11-LABEL: v_permlanex16_b32_vvs_i64:3878; GFX11: ; %bb.0:3879; GFX11-NEXT: s_clause 0x13880; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x243881; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x343882; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v03883; GFX11-NEXT: s_waitcnt lgkmcnt(0)3884; GFX11-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33885; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)3886; GFX11-NEXT: v_readfirstlane_b32 s5, v03887; GFX11-NEXT: v_mov_b32_e32 v0, s23888; GFX11-NEXT: v_permlanex16_b32 v1, v1, s5, s43889; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)3890; GFX11-NEXT: v_permlanex16_b32 v0, v0, s5, s43891; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]3892; GFX11-NEXT: s_endpgm3893;3894; GFX12-LABEL: v_permlanex16_b32_vvs_i64:3895; GFX12: ; %bb.0:3896; GFX12-NEXT: s_clause 0x13897; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x243898; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x343899; GFX12-NEXT: v_and_b32_e32 v0, 0x3ff, v03900; GFX12-NEXT: s_wait_kmcnt 0x03901; GFX12-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33902; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)3903; GFX12-NEXT: v_readfirstlane_b32 s5, v03904; GFX12-NEXT: v_mov_b32_e32 v0, s23905; GFX12-NEXT: v_permlanex16_b32 v1, v1, s5, s43906; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)3907; GFX12-NEXT: v_permlanex16_b32 v0, v0, s5, s43908; GFX12-NEXT: global_store_b64 v2, v[0:1], s[0:1]3909; GFX12-NEXT: s_endpgm3910 %tidx = call i32 @llvm.amdgcn.workitem.id.x()3911 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %tidx, i32 %src2, i1 false, i1 false)3912 store i64 %v, ptr addrspace(1) %out3913 ret void3914}3915 3916define amdgpu_kernel void @v_permlanex16_b32_vvs_f64(ptr addrspace(1) %out, double %src0, i32 %src2) {3917; GFX10-SDAG-LABEL: v_permlanex16_b32_vvs_f64:3918; GFX10-SDAG: ; %bb.0:3919; GFX10-SDAG-NEXT: s_clause 0x13920; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243921; GFX10-SDAG-NEXT: s_load_dword s6, s[4:5], 0x343922; GFX10-SDAG-NEXT: s_mov_b32 null, 03923; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v03924; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 03925; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3926; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s33927; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23928; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s63929; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s63930; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3931; GFX10-SDAG-NEXT: s_endpgm3932;3933; GFX10-GISEL-LABEL: v_permlanex16_b32_vvs_f64:3934; GFX10-GISEL: ; %bb.0:3935; GFX10-GISEL-NEXT: s_clause 0x13936; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243937; GFX10-GISEL-NEXT: s_load_dword s6, s[4:5], 0x343938; GFX10-GISEL-NEXT: s_mov_b32 null, 03939; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v03940; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 03941; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)3942; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s23943; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s33944; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s63945; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s63946; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3947; GFX10-GISEL-NEXT: s_endpgm3948;3949; GFX11-LABEL: v_permlanex16_b32_vvs_f64:3950; GFX11: ; %bb.0:3951; GFX11-NEXT: s_clause 0x13952; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x243953; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x343954; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v03955; GFX11-NEXT: s_waitcnt lgkmcnt(0)3956; GFX11-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33957; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)3958; GFX11-NEXT: v_readfirstlane_b32 s5, v03959; GFX11-NEXT: v_mov_b32_e32 v0, s23960; GFX11-NEXT: v_permlanex16_b32 v1, v1, s5, s43961; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)3962; GFX11-NEXT: v_permlanex16_b32 v0, v0, s5, s43963; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]3964; GFX11-NEXT: s_endpgm3965;3966; GFX12-LABEL: v_permlanex16_b32_vvs_f64:3967; GFX12: ; %bb.0:3968; GFX12-NEXT: s_clause 0x13969; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x243970; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x343971; GFX12-NEXT: v_and_b32_e32 v0, 0x3ff, v03972; GFX12-NEXT: s_wait_kmcnt 0x03973; GFX12-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s33974; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)3975; GFX12-NEXT: v_readfirstlane_b32 s5, v03976; GFX12-NEXT: v_mov_b32_e32 v0, s23977; GFX12-NEXT: v_permlanex16_b32 v1, v1, s5, s43978; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2)3979; GFX12-NEXT: v_permlanex16_b32 v0, v0, s5, s43980; GFX12-NEXT: global_store_b64 v2, v[0:1], s[0:1]3981; GFX12-NEXT: s_endpgm3982 %tidx = call i32 @llvm.amdgcn.workitem.id.x()3983 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %tidx, i32 %src2, i1 false, i1 false)3984 store double %v, ptr addrspace(1) %out3985 ret void3986}3987 3988define amdgpu_kernel void @v_permlanex16_b32_vsv_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1) {3989; GFX10-SDAG-LABEL: v_permlanex16_b32_vsv_i32:3990; GFX10-SDAG: ; %bb.0:3991; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243992; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)3993; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s23994; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v13995; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 03996; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s3, s23997; GFX10-SDAG-NEXT: global_store_dword v1, v0, s[0:1]3998; GFX10-SDAG-NEXT: s_endpgm3999;4000; GFX10-GISEL-LABEL: v_permlanex16_b32_vsv_i32:4001; GFX10-GISEL: ; %bb.0:4002; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244003; GFX10-GISEL-NEXT: s_mov_b32 null, 04004; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v14005; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 04006; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4007; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24008; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s44009; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]4010; GFX10-GISEL-NEXT: s_endpgm4011;4012; GFX11-SDAG-LABEL: v_permlanex16_b32_vsv_i32:4013; GFX11-SDAG: ; %bb.0:4014; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244015; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 104016; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)4017; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, s24018; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)4019; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v04020; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 04021; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s3, s24022; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]4023; GFX11-SDAG-NEXT: s_endpgm4024;4025; GFX11-GISEL-LABEL: v_permlanex16_b32_vsv_i32:4026; GFX11-GISEL: ; %bb.0:4027; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244028; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 104029; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 04030; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4031; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v04032; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)4033; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s24034; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s44035; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]4036; GFX11-GISEL-NEXT: s_endpgm4037;4038; GFX12-SDAG-LABEL: v_permlanex16_b32_vsv_i32:4039; GFX12-SDAG: ; %bb.0:4040; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244041; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 104042; GFX12-SDAG-NEXT: s_wait_kmcnt 0x04043; GFX12-SDAG-NEXT: v_mov_b32_e32 v1, s24044; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)4045; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v04046; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 04047; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)4048; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s3, s24049; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]4050; GFX12-SDAG-NEXT: s_endpgm4051;4052; GFX12-GISEL-LABEL: v_permlanex16_b32_vsv_i32:4053; GFX12-GISEL: ; %bb.0:4054; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244055; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 104056; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 04057; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4058; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v04059; GFX12-GISEL-NEXT: s_wait_kmcnt 0x04060; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s24061; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s44062; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]4063; GFX12-GISEL-NEXT: s_endpgm4064 %tidy = call i32 @llvm.amdgcn.workitem.id.y()4065 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %tidy, i1 false, i1 false)4066 store i32 %v, ptr addrspace(1) %out4067 ret void4068}4069 4070define amdgpu_kernel void @v_permlanex16_b32_vsv_f32(ptr addrspace(1) %out, float %src0, i32 %src1) {4071; GFX10-SDAG-LABEL: v_permlanex16_b32_vsv_f32:4072; GFX10-SDAG: ; %bb.0:4073; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244074; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)4075; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s24076; GFX10-SDAG-NEXT: v_readfirstlane_b32 s2, v14077; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 04078; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s3, s24079; GFX10-SDAG-NEXT: global_store_dword v1, v0, s[0:1]4080; GFX10-SDAG-NEXT: s_endpgm4081;4082; GFX10-GISEL-LABEL: v_permlanex16_b32_vsv_f32:4083; GFX10-GISEL: ; %bb.0:4084; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244085; GFX10-GISEL-NEXT: s_mov_b32 null, 04086; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v14087; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 04088; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4089; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24090; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s44091; GFX10-GISEL-NEXT: global_store_dword v1, v0, s[0:1]4092; GFX10-GISEL-NEXT: s_endpgm4093;4094; GFX11-SDAG-LABEL: v_permlanex16_b32_vsv_f32:4095; GFX11-SDAG: ; %bb.0:4096; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244097; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 104098; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)4099; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, s24100; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)4101; GFX11-SDAG-NEXT: v_readfirstlane_b32 s2, v04102; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 04103; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s3, s24104; GFX11-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]4105; GFX11-SDAG-NEXT: s_endpgm4106;4107; GFX11-GISEL-LABEL: v_permlanex16_b32_vsv_f32:4108; GFX11-GISEL: ; %bb.0:4109; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244110; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 104111; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 04112; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4113; GFX11-GISEL-NEXT: v_readfirstlane_b32 s4, v04114; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)4115; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, s24116; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s44117; GFX11-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]4118; GFX11-GISEL-NEXT: s_endpgm4119;4120; GFX12-SDAG-LABEL: v_permlanex16_b32_vsv_f32:4121; GFX12-SDAG: ; %bb.0:4122; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244123; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 104124; GFX12-SDAG-NEXT: s_wait_kmcnt 0x04125; GFX12-SDAG-NEXT: v_mov_b32_e32 v1, s24126; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)4127; GFX12-SDAG-NEXT: v_readfirstlane_b32 s2, v04128; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, 04129; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)4130; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s3, s24131; GFX12-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]4132; GFX12-SDAG-NEXT: s_endpgm4133;4134; GFX12-GISEL-LABEL: v_permlanex16_b32_vsv_f32:4135; GFX12-GISEL: ; %bb.0:4136; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244137; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 104138; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 04139; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4140; GFX12-GISEL-NEXT: v_readfirstlane_b32 s4, v04141; GFX12-GISEL-NEXT: s_wait_kmcnt 0x04142; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, s24143; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s3, s44144; GFX12-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]4145; GFX12-GISEL-NEXT: s_endpgm4146 %tidy = call i32 @llvm.amdgcn.workitem.id.y()4147 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %tidy, i1 false, i1 false)4148 store float %v, ptr addrspace(1) %out4149 ret void4150}4151 4152define amdgpu_kernel void @v_permlanex16_b32_vsv_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1) {4153; GFX10-SDAG-LABEL: v_permlanex16_b32_vsv_i64:4154; GFX10-SDAG: ; %bb.0:4155; GFX10-SDAG-NEXT: s_clause 0x14156; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244157; GFX10-SDAG-NEXT: s_load_dword s6, s[4:5], 0x344158; GFX10-SDAG-NEXT: s_mov_b32 null, 04159; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v14160; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 04161; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)4162; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s34163; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s24164; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s44165; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s44166; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4167; GFX10-SDAG-NEXT: s_endpgm4168;4169; GFX10-GISEL-LABEL: v_permlanex16_b32_vsv_i64:4170; GFX10-GISEL: ; %bb.0:4171; GFX10-GISEL-NEXT: s_clause 0x14172; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244173; GFX10-GISEL-NEXT: s_load_dword s6, s[4:5], 0x344174; GFX10-GISEL-NEXT: s_mov_b32 null, 04175; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v14176; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 04177; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4178; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24179; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s34180; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s44181; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s44182; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4183; GFX10-GISEL-NEXT: s_endpgm4184;4185; GFX11-SDAG-LABEL: v_permlanex16_b32_vsv_i64:4186; GFX11-SDAG: ; %bb.0:4187; GFX11-SDAG-NEXT: s_clause 0x14188; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244189; GFX11-SDAG-NEXT: s_load_b32 s4, s[4:5], 0x344190; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 104191; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 04192; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4193; GFX11-SDAG-NEXT: v_readfirstlane_b32 s5, v04194; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)4195; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s24196; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s54197; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)4198; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s54199; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4200; GFX11-SDAG-NEXT: s_endpgm4201;4202; GFX11-GISEL-LABEL: v_permlanex16_b32_vsv_i64:4203; GFX11-GISEL: ; %bb.0:4204; GFX11-GISEL-NEXT: s_clause 0x14205; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244206; GFX11-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x344207; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 104208; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 04209; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4210; GFX11-GISEL-NEXT: v_readfirstlane_b32 s5, v04211; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)4212; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34213; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s54214; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)4215; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s54216; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4217; GFX11-GISEL-NEXT: s_endpgm4218;4219; GFX12-SDAG-LABEL: v_permlanex16_b32_vsv_i64:4220; GFX12-SDAG: ; %bb.0:4221; GFX12-SDAG-NEXT: s_clause 0x14222; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244223; GFX12-SDAG-NEXT: s_load_b32 s4, s[4:5], 0x344224; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 104225; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 04226; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4227; GFX12-SDAG-NEXT: v_readfirstlane_b32 s5, v04228; GFX12-SDAG-NEXT: s_wait_kmcnt 0x04229; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s24230; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s54231; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)4232; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s54233; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4234; GFX12-SDAG-NEXT: s_endpgm4235;4236; GFX12-GISEL-LABEL: v_permlanex16_b32_vsv_i64:4237; GFX12-GISEL: ; %bb.0:4238; GFX12-GISEL-NEXT: s_clause 0x14239; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244240; GFX12-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x344241; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 104242; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 04243; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4244; GFX12-GISEL-NEXT: v_readfirstlane_b32 s5, v04245; GFX12-GISEL-NEXT: s_wait_kmcnt 0x04246; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34247; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s54248; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)4249; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s54250; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4251; GFX12-GISEL-NEXT: s_endpgm4252 %tidy = call i32 @llvm.amdgcn.workitem.id.y()4253 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %tidy, i1 false, i1 false)4254 store i64 %v, ptr addrspace(1) %out4255 ret void4256}4257 4258define amdgpu_kernel void @v_permlanex16_b32_vsv_f64(ptr addrspace(1) %out, double %src0, i32 %src1) {4259; GFX10-SDAG-LABEL: v_permlanex16_b32_vsv_f64:4260; GFX10-SDAG: ; %bb.0:4261; GFX10-SDAG-NEXT: s_clause 0x14262; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244263; GFX10-SDAG-NEXT: s_load_dword s6, s[4:5], 0x344264; GFX10-SDAG-NEXT: s_mov_b32 null, 04265; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v14266; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 04267; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)4268; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s34269; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s24270; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s44271; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s44272; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4273; GFX10-SDAG-NEXT: s_endpgm4274;4275; GFX10-GISEL-LABEL: v_permlanex16_b32_vsv_f64:4276; GFX10-GISEL: ; %bb.0:4277; GFX10-GISEL-NEXT: s_clause 0x14278; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244279; GFX10-GISEL-NEXT: s_load_dword s6, s[4:5], 0x344280; GFX10-GISEL-NEXT: s_mov_b32 null, 04281; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v14282; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 04283; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4284; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24285; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s34286; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s44287; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s44288; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4289; GFX10-GISEL-NEXT: s_endpgm4290;4291; GFX11-SDAG-LABEL: v_permlanex16_b32_vsv_f64:4292; GFX11-SDAG: ; %bb.0:4293; GFX11-SDAG-NEXT: s_clause 0x14294; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244295; GFX11-SDAG-NEXT: s_load_b32 s4, s[4:5], 0x344296; GFX11-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 104297; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 04298; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4299; GFX11-SDAG-NEXT: v_readfirstlane_b32 s5, v04300; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)4301; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s24302; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s54303; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)4304; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s54305; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4306; GFX11-SDAG-NEXT: s_endpgm4307;4308; GFX11-GISEL-LABEL: v_permlanex16_b32_vsv_f64:4309; GFX11-GISEL: ; %bb.0:4310; GFX11-GISEL-NEXT: s_clause 0x14311; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244312; GFX11-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x344313; GFX11-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 104314; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 04315; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4316; GFX11-GISEL-NEXT: v_readfirstlane_b32 s5, v04317; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)4318; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34319; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s54320; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)4321; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s54322; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4323; GFX11-GISEL-NEXT: s_endpgm4324;4325; GFX12-SDAG-LABEL: v_permlanex16_b32_vsv_f64:4326; GFX12-SDAG: ; %bb.0:4327; GFX12-SDAG-NEXT: s_clause 0x14328; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244329; GFX12-SDAG-NEXT: s_load_b32 s4, s[4:5], 0x344330; GFX12-SDAG-NEXT: v_bfe_u32 v0, v0, 10, 104331; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 04332; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4333; GFX12-SDAG-NEXT: v_readfirstlane_b32 s5, v04334; GFX12-SDAG-NEXT: s_wait_kmcnt 0x04335; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s24336; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s54337; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)4338; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s54339; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4340; GFX12-SDAG-NEXT: s_endpgm4341;4342; GFX12-GISEL-LABEL: v_permlanex16_b32_vsv_f64:4343; GFX12-GISEL: ; %bb.0:4344; GFX12-GISEL-NEXT: s_clause 0x14345; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244346; GFX12-GISEL-NEXT: s_load_b32 s4, s[4:5], 0x344347; GFX12-GISEL-NEXT: v_bfe_u32 v0, v0, 10, 104348; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 04349; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)4350; GFX12-GISEL-NEXT: v_readfirstlane_b32 s5, v04351; GFX12-GISEL-NEXT: s_wait_kmcnt 0x04352; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34353; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s54354; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)4355; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s54356; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4357; GFX12-GISEL-NEXT: s_endpgm4358 %tidy = call i32 @llvm.amdgcn.workitem.id.y()4359 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %tidy, i1 false, i1 false)4360 store double %v, ptr addrspace(1) %out4361 ret void4362}4363 4364define amdgpu_kernel void @v_permlanex16_b32_vss_fi_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {4365; GFX10-LABEL: v_permlanex16_b32_vss_fi_i32:4366; GFX10: ; %bb.0:4367; GFX10-NEXT: s_clause 0x14368; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244369; GFX10-NEXT: s_load_dword s6, s[4:5], 0x344370; GFX10-NEXT: v_mov_b32_e32 v1, 04371; GFX10-NEXT: s_waitcnt lgkmcnt(0)4372; GFX10-NEXT: v_mov_b32_e32 v0, s24373; GFX10-NEXT: v_permlanex16_b32 v0, v0, s3, s6 op_sel:[1,0]4374; GFX10-NEXT: global_store_dword v1, v0, s[0:1]4375; GFX10-NEXT: s_endpgm4376;4377; GFX11-LABEL: v_permlanex16_b32_vss_fi_i32:4378; GFX11: ; %bb.0:4379; GFX11-NEXT: s_clause 0x14380; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x244381; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x344382; GFX11-NEXT: s_waitcnt lgkmcnt(0)4383; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24384; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)4385; GFX11-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,0]4386; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]4387; GFX11-NEXT: s_endpgm4388;4389; GFX12-LABEL: v_permlanex16_b32_vss_fi_i32:4390; GFX12: ; %bb.0:4391; GFX12-NEXT: s_clause 0x14392; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x244393; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x344394; GFX12-NEXT: s_wait_kmcnt 0x04395; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24396; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)4397; GFX12-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,0]4398; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]4399; GFX12-NEXT: s_endpgm4400 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 true, i1 false)4401 store i32 %v, ptr addrspace(1) %out4402 ret void4403}4404 4405define amdgpu_kernel void @v_permlanex16_b32_vss_fi_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {4406; GFX10-LABEL: v_permlanex16_b32_vss_fi_f32:4407; GFX10: ; %bb.0:4408; GFX10-NEXT: s_clause 0x14409; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244410; GFX10-NEXT: s_load_dword s6, s[4:5], 0x344411; GFX10-NEXT: v_mov_b32_e32 v1, 04412; GFX10-NEXT: s_waitcnt lgkmcnt(0)4413; GFX10-NEXT: v_mov_b32_e32 v0, s24414; GFX10-NEXT: v_permlanex16_b32 v0, v0, s3, s6 op_sel:[1,0]4415; GFX10-NEXT: global_store_dword v1, v0, s[0:1]4416; GFX10-NEXT: s_endpgm4417;4418; GFX11-LABEL: v_permlanex16_b32_vss_fi_f32:4419; GFX11: ; %bb.0:4420; GFX11-NEXT: s_clause 0x14421; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x244422; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x344423; GFX11-NEXT: s_waitcnt lgkmcnt(0)4424; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24425; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)4426; GFX11-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,0]4427; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]4428; GFX11-NEXT: s_endpgm4429;4430; GFX12-LABEL: v_permlanex16_b32_vss_fi_f32:4431; GFX12: ; %bb.0:4432; GFX12-NEXT: s_clause 0x14433; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x244434; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x344435; GFX12-NEXT: s_wait_kmcnt 0x04436; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24437; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)4438; GFX12-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,0]4439; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]4440; GFX12-NEXT: s_endpgm4441 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 true, i1 false)4442 store float %v, ptr addrspace(1) %out4443 ret void4444}4445 4446define amdgpu_kernel void @v_permlanex16_b32_vss_fi_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {4447; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_fi_i64:4448; GFX10-SDAG: ; %bb.0:4449; GFX10-SDAG-NEXT: s_clause 0x14450; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244451; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344452; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 04453; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)4454; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s34455; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s24456; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,0]4457; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,0]4458; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4459; GFX10-SDAG-NEXT: s_endpgm4460;4461; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_fi_i64:4462; GFX10-GISEL: ; %bb.0:4463; GFX10-GISEL-NEXT: s_clause 0x14464; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244465; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344466; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 04467; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4468; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24469; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s34470; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,0]4471; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,0]4472; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4473; GFX10-GISEL-NEXT: s_endpgm4474;4475; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_fi_i64:4476; GFX11-SDAG: ; %bb.0:4477; GFX11-SDAG-NEXT: s_clause 0x14478; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244479; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x344480; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)4481; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s34482; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s24483; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4484; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]4485; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]4486; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4487; GFX11-SDAG-NEXT: s_endpgm4488;4489; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_fi_i64:4490; GFX11-GISEL: ; %bb.0:4491; GFX11-GISEL-NEXT: s_clause 0x14492; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244493; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x344494; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 04495; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)4496; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34497; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)4498; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]4499; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]4500; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4501; GFX11-GISEL-NEXT: s_endpgm4502;4503; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_fi_i64:4504; GFX12-SDAG: ; %bb.0:4505; GFX12-SDAG-NEXT: s_clause 0x14506; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244507; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x344508; GFX12-SDAG-NEXT: s_wait_kmcnt 0x04509; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s34510; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s24511; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4512; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]4513; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]4514; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4515; GFX12-SDAG-NEXT: s_endpgm4516;4517; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_fi_i64:4518; GFX12-GISEL: ; %bb.0:4519; GFX12-GISEL-NEXT: s_clause 0x14520; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244521; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x344522; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 04523; GFX12-GISEL-NEXT: s_wait_kmcnt 0x04524; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34525; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)4526; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]4527; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]4528; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4529; GFX12-GISEL-NEXT: s_endpgm4530 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 true, i1 false)4531 store i64 %v, ptr addrspace(1) %out4532 ret void4533}4534 4535define amdgpu_kernel void @v_permlanex16_b32_vss_fi_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {4536; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_fi_f64:4537; GFX10-SDAG: ; %bb.0:4538; GFX10-SDAG-NEXT: s_clause 0x14539; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244540; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344541; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 04542; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)4543; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s34544; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s24545; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,0]4546; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,0]4547; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4548; GFX10-SDAG-NEXT: s_endpgm4549;4550; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_fi_f64:4551; GFX10-GISEL: ; %bb.0:4552; GFX10-GISEL-NEXT: s_clause 0x14553; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244554; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344555; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 04556; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4557; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24558; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s34559; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,0]4560; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,0]4561; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4562; GFX10-GISEL-NEXT: s_endpgm4563;4564; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_fi_f64:4565; GFX11-SDAG: ; %bb.0:4566; GFX11-SDAG-NEXT: s_clause 0x14567; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244568; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x344569; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)4570; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s34571; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s24572; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4573; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]4574; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]4575; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4576; GFX11-SDAG-NEXT: s_endpgm4577;4578; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_fi_f64:4579; GFX11-GISEL: ; %bb.0:4580; GFX11-GISEL-NEXT: s_clause 0x14581; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244582; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x344583; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 04584; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)4585; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34586; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)4587; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]4588; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]4589; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4590; GFX11-GISEL-NEXT: s_endpgm4591;4592; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_fi_f64:4593; GFX12-SDAG: ; %bb.0:4594; GFX12-SDAG-NEXT: s_clause 0x14595; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244596; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x344597; GFX12-SDAG-NEXT: s_wait_kmcnt 0x04598; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s34599; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s24600; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4601; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]4602; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]4603; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4604; GFX12-SDAG-NEXT: s_endpgm4605;4606; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_fi_f64:4607; GFX12-GISEL: ; %bb.0:4608; GFX12-GISEL-NEXT: s_clause 0x14609; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244610; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x344611; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 04612; GFX12-GISEL-NEXT: s_wait_kmcnt 0x04613; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34614; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)4615; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]4616; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]4617; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4618; GFX12-GISEL-NEXT: s_endpgm4619 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 true, i1 false)4620 store double %v, ptr addrspace(1) %out4621 ret void4622}4623 4624define amdgpu_kernel void @v_permlanex16_b32_vss_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {4625; GFX10-LABEL: v_permlanex16_b32_vss_bc_i32:4626; GFX10: ; %bb.0:4627; GFX10-NEXT: s_clause 0x14628; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244629; GFX10-NEXT: s_load_dword s6, s[4:5], 0x344630; GFX10-NEXT: v_mov_b32_e32 v1, 04631; GFX10-NEXT: s_waitcnt lgkmcnt(0)4632; GFX10-NEXT: v_mov_b32_e32 v0, s24633; GFX10-NEXT: v_permlanex16_b32 v0, v0, s3, s6 op_sel:[0,1]4634; GFX10-NEXT: global_store_dword v1, v0, s[0:1]4635; GFX10-NEXT: s_endpgm4636;4637; GFX11-LABEL: v_permlanex16_b32_vss_bc_i32:4638; GFX11: ; %bb.0:4639; GFX11-NEXT: s_clause 0x14640; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x244641; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x344642; GFX11-NEXT: s_waitcnt lgkmcnt(0)4643; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24644; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)4645; GFX11-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[0,1]4646; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]4647; GFX11-NEXT: s_endpgm4648;4649; GFX12-LABEL: v_permlanex16_b32_vss_bc_i32:4650; GFX12: ; %bb.0:4651; GFX12-NEXT: s_clause 0x14652; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x244653; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x344654; GFX12-NEXT: s_wait_kmcnt 0x04655; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24656; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)4657; GFX12-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[0,1]4658; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]4659; GFX12-NEXT: s_endpgm4660 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 false, i1 true)4661 store i32 %v, ptr addrspace(1) %out4662 ret void4663}4664 4665define amdgpu_kernel void @v_permlanex16_b32_vss_bc_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {4666; GFX10-LABEL: v_permlanex16_b32_vss_bc_f32:4667; GFX10: ; %bb.0:4668; GFX10-NEXT: s_clause 0x14669; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244670; GFX10-NEXT: s_load_dword s6, s[4:5], 0x344671; GFX10-NEXT: v_mov_b32_e32 v1, 04672; GFX10-NEXT: s_waitcnt lgkmcnt(0)4673; GFX10-NEXT: v_mov_b32_e32 v0, s24674; GFX10-NEXT: v_permlanex16_b32 v0, v0, s3, s6 op_sel:[0,1]4675; GFX10-NEXT: global_store_dword v1, v0, s[0:1]4676; GFX10-NEXT: s_endpgm4677;4678; GFX11-LABEL: v_permlanex16_b32_vss_bc_f32:4679; GFX11: ; %bb.0:4680; GFX11-NEXT: s_clause 0x14681; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x244682; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x344683; GFX11-NEXT: s_waitcnt lgkmcnt(0)4684; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24685; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)4686; GFX11-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[0,1]4687; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]4688; GFX11-NEXT: s_endpgm4689;4690; GFX12-LABEL: v_permlanex16_b32_vss_bc_f32:4691; GFX12: ; %bb.0:4692; GFX12-NEXT: s_clause 0x14693; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x244694; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x344695; GFX12-NEXT: s_wait_kmcnt 0x04696; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24697; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)4698; GFX12-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[0,1]4699; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]4700; GFX12-NEXT: s_endpgm4701 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 false, i1 true)4702 store float %v, ptr addrspace(1) %out4703 ret void4704}4705 4706define amdgpu_kernel void @v_permlanex16_b32_vss_bc_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {4707; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_bc_i64:4708; GFX10-SDAG: ; %bb.0:4709; GFX10-SDAG-NEXT: s_clause 0x14710; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244711; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344712; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 04713; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)4714; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s34715; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s24716; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[0,1]4717; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[0,1]4718; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4719; GFX10-SDAG-NEXT: s_endpgm4720;4721; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_bc_i64:4722; GFX10-GISEL: ; %bb.0:4723; GFX10-GISEL-NEXT: s_clause 0x14724; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244725; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344726; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 04727; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4728; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24729; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s34730; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[0,1]4731; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[0,1]4732; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4733; GFX10-GISEL-NEXT: s_endpgm4734;4735; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_bc_i64:4736; GFX11-SDAG: ; %bb.0:4737; GFX11-SDAG-NEXT: s_clause 0x14738; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244739; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x344740; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)4741; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s34742; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s24743; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4744; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]4745; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]4746; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4747; GFX11-SDAG-NEXT: s_endpgm4748;4749; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_bc_i64:4750; GFX11-GISEL: ; %bb.0:4751; GFX11-GISEL-NEXT: s_clause 0x14752; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244753; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x344754; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 04755; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)4756; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34757; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)4758; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]4759; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]4760; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4761; GFX11-GISEL-NEXT: s_endpgm4762;4763; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_bc_i64:4764; GFX12-SDAG: ; %bb.0:4765; GFX12-SDAG-NEXT: s_clause 0x14766; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244767; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x344768; GFX12-SDAG-NEXT: s_wait_kmcnt 0x04769; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s34770; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s24771; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4772; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]4773; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]4774; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4775; GFX12-SDAG-NEXT: s_endpgm4776;4777; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_bc_i64:4778; GFX12-GISEL: ; %bb.0:4779; GFX12-GISEL-NEXT: s_clause 0x14780; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244781; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x344782; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 04783; GFX12-GISEL-NEXT: s_wait_kmcnt 0x04784; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34785; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)4786; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]4787; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]4788; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4789; GFX12-GISEL-NEXT: s_endpgm4790 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 false, i1 true)4791 store i64 %v, ptr addrspace(1) %out4792 ret void4793}4794 4795define amdgpu_kernel void @v_permlanex16_b32_vss_bc_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {4796; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_bc_f64:4797; GFX10-SDAG: ; %bb.0:4798; GFX10-SDAG-NEXT: s_clause 0x14799; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244800; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344801; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 04802; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)4803; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s34804; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s24805; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[0,1]4806; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[0,1]4807; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4808; GFX10-SDAG-NEXT: s_endpgm4809;4810; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_bc_f64:4811; GFX10-GISEL: ; %bb.0:4812; GFX10-GISEL-NEXT: s_clause 0x14813; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244814; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344815; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 04816; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4817; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24818; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s34819; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[0,1]4820; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[0,1]4821; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4822; GFX10-GISEL-NEXT: s_endpgm4823;4824; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_bc_f64:4825; GFX11-SDAG: ; %bb.0:4826; GFX11-SDAG-NEXT: s_clause 0x14827; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244828; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x344829; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)4830; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s34831; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s24832; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4833; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]4834; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]4835; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4836; GFX11-SDAG-NEXT: s_endpgm4837;4838; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_bc_f64:4839; GFX11-GISEL: ; %bb.0:4840; GFX11-GISEL-NEXT: s_clause 0x14841; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244842; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x344843; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 04844; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)4845; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34846; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)4847; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]4848; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]4849; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4850; GFX11-GISEL-NEXT: s_endpgm4851;4852; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_bc_f64:4853; GFX12-SDAG: ; %bb.0:4854; GFX12-SDAG-NEXT: s_clause 0x14855; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244856; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x344857; GFX12-SDAG-NEXT: s_wait_kmcnt 0x04858; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s34859; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s24860; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)4861; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]4862; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]4863; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]4864; GFX12-SDAG-NEXT: s_endpgm4865;4866; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_bc_f64:4867; GFX12-GISEL: ; %bb.0:4868; GFX12-GISEL-NEXT: s_clause 0x14869; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x244870; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x344871; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 04872; GFX12-GISEL-NEXT: s_wait_kmcnt 0x04873; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s34874; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)4875; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]4876; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]4877; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]4878; GFX12-GISEL-NEXT: s_endpgm4879 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 false, i1 true)4880 store double %v, ptr addrspace(1) %out4881 ret void4882}4883 4884define amdgpu_kernel void @v_permlanex16_b32_vss_fi_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {4885; GFX10-LABEL: v_permlanex16_b32_vss_fi_bc_i32:4886; GFX10: ; %bb.0:4887; GFX10-NEXT: s_clause 0x14888; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244889; GFX10-NEXT: s_load_dword s6, s[4:5], 0x344890; GFX10-NEXT: v_mov_b32_e32 v1, 04891; GFX10-NEXT: s_waitcnt lgkmcnt(0)4892; GFX10-NEXT: v_mov_b32_e32 v0, s24893; GFX10-NEXT: v_permlanex16_b32 v0, v0, s3, s6 op_sel:[1,1]4894; GFX10-NEXT: global_store_dword v1, v0, s[0:1]4895; GFX10-NEXT: s_endpgm4896;4897; GFX11-LABEL: v_permlanex16_b32_vss_fi_bc_i32:4898; GFX11: ; %bb.0:4899; GFX11-NEXT: s_clause 0x14900; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x244901; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x344902; GFX11-NEXT: s_waitcnt lgkmcnt(0)4903; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24904; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)4905; GFX11-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,1]4906; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]4907; GFX11-NEXT: s_endpgm4908;4909; GFX12-LABEL: v_permlanex16_b32_vss_fi_bc_i32:4910; GFX12: ; %bb.0:4911; GFX12-NEXT: s_clause 0x14912; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x244913; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x344914; GFX12-NEXT: s_wait_kmcnt 0x04915; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24916; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)4917; GFX12-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,1]4918; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]4919; GFX12-NEXT: s_endpgm4920 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 true, i1 true)4921 store i32 %v, ptr addrspace(1) %out4922 ret void4923}4924 4925define amdgpu_kernel void @v_permlanex16_b32_vss_fi_bc_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {4926; GFX10-LABEL: v_permlanex16_b32_vss_fi_bc_f32:4927; GFX10: ; %bb.0:4928; GFX10-NEXT: s_clause 0x14929; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244930; GFX10-NEXT: s_load_dword s6, s[4:5], 0x344931; GFX10-NEXT: v_mov_b32_e32 v1, 04932; GFX10-NEXT: s_waitcnt lgkmcnt(0)4933; GFX10-NEXT: v_mov_b32_e32 v0, s24934; GFX10-NEXT: v_permlanex16_b32 v0, v0, s3, s6 op_sel:[1,1]4935; GFX10-NEXT: global_store_dword v1, v0, s[0:1]4936; GFX10-NEXT: s_endpgm4937;4938; GFX11-LABEL: v_permlanex16_b32_vss_fi_bc_f32:4939; GFX11: ; %bb.0:4940; GFX11-NEXT: s_clause 0x14941; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x244942; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x344943; GFX11-NEXT: s_waitcnt lgkmcnt(0)4944; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24945; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)4946; GFX11-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,1]4947; GFX11-NEXT: global_store_b32 v1, v0, s[0:1]4948; GFX11-NEXT: s_endpgm4949;4950; GFX12-LABEL: v_permlanex16_b32_vss_fi_bc_f32:4951; GFX12: ; %bb.0:4952; GFX12-NEXT: s_clause 0x14953; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x244954; GFX12-NEXT: s_load_b32 s4, s[4:5], 0x344955; GFX12-NEXT: s_wait_kmcnt 0x04956; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s24957; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)4958; GFX12-NEXT: v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,1]4959; GFX12-NEXT: global_store_b32 v1, v0, s[0:1]4960; GFX12-NEXT: s_endpgm4961 %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 true, i1 true)4962 store float %v, ptr addrspace(1) %out4963 ret void4964}4965 4966define amdgpu_kernel void @v_permlanex16_b32_vss_fi_bc_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {4967; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_i64:4968; GFX10-SDAG: ; %bb.0:4969; GFX10-SDAG-NEXT: s_clause 0x14970; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244971; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344972; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 04973; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)4974; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s34975; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s24976; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,1]4977; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,1]4978; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4979; GFX10-SDAG-NEXT: s_endpgm4980;4981; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_i64:4982; GFX10-GISEL: ; %bb.0:4983; GFX10-GISEL-NEXT: s_clause 0x14984; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x244985; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x344986; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 04987; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)4988; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s24989; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s34990; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,1]4991; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,1]4992; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4993; GFX10-GISEL-NEXT: s_endpgm4994;4995; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_i64:4996; GFX11-SDAG: ; %bb.0:4997; GFX11-SDAG-NEXT: s_clause 0x14998; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x244999; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x345000; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5001; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s35002; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s25003; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5004; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]5005; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]5006; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]5007; GFX11-SDAG-NEXT: s_endpgm5008;5009; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_i64:5010; GFX11-GISEL: ; %bb.0:5011; GFX11-GISEL-NEXT: s_clause 0x15012; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x245013; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x345014; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 05015; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5016; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s35017; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5018; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]5019; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]5020; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]5021; GFX11-GISEL-NEXT: s_endpgm5022;5023; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_i64:5024; GFX12-SDAG: ; %bb.0:5025; GFX12-SDAG-NEXT: s_clause 0x15026; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x245027; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x345028; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05029; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s35030; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s25031; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5032; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]5033; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]5034; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]5035; GFX12-SDAG-NEXT: s_endpgm5036;5037; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_i64:5038; GFX12-GISEL: ; %bb.0:5039; GFX12-GISEL-NEXT: s_clause 0x15040; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x245041; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x345042; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 05043; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05044; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s35045; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5046; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]5047; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]5048; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]5049; GFX12-GISEL-NEXT: s_endpgm5050 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 true, i1 true)5051 store i64 %v, ptr addrspace(1) %out5052 ret void5053}5054 5055define amdgpu_kernel void @v_permlanex16_b32_vss_fi_bc_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {5056; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_f64:5057; GFX10-SDAG: ; %bb.0:5058; GFX10-SDAG-NEXT: s_clause 0x15059; GFX10-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245060; GFX10-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x345061; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05062; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5063; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, s35064; GFX10-SDAG-NEXT: v_mov_b32_e32 v0, s25065; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,1]5066; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,1]5067; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]5068; GFX10-SDAG-NEXT: s_endpgm5069;5070; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_f64:5071; GFX10-GISEL: ; %bb.0:5072; GFX10-GISEL-NEXT: s_clause 0x15073; GFX10-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x245074; GFX10-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x345075; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 05076; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5077; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, s25078; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, s35079; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,1]5080; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,1]5081; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]5082; GFX10-GISEL-NEXT: s_endpgm5083;5084; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_f64:5085; GFX11-SDAG: ; %bb.0:5086; GFX11-SDAG-NEXT: s_clause 0x15087; GFX11-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x245088; GFX11-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x345089; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5090; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s35091; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, s25092; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5093; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]5094; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]5095; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]5096; GFX11-SDAG-NEXT: s_endpgm5097;5098; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_f64:5099; GFX11-GISEL: ; %bb.0:5100; GFX11-GISEL-NEXT: s_clause 0x15101; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x245102; GFX11-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x345103; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 05104; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5105; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s35106; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5107; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]5108; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]5109; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]5110; GFX11-GISEL-NEXT: s_endpgm5111;5112; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_f64:5113; GFX12-SDAG: ; %bb.0:5114; GFX12-SDAG-NEXT: s_clause 0x15115; GFX12-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x245116; GFX12-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x345117; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05118; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s35119; GFX12-SDAG-NEXT: v_mov_b32_e32 v0, s25120; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5121; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]5122; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]5123; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[0:1]5124; GFX12-SDAG-NEXT: s_endpgm5125;5126; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_f64:5127; GFX12-GISEL: ; %bb.0:5128; GFX12-GISEL-NEXT: s_clause 0x15129; GFX12-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x245130; GFX12-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x345131; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 05132; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05133; GFX12-GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s35134; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5135; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]5136; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]5137; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]5138; GFX12-GISEL-NEXT: s_endpgm5139 %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 true, i1 true)5140 store double %v, ptr addrspace(1) %out5141 ret void5142}5143 5144define amdgpu_kernel void @v_permlane16_b32_tid_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5145; GFX10-LABEL: v_permlane16_b32_tid_tid_i32:5146; GFX10: ; %bb.0:5147; GFX10-NEXT: s_clause 0x15148; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305149; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245150; GFX10-NEXT: v_mov_b32_e32 v1, 05151; GFX10-NEXT: s_waitcnt lgkmcnt(0)5152; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s15153; GFX10-NEXT: global_store_dword v1, v0, s[2:3]5154; GFX10-NEXT: s_endpgm5155;5156; GFX11-LABEL: v_permlane16_b32_tid_tid_i32:5157; GFX11: ; %bb.0:5158; GFX11-NEXT: s_clause 0x15159; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x305160; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x245161; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05162; GFX11-NEXT: s_waitcnt lgkmcnt(0)5163; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)5164; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s15165; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]5166; GFX11-NEXT: s_endpgm5167;5168; GFX12-LABEL: v_permlane16_b32_tid_tid_i32:5169; GFX12: ; %bb.0:5170; GFX12-NEXT: s_clause 0x15171; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x305172; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x245173; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05174; GFX12-NEXT: s_wait_kmcnt 0x05175; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)5176; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s15177; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]5178; GFX12-NEXT: s_endpgm5179 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5180 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %tidx, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)5181 store i32 %v, ptr addrspace(1) %out5182 ret void5183}5184 5185define amdgpu_kernel void @v_permlane16_b32_tid_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5186; GFX10-LABEL: v_permlane16_b32_tid_tid_f32:5187; GFX10: ; %bb.0:5188; GFX10-NEXT: s_clause 0x15189; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305190; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245191; GFX10-NEXT: v_mov_b32_e32 v1, 05192; GFX10-NEXT: s_waitcnt lgkmcnt(0)5193; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s15194; GFX10-NEXT: global_store_dword v1, v0, s[2:3]5195; GFX10-NEXT: s_endpgm5196;5197; GFX11-LABEL: v_permlane16_b32_tid_tid_f32:5198; GFX11: ; %bb.0:5199; GFX11-NEXT: s_clause 0x15200; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x305201; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x245202; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05203; GFX11-NEXT: s_waitcnt lgkmcnt(0)5204; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)5205; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s15206; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]5207; GFX11-NEXT: s_endpgm5208;5209; GFX12-LABEL: v_permlane16_b32_tid_tid_f32:5210; GFX12: ; %bb.0:5211; GFX12-NEXT: s_clause 0x15212; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x305213; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x245214; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05215; GFX12-NEXT: s_wait_kmcnt 0x05216; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)5217; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s15218; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]5219; GFX12-NEXT: s_endpgm5220 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5221 %tidx_f32 = bitcast i32 %tidx to float5222 %v = call float @llvm.amdgcn.permlane16.f32(float %tidx_f32, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)5223 store float %v, ptr addrspace(1) %out5224 ret void5225}5226 5227define amdgpu_kernel void @v_permlane16_b32_tid_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5228; GFX10-SDAG-LABEL: v_permlane16_b32_tid_tid_i64:5229; GFX10-SDAG: ; %bb.0:5230; GFX10-SDAG-NEXT: s_clause 0x15231; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305232; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245233; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 05234; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05235; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5236; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15237; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15238; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]5239; GFX10-SDAG-NEXT: s_endpgm5240;5241; GFX10-GISEL-LABEL: v_permlane16_b32_tid_tid_i64:5242; GFX10-GISEL: ; %bb.0:5243; GFX10-GISEL-NEXT: s_clause 0x15244; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305245; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245246; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 05247; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 05248; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5249; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15250; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15251; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]5252; GFX10-GISEL-NEXT: s_endpgm5253;5254; GFX11-SDAG-LABEL: v_permlane16_b32_tid_tid_i64:5255; GFX11-SDAG: ; %bb.0:5256; GFX11-SDAG-NEXT: s_clause 0x15257; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305258; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245259; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05260; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 05261; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5262; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)5263; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15264; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15265; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]5266; GFX11-SDAG-NEXT: s_endpgm5267;5268; GFX11-GISEL-LABEL: v_permlane16_b32_tid_tid_i64:5269; GFX11-GISEL: ; %bb.0:5270; GFX11-GISEL-NEXT: s_clause 0x15271; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305272; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245273; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05274; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 05275; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5276; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)5277; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15278; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15279; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]5280; GFX11-GISEL-NEXT: s_endpgm5281;5282; GFX12-SDAG-LABEL: v_permlane16_b32_tid_tid_i64:5283; GFX12-SDAG: ; %bb.0:5284; GFX12-SDAG-NEXT: s_clause 0x15285; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305286; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245287; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05288; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 05289; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05290; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)5291; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15292; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15293; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]5294; GFX12-SDAG-NEXT: s_endpgm5295;5296; GFX12-GISEL-LABEL: v_permlane16_b32_tid_tid_i64:5297; GFX12-GISEL: ; %bb.0:5298; GFX12-GISEL-NEXT: s_clause 0x15299; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305300; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245301; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05302; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 05303; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05304; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)5305; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15306; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15307; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]5308; GFX12-GISEL-NEXT: s_endpgm5309 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5310 %tidx_i64 = zext i32 %tidx to i645311 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %tidx_i64, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)5312 store i64 %v, ptr addrspace(1) %out5313 ret void5314}5315 5316define amdgpu_kernel void @v_permlane16_b32_tid_tid_f64(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {5317; GFX10-SDAG-LABEL: v_permlane16_b32_tid_tid_f64:5318; GFX10-SDAG: ; %bb.0:5319; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v05320; GFX10-SDAG-NEXT: s_clause 0x15321; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305322; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245323; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05324; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5325; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15326; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15327; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]5328; GFX10-SDAG-NEXT: s_endpgm5329;5330; GFX10-GISEL-LABEL: v_permlane16_b32_tid_tid_f64:5331; GFX10-GISEL: ; %bb.0:5332; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v05333; GFX10-GISEL-NEXT: s_clause 0x15334; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305335; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245336; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 05337; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5338; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15339; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15340; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]5341; GFX10-GISEL-NEXT: s_endpgm5342;5343; GFX11-SDAG-LABEL: v_permlane16_b32_tid_tid_f64:5344; GFX11-SDAG: ; %bb.0:5345; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05346; GFX11-SDAG-NEXT: s_clause 0x15347; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305348; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245349; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 05350; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v05351; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5352; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5353; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15354; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15355; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]5356; GFX11-SDAG-NEXT: s_endpgm5357;5358; GFX11-GISEL-LABEL: v_permlane16_b32_tid_tid_f64:5359; GFX11-GISEL: ; %bb.0:5360; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05361; GFX11-GISEL-NEXT: s_clause 0x15362; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305363; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245364; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 05365; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v05366; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5367; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5368; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15369; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15370; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]5371; GFX11-GISEL-NEXT: s_endpgm5372;5373; GFX12-SDAG-LABEL: v_permlane16_b32_tid_tid_f64:5374; GFX12-SDAG: ; %bb.0:5375; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05376; GFX12-SDAG-NEXT: s_clause 0x15377; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305378; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245379; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 05380; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v05381; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05382; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5383; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15384; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15385; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]5386; GFX12-SDAG-NEXT: s_endpgm5387;5388; GFX12-GISEL-LABEL: v_permlane16_b32_tid_tid_f64:5389; GFX12-GISEL: ; %bb.0:5390; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05391; GFX12-GISEL-NEXT: s_clause 0x15392; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305393; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245394; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 05395; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v05396; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05397; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5398; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15399; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15400; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]5401; GFX12-GISEL-NEXT: s_endpgm5402 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5403 %tidx_f32 = bitcast i32 %tidx to float5404 %tidx_f64 = fpext float %tidx_f32 to double5405 %v = call double @llvm.amdgcn.permlane16.f64(double %tidx_f64, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)5406 store double %v, ptr addrspace(1) %out5407 ret void5408}5409 5410define amdgpu_kernel void @v_permlane16_b32_undef_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5411; GFX10-LABEL: v_permlane16_b32_undef_tid_i32:5412; GFX10: ; %bb.0:5413; GFX10-NEXT: s_clause 0x15414; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305415; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245416; GFX10-NEXT: v_mov_b32_e32 v1, 05417; GFX10-NEXT: s_waitcnt lgkmcnt(0)5418; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s15419; GFX10-NEXT: global_store_dword v1, v0, s[2:3]5420; GFX10-NEXT: s_endpgm5421;5422; GFX11-LABEL: v_permlane16_b32_undef_tid_i32:5423; GFX11: ; %bb.0:5424; GFX11-NEXT: s_clause 0x15425; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x305426; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x245427; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05428; GFX11-NEXT: s_waitcnt lgkmcnt(0)5429; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)5430; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s15431; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]5432; GFX11-NEXT: s_endpgm5433;5434; GFX12-LABEL: v_permlane16_b32_undef_tid_i32:5435; GFX12: ; %bb.0:5436; GFX12-NEXT: s_clause 0x15437; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x305438; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x245439; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05440; GFX12-NEXT: s_wait_kmcnt 0x05441; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)5442; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s15443; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]5444; GFX12-NEXT: s_endpgm5445 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5446 %undef = freeze i32 poison5447 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)5448 store i32 %v, ptr addrspace(1) %out5449 ret void5450}5451 5452define amdgpu_kernel void @v_permlane16_b32_undef_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5453; GFX10-LABEL: v_permlane16_b32_undef_tid_f32:5454; GFX10: ; %bb.0:5455; GFX10-NEXT: s_clause 0x15456; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305457; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245458; GFX10-NEXT: v_mov_b32_e32 v1, 05459; GFX10-NEXT: s_waitcnt lgkmcnt(0)5460; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s15461; GFX10-NEXT: global_store_dword v1, v0, s[2:3]5462; GFX10-NEXT: s_endpgm5463;5464; GFX11-LABEL: v_permlane16_b32_undef_tid_f32:5465; GFX11: ; %bb.0:5466; GFX11-NEXT: s_clause 0x15467; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x305468; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x245469; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05470; GFX11-NEXT: s_waitcnt lgkmcnt(0)5471; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)5472; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s15473; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]5474; GFX11-NEXT: s_endpgm5475;5476; GFX12-LABEL: v_permlane16_b32_undef_tid_f32:5477; GFX12: ; %bb.0:5478; GFX12-NEXT: s_clause 0x15479; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x305480; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x245481; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v05482; GFX12-NEXT: s_wait_kmcnt 0x05483; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)5484; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s15485; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]5486; GFX12-NEXT: s_endpgm5487 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5488 %tidx_f32 = bitcast i32 %tidx to float5489 %undef = freeze float poison5490 %v = call float @llvm.amdgcn.permlane16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)5491 store float %v, ptr addrspace(1) %out5492 ret void5493}5494 5495define amdgpu_kernel void @v_permlane16_b32_undef_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5496; GFX10-SDAG-LABEL: v_permlane16_b32_undef_tid_i64:5497; GFX10-SDAG: ; %bb.0:5498; GFX10-SDAG-NEXT: s_clause 0x15499; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305500; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245501; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05502; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5503; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s15504; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15505; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]5506; GFX10-SDAG-NEXT: s_endpgm5507;5508; GFX10-GISEL-LABEL: v_permlane16_b32_undef_tid_i64:5509; GFX10-GISEL: ; %bb.0:5510; GFX10-GISEL-NEXT: s_clause 0x15511; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305512; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245513; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 05514; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5515; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15516; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s15517; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]5518; GFX10-GISEL-NEXT: s_endpgm5519;5520; GFX11-SDAG-LABEL: v_permlane16_b32_undef_tid_i64:5521; GFX11-SDAG: ; %bb.0:5522; GFX11-SDAG-NEXT: s_clause 0x15523; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305524; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245525; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 05526; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05527; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5528; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5529; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s15530; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15531; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]5532; GFX11-SDAG-NEXT: s_endpgm5533;5534; GFX11-GISEL-LABEL: v_permlane16_b32_undef_tid_i64:5535; GFX11-GISEL: ; %bb.0:5536; GFX11-GISEL-NEXT: s_clause 0x15537; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305538; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245539; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05540; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 05541; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5542; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5543; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15544; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s15545; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]5546; GFX11-GISEL-NEXT: s_endpgm5547;5548; GFX12-SDAG-LABEL: v_permlane16_b32_undef_tid_i64:5549; GFX12-SDAG: ; %bb.0:5550; GFX12-SDAG-NEXT: s_clause 0x15551; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305552; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245553; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 05554; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05555; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05556; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5557; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s15558; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15559; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]5560; GFX12-SDAG-NEXT: s_endpgm5561;5562; GFX12-GISEL-LABEL: v_permlane16_b32_undef_tid_i64:5563; GFX12-GISEL: ; %bb.0:5564; GFX12-GISEL-NEXT: s_clause 0x15565; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305566; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245567; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05568; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 05569; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05570; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5571; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15572; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s15573; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]5574; GFX12-GISEL-NEXT: s_endpgm5575 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5576 %tidx_i64 = zext i32 %tidx to i645577 %undef = freeze i64 poison5578 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)5579 store i64 %v, ptr addrspace(1) %out5580 ret void5581}5582 5583define amdgpu_kernel void @v_permlane16_b32_undef_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5584; GFX10-SDAG-LABEL: v_permlane16_b32_undef_tid_f64:5585; GFX10-SDAG: ; %bb.0:5586; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v05587; GFX10-SDAG-NEXT: s_clause 0x15588; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305589; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245590; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05591; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5592; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15593; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15594; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]5595; GFX10-SDAG-NEXT: s_endpgm5596;5597; GFX10-GISEL-LABEL: v_permlane16_b32_undef_tid_f64:5598; GFX10-GISEL: ; %bb.0:5599; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v05600; GFX10-GISEL-NEXT: s_clause 0x15601; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305602; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245603; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 05604; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5605; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15606; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15607; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]5608; GFX10-GISEL-NEXT: s_endpgm5609;5610; GFX11-SDAG-LABEL: v_permlane16_b32_undef_tid_f64:5611; GFX11-SDAG: ; %bb.0:5612; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05613; GFX11-SDAG-NEXT: s_clause 0x15614; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305615; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245616; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 05617; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v05618; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5619; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5620; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15621; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15622; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]5623; GFX11-SDAG-NEXT: s_endpgm5624;5625; GFX11-GISEL-LABEL: v_permlane16_b32_undef_tid_f64:5626; GFX11-GISEL: ; %bb.0:5627; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05628; GFX11-GISEL-NEXT: s_clause 0x15629; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305630; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245631; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 05632; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v05633; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5634; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5635; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15636; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15637; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]5638; GFX11-GISEL-NEXT: s_endpgm5639;5640; GFX12-SDAG-LABEL: v_permlane16_b32_undef_tid_f64:5641; GFX12-SDAG: ; %bb.0:5642; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05643; GFX12-SDAG-NEXT: s_clause 0x15644; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305645; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245646; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 05647; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v05648; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05649; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5650; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s15651; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s15652; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]5653; GFX12-SDAG-NEXT: s_endpgm5654;5655; GFX12-GISEL-LABEL: v_permlane16_b32_undef_tid_f64:5656; GFX12-GISEL: ; %bb.0:5657; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05658; GFX12-GISEL-NEXT: s_clause 0x15659; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305660; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245661; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 05662; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v05663; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05664; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5665; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s15666; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s15667; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]5668; GFX12-GISEL-NEXT: s_endpgm5669 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5670 %tidx_f32 = bitcast i32 %tidx to float5671 %tidx_f64 = fpext float %tidx_f32 to double5672 %undef = freeze double poison5673 %v = call double @llvm.amdgcn.permlane16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)5674 store double %v, ptr addrspace(1) %out5675 ret void5676}5677 5678define amdgpu_kernel void @v_permlane16_b32_i_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5679; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_i32:5680; GFX10-SDAG: ; %bb.0:5681; GFX10-SDAG-NEXT: s_clause 0x15682; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305683; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245684; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 0x30395685; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05686; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5687; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15688; GFX10-SDAG-NEXT: global_store_dword v2, v1, s[2:3]5689; GFX10-SDAG-NEXT: s_endpgm5690;5691; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_i32:5692; GFX10-GISEL: ; %bb.0:5693; GFX10-GISEL-NEXT: s_clause 0x15694; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305695; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245696; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0x30395697; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5698; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15699; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, 05700; GFX10-GISEL-NEXT: global_store_dword v0, v1, s[2:3]5701; GFX10-GISEL-NEXT: s_endpgm5702;5703; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_i32:5704; GFX11-SDAG: ; %bb.0:5705; GFX11-SDAG-NEXT: s_clause 0x15706; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305707; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245708; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05709; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 05710; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5711; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)5712; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15713; GFX11-SDAG-NEXT: global_store_b32 v2, v1, s[2:3]5714; GFX11-SDAG-NEXT: s_endpgm5715;5716; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_i32:5717; GFX11-GISEL: ; %bb.0:5718; GFX11-GISEL-NEXT: s_clause 0x15719; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305720; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245721; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 0x30395722; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05723; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5724; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)5725; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15726; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 05727; GFX11-GISEL-NEXT: global_store_b32 v0, v1, s[2:3]5728; GFX11-GISEL-NEXT: s_endpgm5729;5730; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_i32:5731; GFX12-SDAG: ; %bb.0:5732; GFX12-SDAG-NEXT: s_clause 0x15733; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305734; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245735; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05736; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 05737; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05738; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)5739; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15740; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[2:3]5741; GFX12-SDAG-NEXT: s_endpgm5742;5743; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_i32:5744; GFX12-GISEL: ; %bb.0:5745; GFX12-GISEL-NEXT: s_clause 0x15746; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305747; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245748; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0x30395749; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05750; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05751; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)5752; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15753; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 05754; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[2:3]5755; GFX12-GISEL-NEXT: s_endpgm5756 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5757 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 12345, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)5758 store i32 %v, ptr addrspace(1) %out5759 ret void5760}5761 5762define amdgpu_kernel void @v_permlane16_b32_i_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5763; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_f32:5764; GFX10-SDAG: ; %bb.0:5765; GFX10-SDAG-NEXT: s_clause 0x15766; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305767; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245768; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 0x449a50005769; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05770; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5771; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15772; GFX10-SDAG-NEXT: global_store_dword v2, v1, s[2:3]5773; GFX10-SDAG-NEXT: s_endpgm5774;5775; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_f32:5776; GFX10-GISEL: ; %bb.0:5777; GFX10-GISEL-NEXT: s_clause 0x15778; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305779; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245780; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0x449a50005781; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5782; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15783; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, 05784; GFX10-GISEL-NEXT: global_store_dword v0, v1, s[2:3]5785; GFX10-GISEL-NEXT: s_endpgm5786;5787; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_f32:5788; GFX11-SDAG: ; %bb.0:5789; GFX11-SDAG-NEXT: s_clause 0x15790; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305791; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245792; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05793; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, 0x449a5000 :: v_dual_mov_b32 v2, 05794; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5795; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)5796; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15797; GFX11-SDAG-NEXT: global_store_b32 v2, v1, s[2:3]5798; GFX11-SDAG-NEXT: s_endpgm5799;5800; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_f32:5801; GFX11-GISEL: ; %bb.0:5802; GFX11-GISEL-NEXT: s_clause 0x15803; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305804; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245805; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 0x449a50005806; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05807; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5808; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)5809; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15810; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 05811; GFX11-GISEL-NEXT: global_store_b32 v0, v1, s[2:3]5812; GFX11-GISEL-NEXT: s_endpgm5813;5814; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_f32:5815; GFX12-SDAG: ; %bb.0:5816; GFX12-SDAG-NEXT: s_clause 0x15817; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305818; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245819; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05820; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, 0x449a5000 :: v_dual_mov_b32 v2, 05821; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05822; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)5823; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15824; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[2:3]5825; GFX12-SDAG-NEXT: s_endpgm5826;5827; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_f32:5828; GFX12-GISEL: ; %bb.0:5829; GFX12-GISEL-NEXT: s_clause 0x15830; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305831; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245832; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0x449a50005833; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05834; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05835; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)5836; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15837; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 05838; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[2:3]5839; GFX12-GISEL-NEXT: s_endpgm5840 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5841 %tidx_f32 = bitcast i32 %tidx to float5842 %v = call float @llvm.amdgcn.permlane16.f32(float 1234.5, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)5843 store float %v, ptr addrspace(1) %out5844 ret void5845}5846 5847define amdgpu_kernel void @v_permlane16_b32_i_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5848; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_i64:5849; GFX10-SDAG: ; %bb.0:5850; GFX10-SDAG-NEXT: s_clause 0x15851; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305852; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245853; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05854; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 0x30395855; GFX10-SDAG-NEXT: v_mov_b32_e32 v3, 05856; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5857; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s15858; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15859; GFX10-SDAG-NEXT: global_store_dwordx2 v3, v[1:2], s[2:3]5860; GFX10-SDAG-NEXT: s_endpgm5861;5862; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_i64:5863; GFX10-GISEL: ; %bb.0:5864; GFX10-GISEL-NEXT: s_clause 0x15865; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305866; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245867; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0x30395868; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 05869; GFX10-GISEL-NEXT: v_mov_b32_e32 v3, 05870; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5871; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15872; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s15873; GFX10-GISEL-NEXT: global_store_dwordx2 v3, v[1:2], s[2:3]5874; GFX10-GISEL-NEXT: s_endpgm5875;5876; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_i64:5877; GFX11-SDAG: ; %bb.0:5878; GFX11-SDAG-NEXT: s_clause 0x15879; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305880; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245881; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, 0x30395882; GFX11-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v05883; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5884; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5885; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s15886; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15887; GFX11-SDAG-NEXT: global_store_b64 v3, v[1:2], s[2:3]5888; GFX11-SDAG-NEXT: s_endpgm5889;5890; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_i64:5891; GFX11-GISEL: ; %bb.0:5892; GFX11-GISEL-NEXT: s_clause 0x15893; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305894; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245895; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 05896; GFX11-GISEL-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v05897; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5898; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)5899; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15900; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s15901; GFX11-GISEL-NEXT: global_store_b64 v3, v[1:2], s[2:3]5902; GFX11-GISEL-NEXT: s_endpgm5903;5904; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_i64:5905; GFX12-SDAG: ; %bb.0:5906; GFX12-SDAG-NEXT: s_clause 0x15907; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305908; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245909; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, 0x30395910; GFX12-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v05911; GFX12-SDAG-NEXT: s_wait_kmcnt 0x05912; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5913; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s15914; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v0, s0, s15915; GFX12-SDAG-NEXT: global_store_b64 v3, v[1:2], s[2:3]5916; GFX12-SDAG-NEXT: s_endpgm5917;5918; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_i64:5919; GFX12-GISEL: ; %bb.0:5920; GFX12-GISEL-NEXT: s_clause 0x15921; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305922; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245923; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 05924; GFX12-GISEL-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v05925; GFX12-GISEL-NEXT: s_wait_kmcnt 0x05926; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)5927; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v0, s0, s15928; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s15929; GFX12-GISEL-NEXT: global_store_b64 v3, v[1:2], s[2:3]5930; GFX12-GISEL-NEXT: s_endpgm5931 %tidx = call i32 @llvm.amdgcn.workitem.id.x()5932 %tidx_i64 = zext i32 %tidx to i645933 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 12345, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)5934 store i64 %v, ptr addrspace(1) %out5935 ret void5936}5937 5938define amdgpu_kernel void @v_permlane16_b32_i_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {5939; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_f64:5940; GFX10-SDAG: ; %bb.0:5941; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v05942; GFX10-SDAG-NEXT: s_clause 0x15943; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305944; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245945; GFX10-SDAG-NEXT: v_mov_b32_e32 v3, 0x40934a005946; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 05947; GFX10-SDAG-NEXT: v_mov_b32_e32 v4, 05948; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)5949; GFX10-SDAG-NEXT: v_permlane16_b32 v3, v1, s0, s15950; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v0, s0, s15951; GFX10-SDAG-NEXT: global_store_dwordx2 v4, v[2:3], s[2:3]5952; GFX10-SDAG-NEXT: s_endpgm5953;5954; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_f64:5955; GFX10-GISEL: ; %bb.0:5956; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v05957; GFX10-GISEL-NEXT: s_clause 0x15958; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x305959; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x245960; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 05961; GFX10-GISEL-NEXT: v_mov_b32_e32 v3, 0x40934a005962; GFX10-GISEL-NEXT: v_mov_b32_e32 v4, 05963; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)5964; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v0, s0, s15965; GFX10-GISEL-NEXT: v_permlane16_b32 v3, v1, s0, s15966; GFX10-GISEL-NEXT: global_store_dwordx2 v4, v[2:3], s[2:3]5967; GFX10-GISEL-NEXT: s_endpgm5968;5969; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_f64:5970; GFX11-SDAG: ; %bb.0:5971; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v05972; GFX11-SDAG-NEXT: s_clause 0x15973; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x305974; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x245975; GFX11-SDAG-NEXT: v_dual_mov_b32 v3, 0x40934a00 :: v_dual_mov_b32 v2, 05976; GFX11-SDAG-NEXT: v_mov_b32_e32 v4, 05977; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v05978; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)5979; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5980; GFX11-SDAG-NEXT: v_permlane16_b32 v3, v1, s0, s15981; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v0, s0, s15982; GFX11-SDAG-NEXT: global_store_b64 v4, v[2:3], s[2:3]5983; GFX11-SDAG-NEXT: s_endpgm5984;5985; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_f64:5986; GFX11-GISEL: ; %bb.0:5987; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v05988; GFX11-GISEL-NEXT: s_clause 0x15989; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x305990; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x245991; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40934a005992; GFX11-GISEL-NEXT: v_mov_b32_e32 v4, 05993; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v05994; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)5995; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5996; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v0, s0, s15997; GFX11-GISEL-NEXT: v_permlane16_b32 v3, v1, s0, s15998; GFX11-GISEL-NEXT: global_store_b64 v4, v[2:3], s[2:3]5999; GFX11-GISEL-NEXT: s_endpgm6000;6001; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_f64:6002; GFX12-SDAG: ; %bb.0:6003; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06004; GFX12-SDAG-NEXT: s_clause 0x16005; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306006; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246007; GFX12-SDAG-NEXT: v_dual_mov_b32 v3, 0x40934a00 :: v_dual_mov_b32 v2, 06008; GFX12-SDAG-NEXT: v_mov_b32_e32 v4, 06009; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06010; GFX12-SDAG-NEXT: s_wait_kmcnt 0x06011; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6012; GFX12-SDAG-NEXT: v_permlane16_b32 v3, v1, s0, s16013; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v0, s0, s16014; GFX12-SDAG-NEXT: global_store_b64 v4, v[2:3], s[2:3]6015; GFX12-SDAG-NEXT: s_endpgm6016;6017; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_f64:6018; GFX12-GISEL: ; %bb.0:6019; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06020; GFX12-GISEL-NEXT: s_clause 0x16021; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306022; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246023; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40934a006024; GFX12-GISEL-NEXT: v_mov_b32_e32 v4, 06025; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06026; GFX12-GISEL-NEXT: s_wait_kmcnt 0x06027; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6028; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v0, s0, s16029; GFX12-GISEL-NEXT: v_permlane16_b32 v3, v1, s0, s16030; GFX12-GISEL-NEXT: global_store_b64 v4, v[2:3], s[2:3]6031; GFX12-GISEL-NEXT: s_endpgm6032 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6033 %tidx_f32 = bitcast i32 %tidx to float6034 %tidx_f64 = fpext float %tidx_f32 to double6035 %v = call double @llvm.amdgcn.permlane16.f64(double 1234.5, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)6036 store double %v, ptr addrspace(1) %out6037 ret void6038}6039 6040define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6041; GFX10-LABEL: v_permlane16_b32_i_tid_fi_i32:6042; GFX10: ; %bb.0:6043; GFX10-NEXT: s_clause 0x16044; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306045; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246046; GFX10-NEXT: v_mov_b32_e32 v1, 06047; GFX10-NEXT: s_waitcnt lgkmcnt(0)6048; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6049; GFX10-NEXT: global_store_dword v1, v0, s[2:3]6050; GFX10-NEXT: s_endpgm6051;6052; GFX11-LABEL: v_permlane16_b32_i_tid_fi_i32:6053; GFX11: ; %bb.0:6054; GFX11-NEXT: s_clause 0x16055; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x306056; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x246057; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06058; GFX11-NEXT: s_waitcnt lgkmcnt(0)6059; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)6060; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6061; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]6062; GFX11-NEXT: s_endpgm6063;6064; GFX12-LABEL: v_permlane16_b32_i_tid_fi_i32:6065; GFX12: ; %bb.0:6066; GFX12-NEXT: s_clause 0x16067; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x306068; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x246069; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06070; GFX12-NEXT: s_wait_kmcnt 0x06071; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)6072; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6073; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]6074; GFX12-NEXT: s_endpgm6075 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6076 %undef = freeze i32 poison6077 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 true, i1 false)6078 store i32 %v, ptr addrspace(1) %out6079 ret void6080}6081 6082define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6083; GFX10-LABEL: v_permlane16_b32_i_tid_fi_f32:6084; GFX10: ; %bb.0:6085; GFX10-NEXT: s_clause 0x16086; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306087; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246088; GFX10-NEXT: v_mov_b32_e32 v1, 06089; GFX10-NEXT: s_waitcnt lgkmcnt(0)6090; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6091; GFX10-NEXT: global_store_dword v1, v0, s[2:3]6092; GFX10-NEXT: s_endpgm6093;6094; GFX11-LABEL: v_permlane16_b32_i_tid_fi_f32:6095; GFX11: ; %bb.0:6096; GFX11-NEXT: s_clause 0x16097; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x306098; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x246099; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06100; GFX11-NEXT: s_waitcnt lgkmcnt(0)6101; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)6102; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6103; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]6104; GFX11-NEXT: s_endpgm6105;6106; GFX12-LABEL: v_permlane16_b32_i_tid_fi_f32:6107; GFX12: ; %bb.0:6108; GFX12-NEXT: s_clause 0x16109; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x306110; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x246111; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06112; GFX12-NEXT: s_wait_kmcnt 0x06113; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)6114; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6115; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]6116; GFX12-NEXT: s_endpgm6117 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6118 %tidx_f32 = bitcast i32 %tidx to float6119 %undef = freeze float poison6120 %v = call float @llvm.amdgcn.permlane16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 true, i1 false)6121 store float %v, ptr addrspace(1) %out6122 ret void6123}6124 6125define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6126; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_fi_i64:6127; GFX10-SDAG: ; %bb.0:6128; GFX10-SDAG-NEXT: s_clause 0x16129; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306130; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246131; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 06132; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)6133; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]6134; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6135; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6136; GFX10-SDAG-NEXT: s_endpgm6137;6138; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_fi_i64:6139; GFX10-GISEL: ; %bb.0:6140; GFX10-GISEL-NEXT: s_clause 0x16141; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306142; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246143; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 06144; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)6145; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6146; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]6147; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6148; GFX10-GISEL-NEXT: s_endpgm6149;6150; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_fi_i64:6151; GFX11-SDAG: ; %bb.0:6152; GFX11-SDAG-NEXT: s_clause 0x16153; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306154; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246155; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 06156; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06157; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)6158; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6159; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]6160; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6161; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6162; GFX11-SDAG-NEXT: s_endpgm6163;6164; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_fi_i64:6165; GFX11-GISEL: ; %bb.0:6166; GFX11-GISEL-NEXT: s_clause 0x16167; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306168; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246169; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06170; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 06171; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)6172; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6173; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6174; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]6175; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6176; GFX11-GISEL-NEXT: s_endpgm6177;6178; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_fi_i64:6179; GFX12-SDAG: ; %bb.0:6180; GFX12-SDAG-NEXT: s_clause 0x16181; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306182; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246183; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 06184; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06185; GFX12-SDAG-NEXT: s_wait_kmcnt 0x06186; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6187; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]6188; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6189; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6190; GFX12-SDAG-NEXT: s_endpgm6191;6192; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_fi_i64:6193; GFX12-GISEL: ; %bb.0:6194; GFX12-GISEL-NEXT: s_clause 0x16195; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306196; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246197; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06198; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 06199; GFX12-GISEL-NEXT: s_wait_kmcnt 0x06200; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6201; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6202; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]6203; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6204; GFX12-GISEL-NEXT: s_endpgm6205 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6206 %tidx_i64 = zext i32 %tidx to i646207 %undef = freeze i64 poison6208 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 true, i1 false)6209 store i64 %v, ptr addrspace(1) %out6210 ret void6211}6212 6213define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6214; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_fi_f64:6215; GFX10-SDAG: ; %bb.0:6216; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06217; GFX10-SDAG-NEXT: s_clause 0x16218; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306219; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246220; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 06221; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)6222; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]6223; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6224; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6225; GFX10-SDAG-NEXT: s_endpgm6226;6227; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_fi_f64:6228; GFX10-GISEL: ; %bb.0:6229; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06230; GFX10-GISEL-NEXT: s_clause 0x16231; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306232; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246233; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 06234; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)6235; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6236; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]6237; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6238; GFX10-GISEL-NEXT: s_endpgm6239;6240; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_fi_f64:6241; GFX11-SDAG: ; %bb.0:6242; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06243; GFX11-SDAG-NEXT: s_clause 0x16244; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306245; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246246; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 06247; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06248; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)6249; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6250; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]6251; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6252; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6253; GFX11-SDAG-NEXT: s_endpgm6254;6255; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_fi_f64:6256; GFX11-GISEL: ; %bb.0:6257; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06258; GFX11-GISEL-NEXT: s_clause 0x16259; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306260; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246261; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 06262; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06263; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)6264; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6265; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6266; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]6267; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6268; GFX11-GISEL-NEXT: s_endpgm6269;6270; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_fi_f64:6271; GFX12-SDAG: ; %bb.0:6272; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06273; GFX12-SDAG-NEXT: s_clause 0x16274; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306275; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246276; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 06277; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06278; GFX12-SDAG-NEXT: s_wait_kmcnt 0x06279; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6280; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]6281; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6282; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6283; GFX12-SDAG-NEXT: s_endpgm6284;6285; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_fi_f64:6286; GFX12-GISEL: ; %bb.0:6287; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06288; GFX12-GISEL-NEXT: s_clause 0x16289; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306290; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246291; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 06292; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06293; GFX12-GISEL-NEXT: s_wait_kmcnt 0x06294; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6295; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]6296; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]6297; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6298; GFX12-GISEL-NEXT: s_endpgm6299 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6300 %tidx_f32 = bitcast i32 %tidx to float6301 %tidx_f64 = fpext float %tidx_f32 to double6302 %undef = freeze double poison6303 %v = call double @llvm.amdgcn.permlane16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 true, i1 false)6304 store double %v, ptr addrspace(1) %out6305 ret void6306}6307 6308define amdgpu_kernel void @v_permlane16_b32_i_tid_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6309; GFX10-LABEL: v_permlane16_b32_i_tid_bc_i32:6310; GFX10: ; %bb.0:6311; GFX10-NEXT: s_clause 0x16312; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306313; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246314; GFX10-NEXT: v_mov_b32_e32 v1, 06315; GFX10-NEXT: s_waitcnt lgkmcnt(0)6316; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6317; GFX10-NEXT: global_store_dword v1, v0, s[2:3]6318; GFX10-NEXT: s_endpgm6319;6320; GFX11-LABEL: v_permlane16_b32_i_tid_bc_i32:6321; GFX11: ; %bb.0:6322; GFX11-NEXT: s_clause 0x16323; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x306324; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x246325; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06326; GFX11-NEXT: s_waitcnt lgkmcnt(0)6327; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)6328; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6329; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]6330; GFX11-NEXT: s_endpgm6331;6332; GFX12-LABEL: v_permlane16_b32_i_tid_bc_i32:6333; GFX12: ; %bb.0:6334; GFX12-NEXT: s_clause 0x16335; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x306336; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x246337; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06338; GFX12-NEXT: s_wait_kmcnt 0x06339; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)6340; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6341; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]6342; GFX12-NEXT: s_endpgm6343 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6344 %undef = freeze i32 poison6345 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 true)6346 store i32 %v, ptr addrspace(1) %out6347 ret void6348}6349 6350define amdgpu_kernel void @v_permlane16_b32_i_tid_bc_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6351; GFX10-LABEL: v_permlane16_b32_i_tid_bc_f32:6352; GFX10: ; %bb.0:6353; GFX10-NEXT: s_clause 0x16354; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306355; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246356; GFX10-NEXT: v_mov_b32_e32 v1, 06357; GFX10-NEXT: s_waitcnt lgkmcnt(0)6358; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6359; GFX10-NEXT: global_store_dword v1, v0, s[2:3]6360; GFX10-NEXT: s_endpgm6361;6362; GFX11-LABEL: v_permlane16_b32_i_tid_bc_f32:6363; GFX11: ; %bb.0:6364; GFX11-NEXT: s_clause 0x16365; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x306366; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x246367; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06368; GFX11-NEXT: s_waitcnt lgkmcnt(0)6369; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)6370; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6371; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]6372; GFX11-NEXT: s_endpgm6373;6374; GFX12-LABEL: v_permlane16_b32_i_tid_bc_f32:6375; GFX12: ; %bb.0:6376; GFX12-NEXT: s_clause 0x16377; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x306378; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x246379; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06380; GFX12-NEXT: s_wait_kmcnt 0x06381; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)6382; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6383; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]6384; GFX12-NEXT: s_endpgm6385 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6386 %tidx_f32 = bitcast i32 %tidx to float6387 %undef = freeze float poison6388 %v = call float @llvm.amdgcn.permlane16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 true)6389 store float %v, ptr addrspace(1) %out6390 ret void6391}6392 6393define amdgpu_kernel void @v_permlane16_b32_i_tid_bc_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6394; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_bc_i64:6395; GFX10-SDAG: ; %bb.0:6396; GFX10-SDAG-NEXT: s_clause 0x16397; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306398; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246399; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 06400; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)6401; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]6402; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6403; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6404; GFX10-SDAG-NEXT: s_endpgm6405;6406; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_bc_i64:6407; GFX10-GISEL: ; %bb.0:6408; GFX10-GISEL-NEXT: s_clause 0x16409; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306410; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246411; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 06412; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)6413; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6414; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]6415; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6416; GFX10-GISEL-NEXT: s_endpgm6417;6418; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_bc_i64:6419; GFX11-SDAG: ; %bb.0:6420; GFX11-SDAG-NEXT: s_clause 0x16421; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306422; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246423; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 06424; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06425; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)6426; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6427; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]6428; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6429; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6430; GFX11-SDAG-NEXT: s_endpgm6431;6432; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_bc_i64:6433; GFX11-GISEL: ; %bb.0:6434; GFX11-GISEL-NEXT: s_clause 0x16435; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306436; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246437; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06438; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 06439; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)6440; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6441; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6442; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]6443; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6444; GFX11-GISEL-NEXT: s_endpgm6445;6446; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_bc_i64:6447; GFX12-SDAG: ; %bb.0:6448; GFX12-SDAG-NEXT: s_clause 0x16449; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306450; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246451; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 06452; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06453; GFX12-SDAG-NEXT: s_wait_kmcnt 0x06454; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6455; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]6456; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6457; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6458; GFX12-SDAG-NEXT: s_endpgm6459;6460; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_bc_i64:6461; GFX12-GISEL: ; %bb.0:6462; GFX12-GISEL-NEXT: s_clause 0x16463; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306464; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246465; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06466; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 06467; GFX12-GISEL-NEXT: s_wait_kmcnt 0x06468; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6469; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6470; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]6471; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6472; GFX12-GISEL-NEXT: s_endpgm6473 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6474 %tidx_i64 = zext i32 %tidx to i646475 %undef = freeze i64 poison6476 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 true)6477 store i64 %v, ptr addrspace(1) %out6478 ret void6479}6480 6481define amdgpu_kernel void @v_permlane16_b32_i_tid_bc_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6482; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_bc_f64:6483; GFX10-SDAG: ; %bb.0:6484; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06485; GFX10-SDAG-NEXT: s_clause 0x16486; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306487; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246488; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 06489; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)6490; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]6491; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6492; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6493; GFX10-SDAG-NEXT: s_endpgm6494;6495; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_bc_f64:6496; GFX10-GISEL: ; %bb.0:6497; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06498; GFX10-GISEL-NEXT: s_clause 0x16499; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306500; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246501; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 06502; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)6503; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6504; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]6505; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6506; GFX10-GISEL-NEXT: s_endpgm6507;6508; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_bc_f64:6509; GFX11-SDAG: ; %bb.0:6510; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06511; GFX11-SDAG-NEXT: s_clause 0x16512; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306513; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246514; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 06515; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06516; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)6517; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6518; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]6519; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6520; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6521; GFX11-SDAG-NEXT: s_endpgm6522;6523; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_bc_f64:6524; GFX11-GISEL: ; %bb.0:6525; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06526; GFX11-GISEL-NEXT: s_clause 0x16527; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306528; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246529; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 06530; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06531; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)6532; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6533; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6534; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]6535; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6536; GFX11-GISEL-NEXT: s_endpgm6537;6538; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_bc_f64:6539; GFX12-SDAG: ; %bb.0:6540; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06541; GFX12-SDAG-NEXT: s_clause 0x16542; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306543; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246544; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 06545; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06546; GFX12-SDAG-NEXT: s_wait_kmcnt 0x06547; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6548; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]6549; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6550; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6551; GFX12-SDAG-NEXT: s_endpgm6552;6553; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_bc_f64:6554; GFX12-GISEL: ; %bb.0:6555; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06556; GFX12-GISEL-NEXT: s_clause 0x16557; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306558; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246559; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 06560; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06561; GFX12-GISEL-NEXT: s_wait_kmcnt 0x06562; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6563; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]6564; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]6565; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6566; GFX12-GISEL-NEXT: s_endpgm6567 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6568 %tidx_f32 = bitcast i32 %tidx to float6569 %tidx_f64 = fpext float %tidx_f32 to double6570 %undef = freeze double poison6571 %v = call double @llvm.amdgcn.permlane16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 true)6572 store double %v, ptr addrspace(1) %out6573 ret void6574}6575 6576define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6577; GFX10-LABEL: v_permlane16_b32_i_tid_fi_bc_i32:6578; GFX10: ; %bb.0:6579; GFX10-NEXT: s_clause 0x16580; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306581; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246582; GFX10-NEXT: v_mov_b32_e32 v1, 06583; GFX10-NEXT: s_waitcnt lgkmcnt(0)6584; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6585; GFX10-NEXT: global_store_dword v1, v0, s[2:3]6586; GFX10-NEXT: s_endpgm6587;6588; GFX11-LABEL: v_permlane16_b32_i_tid_fi_bc_i32:6589; GFX11: ; %bb.0:6590; GFX11-NEXT: s_clause 0x16591; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x306592; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x246593; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06594; GFX11-NEXT: s_waitcnt lgkmcnt(0)6595; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)6596; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6597; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]6598; GFX11-NEXT: s_endpgm6599;6600; GFX12-LABEL: v_permlane16_b32_i_tid_fi_bc_i32:6601; GFX12: ; %bb.0:6602; GFX12-NEXT: s_clause 0x16603; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x306604; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x246605; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06606; GFX12-NEXT: s_wait_kmcnt 0x06607; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)6608; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6609; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]6610; GFX12-NEXT: s_endpgm6611 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6612 %undef = freeze i32 poison6613 %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 true, i1 true)6614 store i32 %v, ptr addrspace(1) %out6615 ret void6616}6617 6618define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_bc_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6619; GFX10-LABEL: v_permlane16_b32_i_tid_fi_bc_f32:6620; GFX10: ; %bb.0:6621; GFX10-NEXT: s_clause 0x16622; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306623; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246624; GFX10-NEXT: v_mov_b32_e32 v1, 06625; GFX10-NEXT: s_waitcnt lgkmcnt(0)6626; GFX10-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6627; GFX10-NEXT: global_store_dword v1, v0, s[2:3]6628; GFX10-NEXT: s_endpgm6629;6630; GFX11-LABEL: v_permlane16_b32_i_tid_fi_bc_f32:6631; GFX11: ; %bb.0:6632; GFX11-NEXT: s_clause 0x16633; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x306634; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x246635; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06636; GFX11-NEXT: s_waitcnt lgkmcnt(0)6637; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)6638; GFX11-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6639; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]6640; GFX11-NEXT: s_endpgm6641;6642; GFX12-LABEL: v_permlane16_b32_i_tid_fi_bc_f32:6643; GFX12: ; %bb.0:6644; GFX12-NEXT: s_clause 0x16645; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x306646; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x246647; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06648; GFX12-NEXT: s_wait_kmcnt 0x06649; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)6650; GFX12-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6651; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]6652; GFX12-NEXT: s_endpgm6653 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6654 %tidx_f32 = bitcast i32 %tidx to float6655 %undef = freeze float poison6656 %v = call float @llvm.amdgcn.permlane16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 true, i1 true)6657 store float %v, ptr addrspace(1) %out6658 ret void6659}6660 6661define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_bc_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6662; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:6663; GFX10-SDAG: ; %bb.0:6664; GFX10-SDAG-NEXT: s_clause 0x16665; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306666; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246667; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 06668; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)6669; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]6670; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6671; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6672; GFX10-SDAG-NEXT: s_endpgm6673;6674; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:6675; GFX10-GISEL: ; %bb.0:6676; GFX10-GISEL-NEXT: s_clause 0x16677; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306678; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246679; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 06680; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)6681; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6682; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]6683; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6684; GFX10-GISEL-NEXT: s_endpgm6685;6686; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:6687; GFX11-SDAG: ; %bb.0:6688; GFX11-SDAG-NEXT: s_clause 0x16689; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306690; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246691; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 06692; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06693; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)6694; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6695; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]6696; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6697; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6698; GFX11-SDAG-NEXT: s_endpgm6699;6700; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:6701; GFX11-GISEL: ; %bb.0:6702; GFX11-GISEL-NEXT: s_clause 0x16703; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306704; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246705; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06706; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 06707; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)6708; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6709; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6710; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]6711; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6712; GFX11-GISEL-NEXT: s_endpgm6713;6714; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:6715; GFX12-SDAG: ; %bb.0:6716; GFX12-SDAG-NEXT: s_clause 0x16717; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306718; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246719; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 06720; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06721; GFX12-SDAG-NEXT: s_wait_kmcnt 0x06722; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6723; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]6724; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6725; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6726; GFX12-SDAG-NEXT: s_endpgm6727;6728; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:6729; GFX12-GISEL: ; %bb.0:6730; GFX12-GISEL-NEXT: s_clause 0x16731; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306732; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246733; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06734; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 06735; GFX12-GISEL-NEXT: s_wait_kmcnt 0x06736; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)6737; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6738; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]6739; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6740; GFX12-GISEL-NEXT: s_endpgm6741 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6742 %tidx_i64 = zext i32 %tidx to i646743 %undef = freeze i64 poison6744 %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 true, i1 true)6745 store i64 %v, ptr addrspace(1) %out6746 ret void6747}6748 6749define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_bc_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6750; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:6751; GFX10-SDAG: ; %bb.0:6752; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06753; GFX10-SDAG-NEXT: s_clause 0x16754; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306755; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246756; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 06757; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)6758; GFX10-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]6759; GFX10-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6760; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6761; GFX10-SDAG-NEXT: s_endpgm6762;6763; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:6764; GFX10-GISEL: ; %bb.0:6765; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06766; GFX10-GISEL-NEXT: s_clause 0x16767; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306768; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246769; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 06770; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)6771; GFX10-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6772; GFX10-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]6773; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6774; GFX10-GISEL-NEXT: s_endpgm6775;6776; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:6777; GFX11-SDAG: ; %bb.0:6778; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06779; GFX11-SDAG-NEXT: s_clause 0x16780; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306781; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246782; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 06783; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06784; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)6785; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6786; GFX11-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]6787; GFX11-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6788; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6789; GFX11-SDAG-NEXT: s_endpgm6790;6791; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:6792; GFX11-GISEL: ; %bb.0:6793; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06794; GFX11-GISEL-NEXT: s_clause 0x16795; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306796; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246797; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 06798; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06799; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)6800; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6801; GFX11-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6802; GFX11-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]6803; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6804; GFX11-GISEL-NEXT: s_endpgm6805;6806; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:6807; GFX12-SDAG: ; %bb.0:6808; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v06809; GFX12-SDAG-NEXT: s_clause 0x16810; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306811; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246812; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 06813; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v06814; GFX12-SDAG-NEXT: s_wait_kmcnt 0x06815; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6816; GFX12-SDAG-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]6817; GFX12-SDAG-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6818; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6819; GFX12-SDAG-NEXT: s_endpgm6820;6821; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:6822; GFX12-GISEL: ; %bb.0:6823; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v06824; GFX12-GISEL-NEXT: s_clause 0x16825; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306826; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246827; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 06828; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v06829; GFX12-GISEL-NEXT: s_wait_kmcnt 0x06830; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)6831; GFX12-GISEL-NEXT: v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]6832; GFX12-GISEL-NEXT: v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]6833; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6834; GFX12-GISEL-NEXT: s_endpgm6835 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6836 %tidx_f32 = bitcast i32 %tidx to float6837 %tidx_f64 = fpext float %tidx_f32 to double6838 %undef = freeze double poison6839 %v = call double @llvm.amdgcn.permlane16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 true, i1 true)6840 store double %v, ptr addrspace(1) %out6841 ret void6842}6843 6844define amdgpu_kernel void @v_permlanex16_b32_tid_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6845; GFX10-LABEL: v_permlanex16_b32_tid_tid_i32:6846; GFX10: ; %bb.0:6847; GFX10-NEXT: s_clause 0x16848; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306849; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246850; GFX10-NEXT: v_mov_b32_e32 v1, 06851; GFX10-NEXT: s_waitcnt lgkmcnt(0)6852; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s16853; GFX10-NEXT: global_store_dword v1, v0, s[2:3]6854; GFX10-NEXT: s_endpgm6855;6856; GFX11-LABEL: v_permlanex16_b32_tid_tid_i32:6857; GFX11: ; %bb.0:6858; GFX11-NEXT: s_clause 0x16859; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x306860; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x246861; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06862; GFX11-NEXT: s_waitcnt lgkmcnt(0)6863; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)6864; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s16865; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]6866; GFX11-NEXT: s_endpgm6867;6868; GFX12-LABEL: v_permlanex16_b32_tid_tid_i32:6869; GFX12: ; %bb.0:6870; GFX12-NEXT: s_clause 0x16871; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x306872; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x246873; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06874; GFX12-NEXT: s_wait_kmcnt 0x06875; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)6876; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s16877; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]6878; GFX12-NEXT: s_endpgm6879 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6880 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %tidx, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)6881 store i32 %v, ptr addrspace(1) %out6882 ret void6883}6884 6885define amdgpu_kernel void @v_permlanex16_b32_tid_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6886; GFX10-LABEL: v_permlanex16_b32_tid_tid_f32:6887; GFX10: ; %bb.0:6888; GFX10-NEXT: s_clause 0x16889; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306890; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246891; GFX10-NEXT: v_mov_b32_e32 v1, 06892; GFX10-NEXT: s_waitcnt lgkmcnt(0)6893; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s16894; GFX10-NEXT: global_store_dword v1, v0, s[2:3]6895; GFX10-NEXT: s_endpgm6896;6897; GFX11-LABEL: v_permlanex16_b32_tid_tid_f32:6898; GFX11: ; %bb.0:6899; GFX11-NEXT: s_clause 0x16900; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x306901; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x246902; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06903; GFX11-NEXT: s_waitcnt lgkmcnt(0)6904; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)6905; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s16906; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]6907; GFX11-NEXT: s_endpgm6908;6909; GFX12-LABEL: v_permlanex16_b32_tid_tid_f32:6910; GFX12: ; %bb.0:6911; GFX12-NEXT: s_clause 0x16912; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x306913; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x246914; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06915; GFX12-NEXT: s_wait_kmcnt 0x06916; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)6917; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s16918; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]6919; GFX12-NEXT: s_endpgm6920 %tidx = call i32 @llvm.amdgcn.workitem.id.x()6921 %tidx_f32 = bitcast i32 %tidx to float6922 %v = call float @llvm.amdgcn.permlanex16.f32(float %tidx_f32, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)6923 store float %v, ptr addrspace(1) %out6924 ret void6925}6926 6927define amdgpu_kernel void @v_permlanex16_b32_tid_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {6928; GFX10-SDAG-LABEL: v_permlanex16_b32_tid_tid_i64:6929; GFX10-SDAG: ; %bb.0:6930; GFX10-SDAG-NEXT: s_clause 0x16931; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306932; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246933; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 06934; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 06935; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)6936; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s16937; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s16938; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6939; GFX10-SDAG-NEXT: s_endpgm6940;6941; GFX10-GISEL-LABEL: v_permlanex16_b32_tid_tid_i64:6942; GFX10-GISEL: ; %bb.0:6943; GFX10-GISEL-NEXT: s_clause 0x16944; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x306945; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x246946; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 06947; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 06948; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)6949; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s16950; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s16951; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]6952; GFX10-GISEL-NEXT: s_endpgm6953;6954; GFX11-SDAG-LABEL: v_permlanex16_b32_tid_tid_i64:6955; GFX11-SDAG: ; %bb.0:6956; GFX11-SDAG-NEXT: s_clause 0x16957; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306958; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246959; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06960; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 06961; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)6962; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)6963; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s16964; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s16965; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6966; GFX11-SDAG-NEXT: s_endpgm6967;6968; GFX11-GISEL-LABEL: v_permlanex16_b32_tid_tid_i64:6969; GFX11-GISEL: ; %bb.0:6970; GFX11-GISEL-NEXT: s_clause 0x16971; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x306972; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x246973; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06974; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 06975; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)6976; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)6977; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s16978; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s16979; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]6980; GFX11-GISEL-NEXT: s_endpgm6981;6982; GFX12-SDAG-LABEL: v_permlanex16_b32_tid_tid_i64:6983; GFX12-SDAG: ; %bb.0:6984; GFX12-SDAG-NEXT: s_clause 0x16985; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x306986; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x246987; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v06988; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 06989; GFX12-SDAG-NEXT: s_wait_kmcnt 0x06990; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)6991; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s16992; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s16993; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]6994; GFX12-SDAG-NEXT: s_endpgm6995;6996; GFX12-GISEL-LABEL: v_permlanex16_b32_tid_tid_i64:6997; GFX12-GISEL: ; %bb.0:6998; GFX12-GISEL-NEXT: s_clause 0x16999; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307000; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247001; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07002; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 07003; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07004; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)7005; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17006; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s17007; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7008; GFX12-GISEL-NEXT: s_endpgm7009 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7010 %tidx_i64 = zext i32 %tidx to i647011 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %tidx_i64, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)7012 store i64 %v, ptr addrspace(1) %out7013 ret void7014}7015 7016define amdgpu_kernel void @v_permlanex16_b32_tid_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7017; GFX10-SDAG-LABEL: v_permlanex16_b32_tid_tid_f64:7018; GFX10-SDAG: ; %bb.0:7019; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07020; GFX10-SDAG-NEXT: s_clause 0x17021; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307022; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247023; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07024; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7025; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s17026; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17027; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7028; GFX10-SDAG-NEXT: s_endpgm7029;7030; GFX10-GISEL-LABEL: v_permlanex16_b32_tid_tid_f64:7031; GFX10-GISEL: ; %bb.0:7032; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07033; GFX10-GISEL-NEXT: s_clause 0x17034; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307035; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247036; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 07037; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7038; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17039; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s17040; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7041; GFX10-GISEL-NEXT: s_endpgm7042;7043; GFX11-SDAG-LABEL: v_permlanex16_b32_tid_tid_f64:7044; GFX11-SDAG: ; %bb.0:7045; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07046; GFX11-SDAG-NEXT: s_clause 0x17047; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307048; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247049; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 07050; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07051; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7052; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7053; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s17054; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17055; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7056; GFX11-SDAG-NEXT: s_endpgm7057;7058; GFX11-GISEL-LABEL: v_permlanex16_b32_tid_tid_f64:7059; GFX11-GISEL: ; %bb.0:7060; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07061; GFX11-GISEL-NEXT: s_clause 0x17062; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307063; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247064; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 07065; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07066; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7067; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7068; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17069; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s17070; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7071; GFX11-GISEL-NEXT: s_endpgm7072;7073; GFX12-SDAG-LABEL: v_permlanex16_b32_tid_tid_f64:7074; GFX12-SDAG: ; %bb.0:7075; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07076; GFX12-SDAG-NEXT: s_clause 0x17077; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307078; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247079; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 07080; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07081; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07082; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7083; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s17084; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17085; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7086; GFX12-SDAG-NEXT: s_endpgm7087;7088; GFX12-GISEL-LABEL: v_permlanex16_b32_tid_tid_f64:7089; GFX12-GISEL: ; %bb.0:7090; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07091; GFX12-GISEL-NEXT: s_clause 0x17092; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307093; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247094; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 07095; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07096; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07097; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7098; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17099; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s17100; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7101; GFX12-GISEL-NEXT: s_endpgm7102 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7103 %tidx_f32 = bitcast i32 %tidx to float7104 %tidx_f64 = fpext float %tidx_f32 to double7105 %v = call double @llvm.amdgcn.permlanex16.f64(double %tidx_f64, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)7106 store double %v, ptr addrspace(1) %out7107 ret void7108}7109 7110define amdgpu_kernel void @v_permlanex16_b32_undef_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7111; GFX10-LABEL: v_permlanex16_b32_undef_tid_i32:7112; GFX10: ; %bb.0:7113; GFX10-NEXT: s_clause 0x17114; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307115; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247116; GFX10-NEXT: v_mov_b32_e32 v1, 07117; GFX10-NEXT: s_waitcnt lgkmcnt(0)7118; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s17119; GFX10-NEXT: global_store_dword v1, v0, s[2:3]7120; GFX10-NEXT: s_endpgm7121;7122; GFX11-LABEL: v_permlanex16_b32_undef_tid_i32:7123; GFX11: ; %bb.0:7124; GFX11-NEXT: s_clause 0x17125; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x307126; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x247127; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07128; GFX11-NEXT: s_waitcnt lgkmcnt(0)7129; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)7130; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s17131; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]7132; GFX11-NEXT: s_endpgm7133;7134; GFX12-LABEL: v_permlanex16_b32_undef_tid_i32:7135; GFX12: ; %bb.0:7136; GFX12-NEXT: s_clause 0x17137; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x307138; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x247139; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07140; GFX12-NEXT: s_wait_kmcnt 0x07141; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)7142; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s17143; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]7144; GFX12-NEXT: s_endpgm7145 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7146 %undef = freeze i32 poison7147 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)7148 store i32 %v, ptr addrspace(1) %out7149 ret void7150}7151 7152define amdgpu_kernel void @v_permlanex16_b32_undef_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7153; GFX10-LABEL: v_permlanex16_b32_undef_tid_f32:7154; GFX10: ; %bb.0:7155; GFX10-NEXT: s_clause 0x17156; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307157; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247158; GFX10-NEXT: v_mov_b32_e32 v1, 07159; GFX10-NEXT: s_waitcnt lgkmcnt(0)7160; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s17161; GFX10-NEXT: global_store_dword v1, v0, s[2:3]7162; GFX10-NEXT: s_endpgm7163;7164; GFX11-LABEL: v_permlanex16_b32_undef_tid_f32:7165; GFX11: ; %bb.0:7166; GFX11-NEXT: s_clause 0x17167; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x307168; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x247169; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07170; GFX11-NEXT: s_waitcnt lgkmcnt(0)7171; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)7172; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s17173; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]7174; GFX11-NEXT: s_endpgm7175;7176; GFX12-LABEL: v_permlanex16_b32_undef_tid_f32:7177; GFX12: ; %bb.0:7178; GFX12-NEXT: s_clause 0x17179; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x307180; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x247181; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07182; GFX12-NEXT: s_wait_kmcnt 0x07183; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)7184; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s17185; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]7186; GFX12-NEXT: s_endpgm7187 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7188 %tidx_f32 = bitcast i32 %tidx to float7189 %undef = freeze float poison7190 %v = call float @llvm.amdgcn.permlanex16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)7191 store float %v, ptr addrspace(1) %out7192 ret void7193}7194 7195define amdgpu_kernel void @v_permlanex16_b32_undef_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7196; GFX10-SDAG-LABEL: v_permlanex16_b32_undef_tid_i64:7197; GFX10-SDAG: ; %bb.0:7198; GFX10-SDAG-NEXT: s_clause 0x17199; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307200; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247201; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07202; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7203; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s17204; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17205; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7206; GFX10-SDAG-NEXT: s_endpgm7207;7208; GFX10-GISEL-LABEL: v_permlanex16_b32_undef_tid_i64:7209; GFX10-GISEL: ; %bb.0:7210; GFX10-GISEL-NEXT: s_clause 0x17211; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307212; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247213; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 07214; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7215; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17216; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s17217; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7218; GFX10-GISEL-NEXT: s_endpgm7219;7220; GFX11-SDAG-LABEL: v_permlanex16_b32_undef_tid_i64:7221; GFX11-SDAG: ; %bb.0:7222; GFX11-SDAG-NEXT: s_clause 0x17223; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307224; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247225; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 07226; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07227; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7228; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7229; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s17230; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17231; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7232; GFX11-SDAG-NEXT: s_endpgm7233;7234; GFX11-GISEL-LABEL: v_permlanex16_b32_undef_tid_i64:7235; GFX11-GISEL: ; %bb.0:7236; GFX11-GISEL-NEXT: s_clause 0x17237; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307238; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247239; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07240; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 07241; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7242; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7243; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17244; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s17245; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7246; GFX11-GISEL-NEXT: s_endpgm7247;7248; GFX12-SDAG-LABEL: v_permlanex16_b32_undef_tid_i64:7249; GFX12-SDAG: ; %bb.0:7250; GFX12-SDAG-NEXT: s_clause 0x17251; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307252; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247253; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 07254; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07255; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07256; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7257; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s17258; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17259; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7260; GFX12-SDAG-NEXT: s_endpgm7261;7262; GFX12-GISEL-LABEL: v_permlanex16_b32_undef_tid_i64:7263; GFX12-GISEL: ; %bb.0:7264; GFX12-GISEL-NEXT: s_clause 0x17265; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307266; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247267; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07268; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 07269; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07270; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7271; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17272; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s17273; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7274; GFX12-GISEL-NEXT: s_endpgm7275 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7276 %tidx_i64 = zext i32 %tidx to i647277 %undef = freeze i64 poison7278 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)7279 store i64 %v, ptr addrspace(1) %out7280 ret void7281}7282 7283define amdgpu_kernel void @v_permlanex16_b32_undef_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7284; GFX10-SDAG-LABEL: v_permlanex16_b32_undef_tid_f64:7285; GFX10-SDAG: ; %bb.0:7286; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07287; GFX10-SDAG-NEXT: s_clause 0x17288; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307289; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247290; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07291; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7292; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s17293; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17294; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7295; GFX10-SDAG-NEXT: s_endpgm7296;7297; GFX10-GISEL-LABEL: v_permlanex16_b32_undef_tid_f64:7298; GFX10-GISEL: ; %bb.0:7299; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07300; GFX10-GISEL-NEXT: s_clause 0x17301; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307302; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247303; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 07304; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7305; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17306; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s17307; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7308; GFX10-GISEL-NEXT: s_endpgm7309;7310; GFX11-SDAG-LABEL: v_permlanex16_b32_undef_tid_f64:7311; GFX11-SDAG: ; %bb.0:7312; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07313; GFX11-SDAG-NEXT: s_clause 0x17314; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307315; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247316; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 07317; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07318; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7319; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7320; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s17321; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17322; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7323; GFX11-SDAG-NEXT: s_endpgm7324;7325; GFX11-GISEL-LABEL: v_permlanex16_b32_undef_tid_f64:7326; GFX11-GISEL: ; %bb.0:7327; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07328; GFX11-GISEL-NEXT: s_clause 0x17329; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307330; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247331; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 07332; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07333; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7334; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7335; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17336; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s17337; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7338; GFX11-GISEL-NEXT: s_endpgm7339;7340; GFX12-SDAG-LABEL: v_permlanex16_b32_undef_tid_f64:7341; GFX12-SDAG: ; %bb.0:7342; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07343; GFX12-SDAG-NEXT: s_clause 0x17344; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307345; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247346; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 07347; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07348; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07349; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7350; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s17351; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s17352; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7353; GFX12-SDAG-NEXT: s_endpgm7354;7355; GFX12-GISEL-LABEL: v_permlanex16_b32_undef_tid_f64:7356; GFX12-GISEL: ; %bb.0:7357; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07358; GFX12-GISEL-NEXT: s_clause 0x17359; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307360; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247361; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 07362; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07363; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07364; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7365; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s17366; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s17367; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7368; GFX12-GISEL-NEXT: s_endpgm7369 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7370 %tidx_f32 = bitcast i32 %tidx to float7371 %tidx_f64 = fpext float %tidx_f32 to double7372 %undef = freeze double poison7373 %v = call double @llvm.amdgcn.permlanex16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)7374 store double %v, ptr addrspace(1) %out7375 ret void7376}7377 7378define amdgpu_kernel void @v_permlanex16_b32_i_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7379; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_i32:7380; GFX10-SDAG: ; %bb.0:7381; GFX10-SDAG-NEXT: s_clause 0x17382; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307383; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247384; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 0x30397385; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07386; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7387; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17388; GFX10-SDAG-NEXT: global_store_dword v2, v1, s[2:3]7389; GFX10-SDAG-NEXT: s_endpgm7390;7391; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_i32:7392; GFX10-GISEL: ; %bb.0:7393; GFX10-GISEL-NEXT: s_clause 0x17394; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307395; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247396; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0x30397397; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7398; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17399; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, 07400; GFX10-GISEL-NEXT: global_store_dword v0, v1, s[2:3]7401; GFX10-GISEL-NEXT: s_endpgm7402;7403; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_i32:7404; GFX11-SDAG: ; %bb.0:7405; GFX11-SDAG-NEXT: s_clause 0x17406; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307407; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247408; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07409; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 07410; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7411; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)7412; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17413; GFX11-SDAG-NEXT: global_store_b32 v2, v1, s[2:3]7414; GFX11-SDAG-NEXT: s_endpgm7415;7416; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_i32:7417; GFX11-GISEL: ; %bb.0:7418; GFX11-GISEL-NEXT: s_clause 0x17419; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307420; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247421; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 0x30397422; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07423; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7424; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)7425; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17426; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 07427; GFX11-GISEL-NEXT: global_store_b32 v0, v1, s[2:3]7428; GFX11-GISEL-NEXT: s_endpgm7429;7430; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_i32:7431; GFX12-SDAG: ; %bb.0:7432; GFX12-SDAG-NEXT: s_clause 0x17433; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307434; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247435; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07436; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 07437; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07438; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)7439; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17440; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[2:3]7441; GFX12-SDAG-NEXT: s_endpgm7442;7443; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_i32:7444; GFX12-GISEL: ; %bb.0:7445; GFX12-GISEL-NEXT: s_clause 0x17446; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307447; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247448; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0x30397449; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07450; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07451; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)7452; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17453; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 07454; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[2:3]7455; GFX12-GISEL-NEXT: s_endpgm7456 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7457 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 12345, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)7458 store i32 %v, ptr addrspace(1) %out7459 ret void7460}7461 7462define amdgpu_kernel void @v_permlanex16_b32_i_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7463; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_f32:7464; GFX10-SDAG: ; %bb.0:7465; GFX10-SDAG-NEXT: s_clause 0x17466; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307467; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247468; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 0x449a50007469; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07470; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7471; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17472; GFX10-SDAG-NEXT: global_store_dword v2, v1, s[2:3]7473; GFX10-SDAG-NEXT: s_endpgm7474;7475; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_f32:7476; GFX10-GISEL: ; %bb.0:7477; GFX10-GISEL-NEXT: s_clause 0x17478; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307479; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247480; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0x449a50007481; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7482; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17483; GFX10-GISEL-NEXT: v_mov_b32_e32 v0, 07484; GFX10-GISEL-NEXT: global_store_dword v0, v1, s[2:3]7485; GFX10-GISEL-NEXT: s_endpgm7486;7487; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_f32:7488; GFX11-SDAG: ; %bb.0:7489; GFX11-SDAG-NEXT: s_clause 0x17490; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307491; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247492; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07493; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, 0x449a5000 :: v_dual_mov_b32 v2, 07494; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7495; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)7496; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17497; GFX11-SDAG-NEXT: global_store_b32 v2, v1, s[2:3]7498; GFX11-SDAG-NEXT: s_endpgm7499;7500; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_f32:7501; GFX11-GISEL: ; %bb.0:7502; GFX11-GISEL-NEXT: s_clause 0x17503; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307504; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247505; GFX11-GISEL-NEXT: v_mov_b32_e32 v1, 0x449a50007506; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07507; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7508; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)7509; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17510; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 07511; GFX11-GISEL-NEXT: global_store_b32 v0, v1, s[2:3]7512; GFX11-GISEL-NEXT: s_endpgm7513;7514; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_f32:7515; GFX12-SDAG: ; %bb.0:7516; GFX12-SDAG-NEXT: s_clause 0x17517; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307518; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247519; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07520; GFX12-SDAG-NEXT: v_dual_mov_b32 v1, 0x449a5000 :: v_dual_mov_b32 v2, 07521; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07522; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)7523; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17524; GFX12-SDAG-NEXT: global_store_b32 v2, v1, s[2:3]7525; GFX12-SDAG-NEXT: s_endpgm7526;7527; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_f32:7528; GFX12-GISEL: ; %bb.0:7529; GFX12-GISEL-NEXT: s_clause 0x17530; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307531; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247532; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, 0x449a50007533; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07534; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07535; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)7536; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17537; GFX12-GISEL-NEXT: v_mov_b32_e32 v0, 07538; GFX12-GISEL-NEXT: global_store_b32 v0, v1, s[2:3]7539; GFX12-GISEL-NEXT: s_endpgm7540 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7541 %tidx_f32 = bitcast i32 %tidx to float7542 %v = call float @llvm.amdgcn.permlanex16.f32(float 1234.5, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)7543 store float %v, ptr addrspace(1) %out7544 ret void7545}7546 7547define amdgpu_kernel void @v_permlanex16_b32_i_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7548; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_i64:7549; GFX10-SDAG: ; %bb.0:7550; GFX10-SDAG-NEXT: s_clause 0x17551; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307552; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247553; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07554; GFX10-SDAG-NEXT: v_mov_b32_e32 v1, 0x30397555; GFX10-SDAG-NEXT: v_mov_b32_e32 v3, 07556; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7557; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s17558; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17559; GFX10-SDAG-NEXT: global_store_dwordx2 v3, v[1:2], s[2:3]7560; GFX10-SDAG-NEXT: s_endpgm7561;7562; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_i64:7563; GFX10-GISEL: ; %bb.0:7564; GFX10-GISEL-NEXT: s_clause 0x17565; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307566; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247567; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0x30397568; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 07569; GFX10-GISEL-NEXT: v_mov_b32_e32 v3, 07570; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7571; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17572; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s17573; GFX10-GISEL-NEXT: global_store_dwordx2 v3, v[1:2], s[2:3]7574; GFX10-GISEL-NEXT: s_endpgm7575;7576; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_i64:7577; GFX11-SDAG: ; %bb.0:7578; GFX11-SDAG-NEXT: s_clause 0x17579; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307580; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247581; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, 0x30397582; GFX11-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v07583; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7584; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7585; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s17586; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17587; GFX11-SDAG-NEXT: global_store_b64 v3, v[1:2], s[2:3]7588; GFX11-SDAG-NEXT: s_endpgm7589;7590; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_i64:7591; GFX11-GISEL: ; %bb.0:7592; GFX11-GISEL-NEXT: s_clause 0x17593; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307594; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247595; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 07596; GFX11-GISEL-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v07597; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7598; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)7599; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17600; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s17601; GFX11-GISEL-NEXT: global_store_b64 v3, v[1:2], s[2:3]7602; GFX11-GISEL-NEXT: s_endpgm7603;7604; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_i64:7605; GFX12-SDAG: ; %bb.0:7606; GFX12-SDAG-NEXT: s_clause 0x17607; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307608; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247609; GFX12-SDAG-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, 0x30397610; GFX12-SDAG-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v07611; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07612; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7613; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s17614; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v0, s0, s17615; GFX12-SDAG-NEXT: global_store_b64 v3, v[1:2], s[2:3]7616; GFX12-SDAG-NEXT: s_endpgm7617;7618; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_i64:7619; GFX12-GISEL: ; %bb.0:7620; GFX12-GISEL-NEXT: s_clause 0x17621; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307622; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247623; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 07624; GFX12-GISEL-NEXT: v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v07625; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07626; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)7627; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v0, s0, s17628; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s17629; GFX12-GISEL-NEXT: global_store_b64 v3, v[1:2], s[2:3]7630; GFX12-GISEL-NEXT: s_endpgm7631 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7632 %tidx_i64 = zext i32 %tidx to i647633 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 12345, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)7634 store i64 %v, ptr addrspace(1) %out7635 ret void7636}7637 7638define amdgpu_kernel void @v_permlanex16_b32_i_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7639; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_f64:7640; GFX10-SDAG: ; %bb.0:7641; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07642; GFX10-SDAG-NEXT: s_clause 0x17643; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307644; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247645; GFX10-SDAG-NEXT: v_mov_b32_e32 v3, 0x40934a007646; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07647; GFX10-SDAG-NEXT: v_mov_b32_e32 v4, 07648; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7649; GFX10-SDAG-NEXT: v_permlanex16_b32 v3, v1, s0, s17650; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v0, s0, s17651; GFX10-SDAG-NEXT: global_store_dwordx2 v4, v[2:3], s[2:3]7652; GFX10-SDAG-NEXT: s_endpgm7653;7654; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_f64:7655; GFX10-GISEL: ; %bb.0:7656; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07657; GFX10-GISEL-NEXT: s_clause 0x17658; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307659; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247660; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 07661; GFX10-GISEL-NEXT: v_mov_b32_e32 v3, 0x40934a007662; GFX10-GISEL-NEXT: v_mov_b32_e32 v4, 07663; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7664; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v0, s0, s17665; GFX10-GISEL-NEXT: v_permlanex16_b32 v3, v1, s0, s17666; GFX10-GISEL-NEXT: global_store_dwordx2 v4, v[2:3], s[2:3]7667; GFX10-GISEL-NEXT: s_endpgm7668;7669; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_f64:7670; GFX11-SDAG: ; %bb.0:7671; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07672; GFX11-SDAG-NEXT: s_clause 0x17673; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307674; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247675; GFX11-SDAG-NEXT: v_dual_mov_b32 v3, 0x40934a00 :: v_dual_mov_b32 v2, 07676; GFX11-SDAG-NEXT: v_mov_b32_e32 v4, 07677; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07678; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7679; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7680; GFX11-SDAG-NEXT: v_permlanex16_b32 v3, v1, s0, s17681; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v0, s0, s17682; GFX11-SDAG-NEXT: global_store_b64 v4, v[2:3], s[2:3]7683; GFX11-SDAG-NEXT: s_endpgm7684;7685; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_f64:7686; GFX11-GISEL: ; %bb.0:7687; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07688; GFX11-GISEL-NEXT: s_clause 0x17689; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307690; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247691; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40934a007692; GFX11-GISEL-NEXT: v_mov_b32_e32 v4, 07693; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07694; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7695; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7696; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v0, s0, s17697; GFX11-GISEL-NEXT: v_permlanex16_b32 v3, v1, s0, s17698; GFX11-GISEL-NEXT: global_store_b64 v4, v[2:3], s[2:3]7699; GFX11-GISEL-NEXT: s_endpgm7700;7701; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_f64:7702; GFX12-SDAG: ; %bb.0:7703; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07704; GFX12-SDAG-NEXT: s_clause 0x17705; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307706; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247707; GFX12-SDAG-NEXT: v_dual_mov_b32 v3, 0x40934a00 :: v_dual_mov_b32 v2, 07708; GFX12-SDAG-NEXT: v_mov_b32_e32 v4, 07709; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07710; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07711; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7712; GFX12-SDAG-NEXT: v_permlanex16_b32 v3, v1, s0, s17713; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v0, s0, s17714; GFX12-SDAG-NEXT: global_store_b64 v4, v[2:3], s[2:3]7715; GFX12-SDAG-NEXT: s_endpgm7716;7717; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_f64:7718; GFX12-GISEL: ; %bb.0:7719; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07720; GFX12-GISEL-NEXT: s_clause 0x17721; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307722; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247723; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40934a007724; GFX12-GISEL-NEXT: v_mov_b32_e32 v4, 07725; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07726; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07727; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7728; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v0, s0, s17729; GFX12-GISEL-NEXT: v_permlanex16_b32 v3, v1, s0, s17730; GFX12-GISEL-NEXT: global_store_b64 v4, v[2:3], s[2:3]7731; GFX12-GISEL-NEXT: s_endpgm7732 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7733 %tidx_f32 = bitcast i32 %tidx to float7734 %tidx_f64 = fpext float %tidx_f32 to double7735 %v = call double @llvm.amdgcn.permlanex16.f64(double 1234.5, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)7736 store double %v, ptr addrspace(1) %out7737 ret void7738}7739 7740define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7741; GFX10-LABEL: v_permlanex16_b32_i_tid_fi_i32:7742; GFX10: ; %bb.0:7743; GFX10-NEXT: s_clause 0x17744; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307745; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247746; GFX10-NEXT: v_mov_b32_e32 v1, 07747; GFX10-NEXT: s_waitcnt lgkmcnt(0)7748; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7749; GFX10-NEXT: global_store_dword v1, v0, s[2:3]7750; GFX10-NEXT: s_endpgm7751;7752; GFX11-LABEL: v_permlanex16_b32_i_tid_fi_i32:7753; GFX11: ; %bb.0:7754; GFX11-NEXT: s_clause 0x17755; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x307756; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x247757; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07758; GFX11-NEXT: s_waitcnt lgkmcnt(0)7759; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)7760; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7761; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]7762; GFX11-NEXT: s_endpgm7763;7764; GFX12-LABEL: v_permlanex16_b32_i_tid_fi_i32:7765; GFX12: ; %bb.0:7766; GFX12-NEXT: s_clause 0x17767; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x307768; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x247769; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07770; GFX12-NEXT: s_wait_kmcnt 0x07771; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)7772; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7773; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]7774; GFX12-NEXT: s_endpgm7775 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7776 %undef = freeze i32 poison7777 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 true, i1 false)7778 store i32 %v, ptr addrspace(1) %out7779 ret void7780}7781 7782define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7783; GFX10-LABEL: v_permlanex16_b32_i_tid_fi_f32:7784; GFX10: ; %bb.0:7785; GFX10-NEXT: s_clause 0x17786; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307787; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247788; GFX10-NEXT: v_mov_b32_e32 v1, 07789; GFX10-NEXT: s_waitcnt lgkmcnt(0)7790; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7791; GFX10-NEXT: global_store_dword v1, v0, s[2:3]7792; GFX10-NEXT: s_endpgm7793;7794; GFX11-LABEL: v_permlanex16_b32_i_tid_fi_f32:7795; GFX11: ; %bb.0:7796; GFX11-NEXT: s_clause 0x17797; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x307798; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x247799; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07800; GFX11-NEXT: s_waitcnt lgkmcnt(0)7801; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)7802; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7803; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]7804; GFX11-NEXT: s_endpgm7805;7806; GFX12-LABEL: v_permlanex16_b32_i_tid_fi_f32:7807; GFX12: ; %bb.0:7808; GFX12-NEXT: s_clause 0x17809; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x307810; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x247811; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v07812; GFX12-NEXT: s_wait_kmcnt 0x07813; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)7814; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7815; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]7816; GFX12-NEXT: s_endpgm7817 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7818 %tidx_f32 = bitcast i32 %tidx to float7819 %undef = freeze float poison7820 %v = call float @llvm.amdgcn.permlanex16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 true, i1 false)7821 store float %v, ptr addrspace(1) %out7822 ret void7823}7824 7825define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7826; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_i64:7827; GFX10-SDAG: ; %bb.0:7828; GFX10-SDAG-NEXT: s_clause 0x17829; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307830; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247831; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07832; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7833; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]7834; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7835; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7836; GFX10-SDAG-NEXT: s_endpgm7837;7838; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_i64:7839; GFX10-GISEL: ; %bb.0:7840; GFX10-GISEL-NEXT: s_clause 0x17841; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307842; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247843; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 07844; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7845; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7846; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]7847; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7848; GFX10-GISEL-NEXT: s_endpgm7849;7850; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_i64:7851; GFX11-SDAG: ; %bb.0:7852; GFX11-SDAG-NEXT: s_clause 0x17853; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307854; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247855; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 07856; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07857; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7858; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7859; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]7860; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7861; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7862; GFX11-SDAG-NEXT: s_endpgm7863;7864; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_i64:7865; GFX11-GISEL: ; %bb.0:7866; GFX11-GISEL-NEXT: s_clause 0x17867; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307868; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247869; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07870; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 07871; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7872; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7873; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7874; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]7875; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7876; GFX11-GISEL-NEXT: s_endpgm7877;7878; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_i64:7879; GFX12-SDAG: ; %bb.0:7880; GFX12-SDAG-NEXT: s_clause 0x17881; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307882; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247883; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 07884; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07885; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07886; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7887; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]7888; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7889; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7890; GFX12-SDAG-NEXT: s_endpgm7891;7892; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_i64:7893; GFX12-GISEL: ; %bb.0:7894; GFX12-GISEL-NEXT: s_clause 0x17895; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307896; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247897; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07898; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 07899; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07900; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)7901; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7902; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]7903; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7904; GFX12-GISEL-NEXT: s_endpgm7905 %tidx = call i32 @llvm.amdgcn.workitem.id.x()7906 %tidx_i64 = zext i32 %tidx to i647907 %undef = freeze i64 poison7908 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 true, i1 false)7909 store i64 %v, ptr addrspace(1) %out7910 ret void7911}7912 7913define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {7914; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_f64:7915; GFX10-SDAG: ; %bb.0:7916; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07917; GFX10-SDAG-NEXT: s_clause 0x17918; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307919; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247920; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 07921; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)7922; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]7923; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7924; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7925; GFX10-SDAG-NEXT: s_endpgm7926;7927; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_f64:7928; GFX10-GISEL: ; %bb.0:7929; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07930; GFX10-GISEL-NEXT: s_clause 0x17931; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x307932; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x247933; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 07934; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)7935; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7936; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]7937; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]7938; GFX10-GISEL-NEXT: s_endpgm7939;7940; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_f64:7941; GFX11-SDAG: ; %bb.0:7942; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07943; GFX11-SDAG-NEXT: s_clause 0x17944; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307945; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247946; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 07947; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07948; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)7949; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7950; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]7951; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7952; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7953; GFX11-SDAG-NEXT: s_endpgm7954;7955; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_f64:7956; GFX11-GISEL: ; %bb.0:7957; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07958; GFX11-GISEL-NEXT: s_clause 0x17959; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307960; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247961; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 07962; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07963; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)7964; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7965; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7966; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]7967; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7968; GFX11-GISEL-NEXT: s_endpgm7969;7970; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_f64:7971; GFX12-SDAG: ; %bb.0:7972; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v07973; GFX12-SDAG-NEXT: s_clause 0x17974; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x307975; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x247976; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 07977; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v07978; GFX12-SDAG-NEXT: s_wait_kmcnt 0x07979; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7980; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]7981; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7982; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]7983; GFX12-SDAG-NEXT: s_endpgm7984;7985; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_f64:7986; GFX12-GISEL: ; %bb.0:7987; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v07988; GFX12-GISEL-NEXT: s_clause 0x17989; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x307990; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x247991; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 07992; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v07993; GFX12-GISEL-NEXT: s_wait_kmcnt 0x07994; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)7995; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]7996; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]7997; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]7998; GFX12-GISEL-NEXT: s_endpgm7999 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8000 %tidx_f32 = bitcast i32 %tidx to float8001 %tidx_f64 = fpext float %tidx_f32 to double8002 %undef = freeze double poison8003 %v = call double @llvm.amdgcn.permlanex16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 true, i1 false)8004 store double %v, ptr addrspace(1) %out8005 ret void8006}8007 8008define amdgpu_kernel void @v_permlanex16_b32_i_tid_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {8009; GFX10-LABEL: v_permlanex16_b32_i_tid_bc_i32:8010; GFX10: ; %bb.0:8011; GFX10-NEXT: s_clause 0x18012; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308013; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248014; GFX10-NEXT: v_mov_b32_e32 v1, 08015; GFX10-NEXT: s_waitcnt lgkmcnt(0)8016; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8017; GFX10-NEXT: global_store_dword v1, v0, s[2:3]8018; GFX10-NEXT: s_endpgm8019;8020; GFX11-LABEL: v_permlanex16_b32_i_tid_bc_i32:8021; GFX11: ; %bb.0:8022; GFX11-NEXT: s_clause 0x18023; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x308024; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x248025; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v08026; GFX11-NEXT: s_waitcnt lgkmcnt(0)8027; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8028; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8029; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]8030; GFX11-NEXT: s_endpgm8031;8032; GFX12-LABEL: v_permlanex16_b32_i_tid_bc_i32:8033; GFX12: ; %bb.0:8034; GFX12-NEXT: s_clause 0x18035; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x308036; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x248037; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v08038; GFX12-NEXT: s_wait_kmcnt 0x08039; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8040; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8041; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]8042; GFX12-NEXT: s_endpgm8043 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8044 %undef = freeze i32 poison8045 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 true)8046 store i32 %v, ptr addrspace(1) %out8047 ret void8048}8049 8050define amdgpu_kernel void @v_permlanex16_b32_i_tid_bc_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {8051; GFX10-LABEL: v_permlanex16_b32_i_tid_bc_f32:8052; GFX10: ; %bb.0:8053; GFX10-NEXT: s_clause 0x18054; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308055; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248056; GFX10-NEXT: v_mov_b32_e32 v1, 08057; GFX10-NEXT: s_waitcnt lgkmcnt(0)8058; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8059; GFX10-NEXT: global_store_dword v1, v0, s[2:3]8060; GFX10-NEXT: s_endpgm8061;8062; GFX11-LABEL: v_permlanex16_b32_i_tid_bc_f32:8063; GFX11: ; %bb.0:8064; GFX11-NEXT: s_clause 0x18065; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x308066; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x248067; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v08068; GFX11-NEXT: s_waitcnt lgkmcnt(0)8069; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8070; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8071; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]8072; GFX11-NEXT: s_endpgm8073;8074; GFX12-LABEL: v_permlanex16_b32_i_tid_bc_f32:8075; GFX12: ; %bb.0:8076; GFX12-NEXT: s_clause 0x18077; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x308078; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x248079; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v08080; GFX12-NEXT: s_wait_kmcnt 0x08081; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8082; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8083; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]8084; GFX12-NEXT: s_endpgm8085 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8086 %tidx_f32 = bitcast i32 %tidx to float8087 %undef = freeze float poison8088 %v = call float @llvm.amdgcn.permlanex16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 true)8089 store float %v, ptr addrspace(1) %out8090 ret void8091}8092 8093define amdgpu_kernel void @v_permlanex16_b32_i_tid_bc_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {8094; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_i64:8095; GFX10-SDAG: ; %bb.0:8096; GFX10-SDAG-NEXT: s_clause 0x18097; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308098; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248099; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 08100; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)8101; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]8102; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8103; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]8104; GFX10-SDAG-NEXT: s_endpgm8105;8106; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_i64:8107; GFX10-GISEL: ; %bb.0:8108; GFX10-GISEL-NEXT: s_clause 0x18109; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308110; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248111; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 08112; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)8113; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8114; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]8115; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]8116; GFX10-GISEL-NEXT: s_endpgm8117;8118; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_i64:8119; GFX11-SDAG: ; %bb.0:8120; GFX11-SDAG-NEXT: s_clause 0x18121; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x308122; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x248123; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 08124; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v08125; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)8126; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)8127; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]8128; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8129; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]8130; GFX11-SDAG-NEXT: s_endpgm8131;8132; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_i64:8133; GFX11-GISEL: ; %bb.0:8134; GFX11-GISEL-NEXT: s_clause 0x18135; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x308136; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x248137; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v08138; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 08139; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)8140; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)8141; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8142; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]8143; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]8144; GFX11-GISEL-NEXT: s_endpgm8145;8146; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_i64:8147; GFX12-SDAG: ; %bb.0:8148; GFX12-SDAG-NEXT: s_clause 0x18149; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x308150; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x248151; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 08152; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v08153; GFX12-SDAG-NEXT: s_wait_kmcnt 0x08154; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)8155; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]8156; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8157; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]8158; GFX12-SDAG-NEXT: s_endpgm8159;8160; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_i64:8161; GFX12-GISEL: ; %bb.0:8162; GFX12-GISEL-NEXT: s_clause 0x18163; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x308164; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x248165; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v08166; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 08167; GFX12-GISEL-NEXT: s_wait_kmcnt 0x08168; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)8169; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8170; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]8171; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]8172; GFX12-GISEL-NEXT: s_endpgm8173 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8174 %tidx_i64 = zext i32 %tidx to i648175 %undef = freeze i64 poison8176 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 true)8177 store i64 %v, ptr addrspace(1) %out8178 ret void8179}8180 8181define amdgpu_kernel void @v_permlanex16_b32_i_tid_bc_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {8182; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_f64:8183; GFX10-SDAG: ; %bb.0:8184; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v08185; GFX10-SDAG-NEXT: s_clause 0x18186; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308187; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248188; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 08189; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)8190; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]8191; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8192; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]8193; GFX10-SDAG-NEXT: s_endpgm8194;8195; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_f64:8196; GFX10-GISEL: ; %bb.0:8197; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v08198; GFX10-GISEL-NEXT: s_clause 0x18199; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308200; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248201; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 08202; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)8203; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8204; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]8205; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]8206; GFX10-GISEL-NEXT: s_endpgm8207;8208; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_f64:8209; GFX11-SDAG: ; %bb.0:8210; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v08211; GFX11-SDAG-NEXT: s_clause 0x18212; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x308213; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x248214; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 08215; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v08216; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)8217; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)8218; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]8219; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8220; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]8221; GFX11-SDAG-NEXT: s_endpgm8222;8223; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_f64:8224; GFX11-GISEL: ; %bb.0:8225; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v08226; GFX11-GISEL-NEXT: s_clause 0x18227; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x308228; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x248229; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 08230; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v08231; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)8232; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)8233; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8234; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]8235; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]8236; GFX11-GISEL-NEXT: s_endpgm8237;8238; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_f64:8239; GFX12-SDAG: ; %bb.0:8240; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v08241; GFX12-SDAG-NEXT: s_clause 0x18242; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x308243; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x248244; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 08245; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v08246; GFX12-SDAG-NEXT: s_wait_kmcnt 0x08247; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)8248; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]8249; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8250; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]8251; GFX12-SDAG-NEXT: s_endpgm8252;8253; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_f64:8254; GFX12-GISEL: ; %bb.0:8255; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v08256; GFX12-GISEL-NEXT: s_clause 0x18257; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x308258; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x248259; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 08260; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v08261; GFX12-GISEL-NEXT: s_wait_kmcnt 0x08262; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)8263; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]8264; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]8265; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]8266; GFX12-GISEL-NEXT: s_endpgm8267 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8268 %tidx_f32 = bitcast i32 %tidx to float8269 %tidx_f64 = fpext float %tidx_f32 to double8270 %undef = freeze double poison8271 %v = call double @llvm.amdgcn.permlanex16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 true)8272 store double %v, ptr addrspace(1) %out8273 ret void8274}8275 8276define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {8277; GFX10-LABEL: v_permlanex16_b32_i_tid_fi_bc_i32:8278; GFX10: ; %bb.0:8279; GFX10-NEXT: s_clause 0x18280; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308281; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248282; GFX10-NEXT: v_mov_b32_e32 v1, 08283; GFX10-NEXT: s_waitcnt lgkmcnt(0)8284; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8285; GFX10-NEXT: global_store_dword v1, v0, s[2:3]8286; GFX10-NEXT: s_endpgm8287;8288; GFX11-LABEL: v_permlanex16_b32_i_tid_fi_bc_i32:8289; GFX11: ; %bb.0:8290; GFX11-NEXT: s_clause 0x18291; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x308292; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x248293; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v08294; GFX11-NEXT: s_waitcnt lgkmcnt(0)8295; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8296; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8297; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]8298; GFX11-NEXT: s_endpgm8299;8300; GFX12-LABEL: v_permlanex16_b32_i_tid_fi_bc_i32:8301; GFX12: ; %bb.0:8302; GFX12-NEXT: s_clause 0x18303; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x308304; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x248305; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v08306; GFX12-NEXT: s_wait_kmcnt 0x08307; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8308; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8309; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]8310; GFX12-NEXT: s_endpgm8311 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8312 %undef = freeze i32 poison8313 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 true, i1 true)8314 store i32 %v, ptr addrspace(1) %out8315 ret void8316}8317 8318define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_bc_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {8319; GFX10-LABEL: v_permlanex16_b32_i_tid_fi_bc_f32:8320; GFX10: ; %bb.0:8321; GFX10-NEXT: s_clause 0x18322; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308323; GFX10-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248324; GFX10-NEXT: v_mov_b32_e32 v1, 08325; GFX10-NEXT: s_waitcnt lgkmcnt(0)8326; GFX10-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8327; GFX10-NEXT: global_store_dword v1, v0, s[2:3]8328; GFX10-NEXT: s_endpgm8329;8330; GFX11-LABEL: v_permlanex16_b32_i_tid_fi_bc_f32:8331; GFX11: ; %bb.0:8332; GFX11-NEXT: s_clause 0x18333; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x308334; GFX11-NEXT: s_load_b64 s[2:3], s[4:5], 0x248335; GFX11-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v08336; GFX11-NEXT: s_waitcnt lgkmcnt(0)8337; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8338; GFX11-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8339; GFX11-NEXT: global_store_b32 v1, v0, s[2:3]8340; GFX11-NEXT: s_endpgm8341;8342; GFX12-LABEL: v_permlanex16_b32_i_tid_fi_bc_f32:8343; GFX12: ; %bb.0:8344; GFX12-NEXT: s_clause 0x18345; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x308346; GFX12-NEXT: s_load_b64 s[2:3], s[4:5], 0x248347; GFX12-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v08348; GFX12-NEXT: s_wait_kmcnt 0x08349; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8350; GFX12-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8351; GFX12-NEXT: global_store_b32 v1, v0, s[2:3]8352; GFX12-NEXT: s_endpgm8353 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8354 %tidx_f32 = bitcast i32 %tidx to float8355 %undef = freeze float poison8356 %v = call float @llvm.amdgcn.permlanex16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 true, i1 true)8357 store float %v, ptr addrspace(1) %out8358 ret void8359}8360 8361define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_bc_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {8362; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:8363; GFX10-SDAG: ; %bb.0:8364; GFX10-SDAG-NEXT: s_clause 0x18365; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308366; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248367; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 08368; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)8369; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]8370; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8371; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]8372; GFX10-SDAG-NEXT: s_endpgm8373;8374; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:8375; GFX10-GISEL: ; %bb.0:8376; GFX10-GISEL-NEXT: s_clause 0x18377; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308378; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248379; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 08380; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)8381; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8382; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]8383; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]8384; GFX10-GISEL-NEXT: s_endpgm8385;8386; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:8387; GFX11-SDAG: ; %bb.0:8388; GFX11-SDAG-NEXT: s_clause 0x18389; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x308390; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x248391; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 08392; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v08393; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)8394; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)8395; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]8396; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8397; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]8398; GFX11-SDAG-NEXT: s_endpgm8399;8400; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:8401; GFX11-GISEL: ; %bb.0:8402; GFX11-GISEL-NEXT: s_clause 0x18403; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x308404; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x248405; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v08406; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 08407; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)8408; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)8409; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8410; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]8411; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]8412; GFX11-GISEL-NEXT: s_endpgm8413;8414; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:8415; GFX12-SDAG: ; %bb.0:8416; GFX12-SDAG-NEXT: s_clause 0x18417; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x308418; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x248419; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 08420; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v08421; GFX12-SDAG-NEXT: s_wait_kmcnt 0x08422; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)8423; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]8424; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8425; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]8426; GFX12-SDAG-NEXT: s_endpgm8427;8428; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:8429; GFX12-GISEL: ; %bb.0:8430; GFX12-GISEL-NEXT: s_clause 0x18431; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x308432; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x248433; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v08434; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 08435; GFX12-GISEL-NEXT: s_wait_kmcnt 0x08436; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)8437; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8438; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]8439; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]8440; GFX12-GISEL-NEXT: s_endpgm8441 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8442 %tidx_i64 = zext i32 %tidx to i648443 %undef = freeze i64 poison8444 %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 true, i1 true)8445 store i64 %v, ptr addrspace(1) %out8446 ret void8447}8448 8449define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_bc_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {8450; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:8451; GFX10-SDAG: ; %bb.0:8452; GFX10-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v08453; GFX10-SDAG-NEXT: s_clause 0x18454; GFX10-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308455; GFX10-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248456; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 08457; GFX10-SDAG-NEXT: s_waitcnt lgkmcnt(0)8458; GFX10-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]8459; GFX10-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8460; GFX10-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]8461; GFX10-SDAG-NEXT: s_endpgm8462;8463; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:8464; GFX10-GISEL: ; %bb.0:8465; GFX10-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v08466; GFX10-GISEL-NEXT: s_clause 0x18467; GFX10-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x308468; GFX10-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x248469; GFX10-GISEL-NEXT: v_mov_b32_e32 v2, 08470; GFX10-GISEL-NEXT: s_waitcnt lgkmcnt(0)8471; GFX10-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8472; GFX10-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]8473; GFX10-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[2:3]8474; GFX10-GISEL-NEXT: s_endpgm8475;8476; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:8477; GFX11-SDAG: ; %bb.0:8478; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v08479; GFX11-SDAG-NEXT: s_clause 0x18480; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x308481; GFX11-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x248482; GFX11-SDAG-NEXT: v_mov_b32_e32 v2, 08483; GFX11-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v08484; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)8485; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)8486; GFX11-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]8487; GFX11-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8488; GFX11-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]8489; GFX11-SDAG-NEXT: s_endpgm8490;8491; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:8492; GFX11-GISEL: ; %bb.0:8493; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v08494; GFX11-GISEL-NEXT: s_clause 0x18495; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x308496; GFX11-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x248497; GFX11-GISEL-NEXT: v_mov_b32_e32 v2, 08498; GFX11-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v08499; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)8500; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)8501; GFX11-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8502; GFX11-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]8503; GFX11-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]8504; GFX11-GISEL-NEXT: s_endpgm8505;8506; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:8507; GFX12-SDAG: ; %bb.0:8508; GFX12-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v08509; GFX12-SDAG-NEXT: s_clause 0x18510; GFX12-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x308511; GFX12-SDAG-NEXT: s_load_b64 s[2:3], s[4:5], 0x248512; GFX12-SDAG-NEXT: v_mov_b32_e32 v2, 08513; GFX12-SDAG-NEXT: v_cvt_f64_f32_e32 v[0:1], v08514; GFX12-SDAG-NEXT: s_wait_kmcnt 0x08515; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)8516; GFX12-SDAG-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]8517; GFX12-SDAG-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8518; GFX12-SDAG-NEXT: global_store_b64 v2, v[0:1], s[2:3]8519; GFX12-SDAG-NEXT: s_endpgm8520;8521; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:8522; GFX12-GISEL: ; %bb.0:8523; GFX12-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v08524; GFX12-GISEL-NEXT: s_clause 0x18525; GFX12-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x308526; GFX12-GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x248527; GFX12-GISEL-NEXT: v_mov_b32_e32 v2, 08528; GFX12-GISEL-NEXT: v_cvt_f64_f32_e32 v[0:1], v08529; GFX12-GISEL-NEXT: s_wait_kmcnt 0x08530; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)8531; GFX12-GISEL-NEXT: v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]8532; GFX12-GISEL-NEXT: v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]8533; GFX12-GISEL-NEXT: global_store_b64 v2, v[0:1], s[2:3]8534; GFX12-GISEL-NEXT: s_endpgm8535 %tidx = call i32 @llvm.amdgcn.workitem.id.x()8536 %tidx_f32 = bitcast i32 %tidx to float8537 %tidx_f64 = fpext float %tidx_f32 to double8538 %undef = freeze double poison8539 %v = call double @llvm.amdgcn.permlanex16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 true, i1 true)8540 store double %v, ptr addrspace(1) %out8541 ret void8542}8543 8544define void @v_permlane16_half(ptr addrspace(1) %out, half %src0, i32 %src1, i32 %src2) {8545; GFX10-LABEL: v_permlane16_half:8546; GFX10: ; %bb.0:8547; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8548; GFX10-NEXT: v_readfirstlane_b32 s4, v38549; GFX10-NEXT: v_readfirstlane_b32 s5, v48550; GFX10-NEXT: v_permlane16_b32 v2, v2, s4, s58551; GFX10-NEXT: global_store_short v[0:1], v2, off8552; GFX10-NEXT: s_setpc_b64 s[30:31]8553;8554; GFX11-LABEL: v_permlane16_half:8555; GFX11: ; %bb.0:8556; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8557; GFX11-NEXT: v_readfirstlane_b32 s0, v38558; GFX11-NEXT: v_readfirstlane_b32 s1, v48559; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8560; GFX11-NEXT: v_permlane16_b32 v2, v2, s0, s18561; GFX11-NEXT: global_store_b16 v[0:1], v2, off8562; GFX11-NEXT: s_setpc_b64 s[30:31]8563;8564; GFX12-LABEL: v_permlane16_half:8565; GFX12: ; %bb.0:8566; GFX12-NEXT: s_wait_loadcnt_dscnt 0x08567; GFX12-NEXT: s_wait_expcnt 0x08568; GFX12-NEXT: s_wait_samplecnt 0x08569; GFX12-NEXT: s_wait_bvhcnt 0x08570; GFX12-NEXT: s_wait_kmcnt 0x08571; GFX12-NEXT: v_readfirstlane_b32 s0, v38572; GFX12-NEXT: v_readfirstlane_b32 s1, v48573; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)8574; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8575; GFX12-NEXT: v_permlane16_b32 v2, v2, s0, s18576; GFX12-NEXT: global_store_b16 v[0:1], v2, off8577; GFX12-NEXT: s_setpc_b64 s[30:31]8578 %v = call half @llvm.amdgcn.permlane16.f16(half %src0, half %src0, i32 %src1, i32 %src2, i1 false, i1 false)8579 store half %v, ptr addrspace(1) %out8580 ret void8581}8582 8583define void @v_permlanex16_half(ptr addrspace(1) %out, half %src0, i32 %src1, i32 %src2) {8584; GFX10-LABEL: v_permlanex16_half:8585; GFX10: ; %bb.0:8586; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8587; GFX10-NEXT: v_readfirstlane_b32 s4, v38588; GFX10-NEXT: v_readfirstlane_b32 s5, v48589; GFX10-NEXT: v_permlanex16_b32 v2, v2, s4, s58590; GFX10-NEXT: global_store_short v[0:1], v2, off8591; GFX10-NEXT: s_setpc_b64 s[30:31]8592;8593; GFX11-LABEL: v_permlanex16_half:8594; GFX11: ; %bb.0:8595; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8596; GFX11-NEXT: v_readfirstlane_b32 s0, v38597; GFX11-NEXT: v_readfirstlane_b32 s1, v48598; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8599; GFX11-NEXT: v_permlanex16_b32 v2, v2, s0, s18600; GFX11-NEXT: global_store_b16 v[0:1], v2, off8601; GFX11-NEXT: s_setpc_b64 s[30:31]8602;8603; GFX12-LABEL: v_permlanex16_half:8604; GFX12: ; %bb.0:8605; GFX12-NEXT: s_wait_loadcnt_dscnt 0x08606; GFX12-NEXT: s_wait_expcnt 0x08607; GFX12-NEXT: s_wait_samplecnt 0x08608; GFX12-NEXT: s_wait_bvhcnt 0x08609; GFX12-NEXT: s_wait_kmcnt 0x08610; GFX12-NEXT: v_readfirstlane_b32 s0, v38611; GFX12-NEXT: v_readfirstlane_b32 s1, v48612; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)8613; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8614; GFX12-NEXT: v_permlanex16_b32 v2, v2, s0, s18615; GFX12-NEXT: global_store_b16 v[0:1], v2, off8616; GFX12-NEXT: s_setpc_b64 s[30:31]8617 %v = call half @llvm.amdgcn.permlanex16.f16(half %src0, half %src0, i32 %src1, i32 %src2, i1 false, i1 false)8618 store half %v, ptr addrspace(1) %out8619 ret void8620}8621 8622define void @v_permlane16_bfloat(ptr addrspace(1) %out, bfloat %src0, i32 %src1, i32 %src2) {8623; GFX10-LABEL: v_permlane16_bfloat:8624; GFX10: ; %bb.0:8625; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8626; GFX10-NEXT: v_readfirstlane_b32 s4, v38627; GFX10-NEXT: v_readfirstlane_b32 s5, v48628; GFX10-NEXT: v_permlane16_b32 v2, v2, s4, s58629; GFX10-NEXT: global_store_short v[0:1], v2, off8630; GFX10-NEXT: s_setpc_b64 s[30:31]8631;8632; GFX11-LABEL: v_permlane16_bfloat:8633; GFX11: ; %bb.0:8634; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8635; GFX11-NEXT: v_readfirstlane_b32 s0, v38636; GFX11-NEXT: v_readfirstlane_b32 s1, v48637; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8638; GFX11-NEXT: v_permlane16_b32 v2, v2, s0, s18639; GFX11-NEXT: global_store_b16 v[0:1], v2, off8640; GFX11-NEXT: s_setpc_b64 s[30:31]8641;8642; GFX12-LABEL: v_permlane16_bfloat:8643; GFX12: ; %bb.0:8644; GFX12-NEXT: s_wait_loadcnt_dscnt 0x08645; GFX12-NEXT: s_wait_expcnt 0x08646; GFX12-NEXT: s_wait_samplecnt 0x08647; GFX12-NEXT: s_wait_bvhcnt 0x08648; GFX12-NEXT: s_wait_kmcnt 0x08649; GFX12-NEXT: v_readfirstlane_b32 s0, v38650; GFX12-NEXT: v_readfirstlane_b32 s1, v48651; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)8652; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8653; GFX12-NEXT: v_permlane16_b32 v2, v2, s0, s18654; GFX12-NEXT: global_store_b16 v[0:1], v2, off8655; GFX12-NEXT: s_setpc_b64 s[30:31]8656 %v = call bfloat @llvm.amdgcn.permlane16.f16(bfloat %src0, bfloat %src0, i32 %src1, i32 %src2, i1 false, i1 false)8657 store bfloat %v, ptr addrspace(1) %out8658 ret void8659}8660 8661define void @v_permlanex16_bfloat(ptr addrspace(1) %out, bfloat %src0, i32 %src1, i32 %src2) {8662; GFX10-LABEL: v_permlanex16_bfloat:8663; GFX10: ; %bb.0:8664; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8665; GFX10-NEXT: v_readfirstlane_b32 s4, v38666; GFX10-NEXT: v_readfirstlane_b32 s5, v48667; GFX10-NEXT: v_permlanex16_b32 v2, v2, s4, s58668; GFX10-NEXT: global_store_short v[0:1], v2, off8669; GFX10-NEXT: s_setpc_b64 s[30:31]8670;8671; GFX11-LABEL: v_permlanex16_bfloat:8672; GFX11: ; %bb.0:8673; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8674; GFX11-NEXT: v_readfirstlane_b32 s0, v38675; GFX11-NEXT: v_readfirstlane_b32 s1, v48676; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8677; GFX11-NEXT: v_permlanex16_b32 v2, v2, s0, s18678; GFX11-NEXT: global_store_b16 v[0:1], v2, off8679; GFX11-NEXT: s_setpc_b64 s[30:31]8680;8681; GFX12-LABEL: v_permlanex16_bfloat:8682; GFX12: ; %bb.0:8683; GFX12-NEXT: s_wait_loadcnt_dscnt 0x08684; GFX12-NEXT: s_wait_expcnt 0x08685; GFX12-NEXT: s_wait_samplecnt 0x08686; GFX12-NEXT: s_wait_bvhcnt 0x08687; GFX12-NEXT: s_wait_kmcnt 0x08688; GFX12-NEXT: v_readfirstlane_b32 s0, v38689; GFX12-NEXT: v_readfirstlane_b32 s1, v48690; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)8691; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8692; GFX12-NEXT: v_permlanex16_b32 v2, v2, s0, s18693; GFX12-NEXT: global_store_b16 v[0:1], v2, off8694; GFX12-NEXT: s_setpc_b64 s[30:31]8695 %v = call bfloat @llvm.amdgcn.permlanex16.f16(bfloat %src0, bfloat %src0, i32 %src1, i32 %src2, i1 false, i1 false)8696 store bfloat %v, ptr addrspace(1) %out8697 ret void8698}8699 8700define void @v_permlane16_i16(ptr addrspace(1) %out, i16 %src0, i32 %src1, i32 %src2) {8701; GFX10-LABEL: v_permlane16_i16:8702; GFX10: ; %bb.0:8703; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8704; GFX10-NEXT: v_readfirstlane_b32 s4, v38705; GFX10-NEXT: v_readfirstlane_b32 s5, v48706; GFX10-NEXT: v_permlane16_b32 v2, v2, s4, s58707; GFX10-NEXT: global_store_short v[0:1], v2, off8708; GFX10-NEXT: s_setpc_b64 s[30:31]8709;8710; GFX11-LABEL: v_permlane16_i16:8711; GFX11: ; %bb.0:8712; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8713; GFX11-NEXT: v_readfirstlane_b32 s0, v38714; GFX11-NEXT: v_readfirstlane_b32 s1, v48715; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8716; GFX11-NEXT: v_permlane16_b32 v2, v2, s0, s18717; GFX11-NEXT: global_store_b16 v[0:1], v2, off8718; GFX11-NEXT: s_setpc_b64 s[30:31]8719;8720; GFX12-LABEL: v_permlane16_i16:8721; GFX12: ; %bb.0:8722; GFX12-NEXT: s_wait_loadcnt_dscnt 0x08723; GFX12-NEXT: s_wait_expcnt 0x08724; GFX12-NEXT: s_wait_samplecnt 0x08725; GFX12-NEXT: s_wait_bvhcnt 0x08726; GFX12-NEXT: s_wait_kmcnt 0x08727; GFX12-NEXT: v_readfirstlane_b32 s0, v38728; GFX12-NEXT: v_readfirstlane_b32 s1, v48729; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)8730; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8731; GFX12-NEXT: v_permlane16_b32 v2, v2, s0, s18732; GFX12-NEXT: global_store_b16 v[0:1], v2, off8733; GFX12-NEXT: s_setpc_b64 s[30:31]8734 %v = call i16 @llvm.amdgcn.permlane16.i16(i16 %src0, i16 %src0, i32 %src1, i32 %src2, i1 false, i1 false)8735 store i16 %v, ptr addrspace(1) %out8736 ret void8737}8738 8739define void @v_permlanex16_i16(ptr addrspace(1) %out, i16 %src0, i32 %src1, i32 %src2) {8740; GFX10-LABEL: v_permlanex16_i16:8741; GFX10: ; %bb.0:8742; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8743; GFX10-NEXT: v_readfirstlane_b32 s4, v38744; GFX10-NEXT: v_readfirstlane_b32 s5, v48745; GFX10-NEXT: v_permlanex16_b32 v2, v2, s4, s58746; GFX10-NEXT: global_store_short v[0:1], v2, off8747; GFX10-NEXT: s_setpc_b64 s[30:31]8748;8749; GFX11-LABEL: v_permlanex16_i16:8750; GFX11: ; %bb.0:8751; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8752; GFX11-NEXT: v_readfirstlane_b32 s0, v38753; GFX11-NEXT: v_readfirstlane_b32 s1, v48754; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8755; GFX11-NEXT: v_permlanex16_b32 v2, v2, s0, s18756; GFX11-NEXT: global_store_b16 v[0:1], v2, off8757; GFX11-NEXT: s_setpc_b64 s[30:31]8758;8759; GFX12-LABEL: v_permlanex16_i16:8760; GFX12: ; %bb.0:8761; GFX12-NEXT: s_wait_loadcnt_dscnt 0x08762; GFX12-NEXT: s_wait_expcnt 0x08763; GFX12-NEXT: s_wait_samplecnt 0x08764; GFX12-NEXT: s_wait_bvhcnt 0x08765; GFX12-NEXT: s_wait_kmcnt 0x08766; GFX12-NEXT: v_readfirstlane_b32 s0, v38767; GFX12-NEXT: v_readfirstlane_b32 s1, v48768; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)8769; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8770; GFX12-NEXT: v_permlanex16_b32 v2, v2, s0, s18771; GFX12-NEXT: global_store_b16 v[0:1], v2, off8772; GFX12-NEXT: s_setpc_b64 s[30:31]8773 %v = call i16 @llvm.amdgcn.permlanex16.i16(i16 %src0, i16 %src0, i32 %src1, i32 %src2, i1 false, i1 false)8774 store i16 %v, ptr addrspace(1) %out8775 ret void8776}8777 8778define void @v_permlane16_v2f16(ptr addrspace(1) %out, <2 x half> %src0, i32 %src1, i32 %src2) {8779; GFX10-LABEL: v_permlane16_v2f16:8780; GFX10: ; %bb.0:8781; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8782; GFX10-NEXT: v_readfirstlane_b32 s4, v38783; GFX10-NEXT: v_readfirstlane_b32 s5, v48784; GFX10-NEXT: v_permlane16_b32 v2, v2, s4, s58785; GFX10-NEXT: global_store_dword v[0:1], v2, off8786; GFX10-NEXT: s_setpc_b64 s[30:31]8787;8788; GFX11-LABEL: v_permlane16_v2f16:8789; GFX11: ; %bb.0:8790; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8791; GFX11-NEXT: v_readfirstlane_b32 s0, v38792; GFX11-NEXT: v_readfirstlane_b32 s1, v48793; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8794; GFX11-NEXT: v_permlane16_b32 v2, v2, s0, s18795; GFX11-NEXT: global_store_b32 v[0:1], v2, off8796; GFX11-NEXT: s_setpc_b64 s[30:31]8797;8798; GFX12-LABEL: v_permlane16_v2f16:8799; GFX12: ; %bb.0:8800; GFX12-NEXT: s_wait_loadcnt_dscnt 0x08801; GFX12-NEXT: s_wait_expcnt 0x08802; GFX12-NEXT: s_wait_samplecnt 0x08803; GFX12-NEXT: s_wait_bvhcnt 0x08804; GFX12-NEXT: s_wait_kmcnt 0x08805; GFX12-NEXT: v_readfirstlane_b32 s0, v38806; GFX12-NEXT: v_readfirstlane_b32 s1, v48807; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)8808; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8809; GFX12-NEXT: v_permlane16_b32 v2, v2, s0, s18810; GFX12-NEXT: global_store_b32 v[0:1], v2, off8811; GFX12-NEXT: s_setpc_b64 s[30:31]8812 %v = call <2 x half> @llvm.amdgcn.permlane16.v2f16(<2 x half> %src0, <2 x half> %src0, i32 %src1, i32 %src2, i1 false, i1 false)8813 store <2 x half> %v, ptr addrspace(1) %out8814 ret void8815}8816 8817define void @v_permlanex16_v2f16(ptr addrspace(1) %out, <2 x half> %src0, i32 %src1, i32 %src2) {8818; GFX10-LABEL: v_permlanex16_v2f16:8819; GFX10: ; %bb.0:8820; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8821; GFX10-NEXT: v_readfirstlane_b32 s4, v38822; GFX10-NEXT: v_readfirstlane_b32 s5, v48823; GFX10-NEXT: v_permlanex16_b32 v2, v2, s4, s58824; GFX10-NEXT: global_store_dword v[0:1], v2, off8825; GFX10-NEXT: s_setpc_b64 s[30:31]8826;8827; GFX11-LABEL: v_permlanex16_v2f16:8828; GFX11: ; %bb.0:8829; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8830; GFX11-NEXT: v_readfirstlane_b32 s0, v38831; GFX11-NEXT: v_readfirstlane_b32 s1, v48832; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)8833; GFX11-NEXT: v_permlanex16_b32 v2, v2, s0, s18834; GFX11-NEXT: global_store_b32 v[0:1], v2, off8835; GFX11-NEXT: s_setpc_b64 s[30:31]8836;8837; GFX12-LABEL: v_permlanex16_v2f16:8838; GFX12: ; %bb.0:8839; GFX12-NEXT: s_wait_loadcnt_dscnt 0x08840; GFX12-NEXT: s_wait_expcnt 0x08841; GFX12-NEXT: s_wait_samplecnt 0x08842; GFX12-NEXT: s_wait_bvhcnt 0x08843; GFX12-NEXT: s_wait_kmcnt 0x08844; GFX12-NEXT: v_readfirstlane_b32 s0, v38845; GFX12-NEXT: v_readfirstlane_b32 s1, v48846; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)8847; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)8848; GFX12-NEXT: v_permlanex16_b32 v2, v2, s0, s18849; GFX12-NEXT: global_store_b32 v[0:1], v2, off8850; GFX12-NEXT: s_setpc_b64 s[30:31]8851 %v = call <2 x half> @llvm.amdgcn.permlanex16.v2f16(<2 x half> %src0, <2 x half> %src0, i32 %src1, i32 %src2, i1 false, i1 false)8852 store <2 x half> %v, ptr addrspace(1) %out8853 ret void8854}8855 8856define void @v_permlane16_v2f32(ptr addrspace(1) %out, <2 x float> %src0, i32 %src1, i32 %src2) {8857; GFX10-SDAG-LABEL: v_permlane16_v2f32:8858; GFX10-SDAG: ; %bb.0:8859; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8860; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v48861; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v58862; GFX10-SDAG-NEXT: v_permlane16_b32 v3, v3, s4, s58863; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v2, s4, s58864; GFX10-SDAG-NEXT: global_store_dwordx2 v[0:1], v[2:3], off8865; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]8866;8867; GFX10-GISEL-LABEL: v_permlane16_v2f32:8868; GFX10-GISEL: ; %bb.0:8869; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8870; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v48871; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v58872; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v2, s4, s58873; GFX10-GISEL-NEXT: v_permlane16_b32 v3, v3, s4, s58874; GFX10-GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off8875; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]8876;8877; GFX11-SDAG-LABEL: v_permlane16_v2f32:8878; GFX11-SDAG: ; %bb.0:8879; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8880; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v48881; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v58882; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)8883; GFX11-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s18884; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s18885; GFX11-SDAG-NEXT: global_store_b64 v[0:1], v[2:3], off8886; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]8887;8888; GFX11-GISEL-LABEL: v_permlane16_v2f32:8889; GFX11-GISEL: ; %bb.0:8890; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8891; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v48892; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v58893; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)8894; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s18895; GFX11-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s18896; GFX11-GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off8897; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]8898;8899; GFX12-SDAG-LABEL: v_permlane16_v2f32:8900; GFX12-SDAG: ; %bb.0:8901; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x08902; GFX12-SDAG-NEXT: s_wait_expcnt 0x08903; GFX12-SDAG-NEXT: s_wait_samplecnt 0x08904; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x08905; GFX12-SDAG-NEXT: s_wait_kmcnt 0x08906; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v48907; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v58908; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)8909; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)8910; GFX12-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s18911; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s18912; GFX12-SDAG-NEXT: global_store_b64 v[0:1], v[2:3], off8913; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]8914;8915; GFX12-GISEL-LABEL: v_permlane16_v2f32:8916; GFX12-GISEL: ; %bb.0:8917; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x08918; GFX12-GISEL-NEXT: s_wait_expcnt 0x08919; GFX12-GISEL-NEXT: s_wait_samplecnt 0x08920; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x08921; GFX12-GISEL-NEXT: s_wait_kmcnt 0x08922; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v48923; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v58924; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)8925; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)8926; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s18927; GFX12-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s18928; GFX12-GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off8929; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]8930 %v = call <2 x float> @llvm.amdgcn.permlane16.v2f32(<2 x float> %src0, <2 x float> %src0, i32 %src1, i32 %src2, i1 false, i1 false)8931 store <2 x float> %v, ptr addrspace(1) %out8932 ret void8933}8934 8935define void @v_permlanex16_v2f32(ptr addrspace(1) %out, <2 x float> %src0, i32 %src1, i32 %src2) {8936; GFX10-SDAG-LABEL: v_permlanex16_v2f32:8937; GFX10-SDAG: ; %bb.0:8938; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8939; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v48940; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v58941; GFX10-SDAG-NEXT: v_permlanex16_b32 v3, v3, s4, s58942; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v2, s4, s58943; GFX10-SDAG-NEXT: global_store_dwordx2 v[0:1], v[2:3], off8944; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]8945;8946; GFX10-GISEL-LABEL: v_permlanex16_v2f32:8947; GFX10-GISEL: ; %bb.0:8948; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8949; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v48950; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v58951; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v2, s4, s58952; GFX10-GISEL-NEXT: v_permlanex16_b32 v3, v3, s4, s58953; GFX10-GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off8954; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]8955;8956; GFX11-SDAG-LABEL: v_permlanex16_v2f32:8957; GFX11-SDAG: ; %bb.0:8958; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8959; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v48960; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v58961; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)8962; GFX11-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s18963; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s18964; GFX11-SDAG-NEXT: global_store_b64 v[0:1], v[2:3], off8965; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]8966;8967; GFX11-GISEL-LABEL: v_permlanex16_v2f32:8968; GFX11-GISEL: ; %bb.0:8969; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8970; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v48971; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v58972; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)8973; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s18974; GFX11-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s18975; GFX11-GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off8976; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]8977;8978; GFX12-SDAG-LABEL: v_permlanex16_v2f32:8979; GFX12-SDAG: ; %bb.0:8980; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x08981; GFX12-SDAG-NEXT: s_wait_expcnt 0x08982; GFX12-SDAG-NEXT: s_wait_samplecnt 0x08983; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x08984; GFX12-SDAG-NEXT: s_wait_kmcnt 0x08985; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v48986; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v58987; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)8988; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)8989; GFX12-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s18990; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s18991; GFX12-SDAG-NEXT: global_store_b64 v[0:1], v[2:3], off8992; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]8993;8994; GFX12-GISEL-LABEL: v_permlanex16_v2f32:8995; GFX12-GISEL: ; %bb.0:8996; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x08997; GFX12-GISEL-NEXT: s_wait_expcnt 0x08998; GFX12-GISEL-NEXT: s_wait_samplecnt 0x08999; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09000; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09001; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v49002; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v59003; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9004; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9005; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s19006; GFX12-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s19007; GFX12-GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off9008; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9009 %v = call <2 x float> @llvm.amdgcn.permlanex16.v2f32(<2 x float> %src0, <2 x float> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9010 store <2 x float> %v, ptr addrspace(1) %out9011 ret void9012}9013 9014define void @v_permlane16_v7i32(ptr addrspace(1) %out, <7 x i32> %src0, i32 %src1, i32 %src2) {9015; GFX10-SDAG-LABEL: v_permlane16_v7i32:9016; GFX10-SDAG: ; %bb.0:9017; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9018; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v99019; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v109020; GFX10-SDAG-NEXT: v_permlane16_b32 v8, v8, s4, s59021; GFX10-SDAG-NEXT: v_permlane16_b32 v7, v7, s4, s59022; GFX10-SDAG-NEXT: v_permlane16_b32 v6, v6, s4, s59023; GFX10-SDAG-NEXT: v_permlane16_b32 v5, v5, s4, s59024; GFX10-SDAG-NEXT: v_permlane16_b32 v4, v4, s4, s59025; GFX10-SDAG-NEXT: v_permlane16_b32 v3, v3, s4, s59026; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v2, s4, s59027; GFX10-SDAG-NEXT: global_store_dwordx3 v[0:1], v[6:8], off offset:169028; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9029; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9030;9031; GFX10-GISEL-LABEL: v_permlane16_v7i32:9032; GFX10-GISEL: ; %bb.0:9033; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9034; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v99035; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v109036; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v2, s4, s59037; GFX10-GISEL-NEXT: v_permlane16_b32 v3, v3, s4, s59038; GFX10-GISEL-NEXT: v_permlane16_b32 v4, v4, s4, s59039; GFX10-GISEL-NEXT: v_permlane16_b32 v5, v5, s4, s59040; GFX10-GISEL-NEXT: v_permlane16_b32 v6, v6, s4, s59041; GFX10-GISEL-NEXT: v_permlane16_b32 v7, v7, s4, s59042; GFX10-GISEL-NEXT: v_permlane16_b32 v8, v8, s4, s59043; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9044; GFX10-GISEL-NEXT: global_store_dwordx3 v[0:1], v[6:8], off offset:169045; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9046;9047; GFX11-SDAG-LABEL: v_permlane16_v7i32:9048; GFX11-SDAG: ; %bb.0:9049; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9050; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v99051; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v109052; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9053; GFX11-SDAG-NEXT: v_permlane16_b32 v8, v8, s0, s19054; GFX11-SDAG-NEXT: v_permlane16_b32 v7, v7, s0, s19055; GFX11-SDAG-NEXT: v_permlane16_b32 v6, v6, s0, s19056; GFX11-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19057; GFX11-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19058; GFX11-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19059; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19060; GFX11-SDAG-NEXT: s_clause 0x19061; GFX11-SDAG-NEXT: global_store_b96 v[0:1], v[6:8], off offset:169062; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9063; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9064;9065; GFX11-GISEL-LABEL: v_permlane16_v7i32:9066; GFX11-GISEL: ; %bb.0:9067; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9068; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v99069; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v109070; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9071; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19072; GFX11-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19073; GFX11-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19074; GFX11-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19075; GFX11-GISEL-NEXT: v_permlane16_b32 v6, v6, s0, s19076; GFX11-GISEL-NEXT: v_permlane16_b32 v7, v7, s0, s19077; GFX11-GISEL-NEXT: v_permlane16_b32 v8, v8, s0, s19078; GFX11-GISEL-NEXT: s_clause 0x19079; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9080; GFX11-GISEL-NEXT: global_store_b96 v[0:1], v[6:8], off offset:169081; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9082;9083; GFX12-SDAG-LABEL: v_permlane16_v7i32:9084; GFX12-SDAG: ; %bb.0:9085; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09086; GFX12-SDAG-NEXT: s_wait_expcnt 0x09087; GFX12-SDAG-NEXT: s_wait_samplecnt 0x09088; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x09089; GFX12-SDAG-NEXT: s_wait_kmcnt 0x09090; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v99091; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v109092; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)9093; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9094; GFX12-SDAG-NEXT: v_permlane16_b32 v8, v8, s0, s19095; GFX12-SDAG-NEXT: v_permlane16_b32 v7, v7, s0, s19096; GFX12-SDAG-NEXT: v_permlane16_b32 v6, v6, s0, s19097; GFX12-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19098; GFX12-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19099; GFX12-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19100; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19101; GFX12-SDAG-NEXT: s_clause 0x19102; GFX12-SDAG-NEXT: global_store_b96 v[0:1], v[6:8], off offset:169103; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9104; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]9105;9106; GFX12-GISEL-LABEL: v_permlane16_v7i32:9107; GFX12-GISEL: ; %bb.0:9108; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x09109; GFX12-GISEL-NEXT: s_wait_expcnt 0x09110; GFX12-GISEL-NEXT: s_wait_samplecnt 0x09111; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09112; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09113; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v99114; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v109115; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9116; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9117; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19118; GFX12-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19119; GFX12-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19120; GFX12-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19121; GFX12-GISEL-NEXT: v_permlane16_b32 v6, v6, s0, s19122; GFX12-GISEL-NEXT: v_permlane16_b32 v7, v7, s0, s19123; GFX12-GISEL-NEXT: v_permlane16_b32 v8, v8, s0, s19124; GFX12-GISEL-NEXT: s_clause 0x19125; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9126; GFX12-GISEL-NEXT: global_store_b96 v[0:1], v[6:8], off offset:169127; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9128 %v = call <7 x i32> @llvm.amdgcn.permlane16.v7i32(<7 x i32> %src0, <7 x i32> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9129 store <7 x i32> %v, ptr addrspace(1) %out9130 ret void9131}9132 9133define void @v_permlanex16_v7i32(ptr addrspace(1) %out, <7 x i32> %src0, i32 %src1, i32 %src2) {9134; GFX10-SDAG-LABEL: v_permlanex16_v7i32:9135; GFX10-SDAG: ; %bb.0:9136; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9137; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v99138; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v109139; GFX10-SDAG-NEXT: v_permlanex16_b32 v8, v8, s4, s59140; GFX10-SDAG-NEXT: v_permlanex16_b32 v7, v7, s4, s59141; GFX10-SDAG-NEXT: v_permlanex16_b32 v6, v6, s4, s59142; GFX10-SDAG-NEXT: v_permlanex16_b32 v5, v5, s4, s59143; GFX10-SDAG-NEXT: v_permlanex16_b32 v4, v4, s4, s59144; GFX10-SDAG-NEXT: v_permlanex16_b32 v3, v3, s4, s59145; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v2, s4, s59146; GFX10-SDAG-NEXT: global_store_dwordx3 v[0:1], v[6:8], off offset:169147; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9148; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9149;9150; GFX10-GISEL-LABEL: v_permlanex16_v7i32:9151; GFX10-GISEL: ; %bb.0:9152; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9153; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v99154; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v109155; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v2, s4, s59156; GFX10-GISEL-NEXT: v_permlanex16_b32 v3, v3, s4, s59157; GFX10-GISEL-NEXT: v_permlanex16_b32 v4, v4, s4, s59158; GFX10-GISEL-NEXT: v_permlanex16_b32 v5, v5, s4, s59159; GFX10-GISEL-NEXT: v_permlanex16_b32 v6, v6, s4, s59160; GFX10-GISEL-NEXT: v_permlanex16_b32 v7, v7, s4, s59161; GFX10-GISEL-NEXT: v_permlanex16_b32 v8, v8, s4, s59162; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9163; GFX10-GISEL-NEXT: global_store_dwordx3 v[0:1], v[6:8], off offset:169164; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9165;9166; GFX11-SDAG-LABEL: v_permlanex16_v7i32:9167; GFX11-SDAG: ; %bb.0:9168; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9169; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v99170; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v109171; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9172; GFX11-SDAG-NEXT: v_permlanex16_b32 v8, v8, s0, s19173; GFX11-SDAG-NEXT: v_permlanex16_b32 v7, v7, s0, s19174; GFX11-SDAG-NEXT: v_permlanex16_b32 v6, v6, s0, s19175; GFX11-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s19176; GFX11-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s19177; GFX11-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s19178; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s19179; GFX11-SDAG-NEXT: s_clause 0x19180; GFX11-SDAG-NEXT: global_store_b96 v[0:1], v[6:8], off offset:169181; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9182; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9183;9184; GFX11-GISEL-LABEL: v_permlanex16_v7i32:9185; GFX11-GISEL: ; %bb.0:9186; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9187; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v99188; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v109189; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9190; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s19191; GFX11-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s19192; GFX11-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s19193; GFX11-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s19194; GFX11-GISEL-NEXT: v_permlanex16_b32 v6, v6, s0, s19195; GFX11-GISEL-NEXT: v_permlanex16_b32 v7, v7, s0, s19196; GFX11-GISEL-NEXT: v_permlanex16_b32 v8, v8, s0, s19197; GFX11-GISEL-NEXT: s_clause 0x19198; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9199; GFX11-GISEL-NEXT: global_store_b96 v[0:1], v[6:8], off offset:169200; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9201;9202; GFX12-SDAG-LABEL: v_permlanex16_v7i32:9203; GFX12-SDAG: ; %bb.0:9204; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09205; GFX12-SDAG-NEXT: s_wait_expcnt 0x09206; GFX12-SDAG-NEXT: s_wait_samplecnt 0x09207; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x09208; GFX12-SDAG-NEXT: s_wait_kmcnt 0x09209; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v99210; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v109211; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)9212; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9213; GFX12-SDAG-NEXT: v_permlanex16_b32 v8, v8, s0, s19214; GFX12-SDAG-NEXT: v_permlanex16_b32 v7, v7, s0, s19215; GFX12-SDAG-NEXT: v_permlanex16_b32 v6, v6, s0, s19216; GFX12-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s19217; GFX12-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s19218; GFX12-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s19219; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s19220; GFX12-SDAG-NEXT: s_clause 0x19221; GFX12-SDAG-NEXT: global_store_b96 v[0:1], v[6:8], off offset:169222; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9223; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]9224;9225; GFX12-GISEL-LABEL: v_permlanex16_v7i32:9226; GFX12-GISEL: ; %bb.0:9227; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x09228; GFX12-GISEL-NEXT: s_wait_expcnt 0x09229; GFX12-GISEL-NEXT: s_wait_samplecnt 0x09230; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09231; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09232; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v99233; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v109234; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9235; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9236; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s19237; GFX12-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s19238; GFX12-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s19239; GFX12-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s19240; GFX12-GISEL-NEXT: v_permlanex16_b32 v6, v6, s0, s19241; GFX12-GISEL-NEXT: v_permlanex16_b32 v7, v7, s0, s19242; GFX12-GISEL-NEXT: v_permlanex16_b32 v8, v8, s0, s19243; GFX12-GISEL-NEXT: s_clause 0x19244; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9245; GFX12-GISEL-NEXT: global_store_b96 v[0:1], v[6:8], off offset:169246; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9247 %v = call <7 x i32> @llvm.amdgcn.permlanex16.v7i32(<7 x i32> %src0, <7 x i32> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9248 store <7 x i32> %v, ptr addrspace(1) %out9249 ret void9250}9251 9252define void @v_permlane16_v8i16(ptr addrspace(1) %out, <8 x i16> %src0, i32 %src1, i32 %src2) {9253; GFX10-SDAG-LABEL: v_permlane16_v8i16:9254; GFX10-SDAG: ; %bb.0:9255; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9256; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v69257; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v79258; GFX10-SDAG-NEXT: v_permlane16_b32 v5, v5, s4, s59259; GFX10-SDAG-NEXT: v_permlane16_b32 v4, v4, s4, s59260; GFX10-SDAG-NEXT: v_permlane16_b32 v3, v3, s4, s59261; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v2, s4, s59262; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9263; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9264;9265; GFX10-GISEL-LABEL: v_permlane16_v8i16:9266; GFX10-GISEL: ; %bb.0:9267; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9268; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v69269; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v79270; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v2, s4, s59271; GFX10-GISEL-NEXT: v_permlane16_b32 v3, v3, s4, s59272; GFX10-GISEL-NEXT: v_permlane16_b32 v4, v4, s4, s59273; GFX10-GISEL-NEXT: v_permlane16_b32 v5, v5, s4, s59274; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9275; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9276;9277; GFX11-SDAG-LABEL: v_permlane16_v8i16:9278; GFX11-SDAG: ; %bb.0:9279; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9280; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v69281; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v79282; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9283; GFX11-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19284; GFX11-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19285; GFX11-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19286; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19287; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9288; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9289;9290; GFX11-GISEL-LABEL: v_permlane16_v8i16:9291; GFX11-GISEL: ; %bb.0:9292; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9293; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v69294; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v79295; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9296; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19297; GFX11-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19298; GFX11-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19299; GFX11-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19300; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9301; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9302;9303; GFX12-SDAG-LABEL: v_permlane16_v8i16:9304; GFX12-SDAG: ; %bb.0:9305; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09306; GFX12-SDAG-NEXT: s_wait_expcnt 0x09307; GFX12-SDAG-NEXT: s_wait_samplecnt 0x09308; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x09309; GFX12-SDAG-NEXT: s_wait_kmcnt 0x09310; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v69311; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v79312; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)9313; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9314; GFX12-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19315; GFX12-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19316; GFX12-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19317; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19318; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9319; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]9320;9321; GFX12-GISEL-LABEL: v_permlane16_v8i16:9322; GFX12-GISEL: ; %bb.0:9323; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x09324; GFX12-GISEL-NEXT: s_wait_expcnt 0x09325; GFX12-GISEL-NEXT: s_wait_samplecnt 0x09326; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09327; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09328; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v69329; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v79330; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9331; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9332; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19333; GFX12-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19334; GFX12-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19335; GFX12-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19336; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9337; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9338 %v = call <8 x i16> @llvm.amdgcn.permlane16.v8i16(<8 x i16> %src0, <8 x i16> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9339 store <8 x i16> %v, ptr addrspace(1) %out9340 ret void9341}9342 9343define void @v_permlanex16_v8i16(ptr addrspace(1) %out, <8 x i16> %src0, i32 %src1, i32 %src2) {9344; GFX10-SDAG-LABEL: v_permlanex16_v8i16:9345; GFX10-SDAG: ; %bb.0:9346; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9347; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v69348; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v79349; GFX10-SDAG-NEXT: v_permlanex16_b32 v5, v5, s4, s59350; GFX10-SDAG-NEXT: v_permlanex16_b32 v4, v4, s4, s59351; GFX10-SDAG-NEXT: v_permlanex16_b32 v3, v3, s4, s59352; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v2, s4, s59353; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9354; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9355;9356; GFX10-GISEL-LABEL: v_permlanex16_v8i16:9357; GFX10-GISEL: ; %bb.0:9358; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9359; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v69360; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v79361; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v2, s4, s59362; GFX10-GISEL-NEXT: v_permlanex16_b32 v3, v3, s4, s59363; GFX10-GISEL-NEXT: v_permlanex16_b32 v4, v4, s4, s59364; GFX10-GISEL-NEXT: v_permlanex16_b32 v5, v5, s4, s59365; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9366; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9367;9368; GFX11-SDAG-LABEL: v_permlanex16_v8i16:9369; GFX11-SDAG: ; %bb.0:9370; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9371; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v69372; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v79373; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9374; GFX11-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s19375; GFX11-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s19376; GFX11-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s19377; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s19378; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9379; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9380;9381; GFX11-GISEL-LABEL: v_permlanex16_v8i16:9382; GFX11-GISEL: ; %bb.0:9383; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9384; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v69385; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v79386; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9387; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s19388; GFX11-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s19389; GFX11-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s19390; GFX11-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s19391; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9392; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9393;9394; GFX12-SDAG-LABEL: v_permlanex16_v8i16:9395; GFX12-SDAG: ; %bb.0:9396; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09397; GFX12-SDAG-NEXT: s_wait_expcnt 0x09398; GFX12-SDAG-NEXT: s_wait_samplecnt 0x09399; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x09400; GFX12-SDAG-NEXT: s_wait_kmcnt 0x09401; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v69402; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v79403; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)9404; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9405; GFX12-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s19406; GFX12-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s19407; GFX12-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s19408; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s19409; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9410; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]9411;9412; GFX12-GISEL-LABEL: v_permlanex16_v8i16:9413; GFX12-GISEL: ; %bb.0:9414; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x09415; GFX12-GISEL-NEXT: s_wait_expcnt 0x09416; GFX12-GISEL-NEXT: s_wait_samplecnt 0x09417; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09418; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09419; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v69420; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v79421; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9422; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9423; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s19424; GFX12-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s19425; GFX12-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s19426; GFX12-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s19427; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9428; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9429 %v = call <8 x i16> @llvm.amdgcn.permlanex16.v8i16(<8 x i16> %src0, <8 x i16> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9430 store <8 x i16> %v, ptr addrspace(1) %out9431 ret void9432}9433 9434define void @v_permlane16_v2i64(ptr addrspace(1) %out, <2 x i64> %src0, i32 %src1, i32 %src2) {9435; GFX10-SDAG-LABEL: v_permlane16_v2i64:9436; GFX10-SDAG: ; %bb.0:9437; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9438; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v69439; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v79440; GFX10-SDAG-NEXT: v_permlane16_b32 v5, v5, s4, s59441; GFX10-SDAG-NEXT: v_permlane16_b32 v4, v4, s4, s59442; GFX10-SDAG-NEXT: v_permlane16_b32 v3, v3, s4, s59443; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v2, s4, s59444; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9445; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9446;9447; GFX10-GISEL-LABEL: v_permlane16_v2i64:9448; GFX10-GISEL: ; %bb.0:9449; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9450; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v69451; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v79452; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v2, s4, s59453; GFX10-GISEL-NEXT: v_permlane16_b32 v3, v3, s4, s59454; GFX10-GISEL-NEXT: v_permlane16_b32 v4, v4, s4, s59455; GFX10-GISEL-NEXT: v_permlane16_b32 v5, v5, s4, s59456; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9457; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9458;9459; GFX11-SDAG-LABEL: v_permlane16_v2i64:9460; GFX11-SDAG: ; %bb.0:9461; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9462; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v69463; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v79464; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9465; GFX11-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19466; GFX11-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19467; GFX11-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19468; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19469; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9470; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9471;9472; GFX11-GISEL-LABEL: v_permlane16_v2i64:9473; GFX11-GISEL: ; %bb.0:9474; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9475; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v69476; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v79477; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9478; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19479; GFX11-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19480; GFX11-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19481; GFX11-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19482; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9483; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9484;9485; GFX12-SDAG-LABEL: v_permlane16_v2i64:9486; GFX12-SDAG: ; %bb.0:9487; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09488; GFX12-SDAG-NEXT: s_wait_expcnt 0x09489; GFX12-SDAG-NEXT: s_wait_samplecnt 0x09490; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x09491; GFX12-SDAG-NEXT: s_wait_kmcnt 0x09492; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v69493; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v79494; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)9495; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9496; GFX12-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19497; GFX12-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19498; GFX12-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19499; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19500; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9501; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]9502;9503; GFX12-GISEL-LABEL: v_permlane16_v2i64:9504; GFX12-GISEL: ; %bb.0:9505; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x09506; GFX12-GISEL-NEXT: s_wait_expcnt 0x09507; GFX12-GISEL-NEXT: s_wait_samplecnt 0x09508; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09509; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09510; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v69511; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v79512; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9513; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9514; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19515; GFX12-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19516; GFX12-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19517; GFX12-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19518; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9519; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9520 %v = call <2 x i64> @llvm.amdgcn.permlane16.v2i64(<2 x i64> %src0, <2 x i64> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9521 store <2 x i64> %v, ptr addrspace(1) %out9522 ret void9523}9524 9525define void @v_permlane16_v3i64(ptr addrspace(1) %out, <3 x i64> %src0, i32 %src1, i32 %src2) {9526; GFX10-SDAG-LABEL: v_permlane16_v3i64:9527; GFX10-SDAG: ; %bb.0:9528; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9529; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v89530; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v99531; GFX10-SDAG-NEXT: v_permlane16_b32 v7, v7, s4, s59532; GFX10-SDAG-NEXT: v_permlane16_b32 v6, v6, s4, s59533; GFX10-SDAG-NEXT: v_permlane16_b32 v5, v5, s4, s59534; GFX10-SDAG-NEXT: v_permlane16_b32 v4, v4, s4, s59535; GFX10-SDAG-NEXT: v_permlane16_b32 v3, v3, s4, s59536; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v2, s4, s59537; GFX10-SDAG-NEXT: global_store_dwordx2 v[0:1], v[6:7], off offset:169538; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9539; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9540;9541; GFX10-GISEL-LABEL: v_permlane16_v3i64:9542; GFX10-GISEL: ; %bb.0:9543; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9544; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v89545; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v99546; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v2, s4, s59547; GFX10-GISEL-NEXT: v_permlane16_b32 v3, v3, s4, s59548; GFX10-GISEL-NEXT: v_permlane16_b32 v4, v4, s4, s59549; GFX10-GISEL-NEXT: v_permlane16_b32 v5, v5, s4, s59550; GFX10-GISEL-NEXT: v_permlane16_b32 v6, v6, s4, s59551; GFX10-GISEL-NEXT: v_permlane16_b32 v7, v7, s4, s59552; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9553; GFX10-GISEL-NEXT: global_store_dwordx2 v[0:1], v[6:7], off offset:169554; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9555;9556; GFX11-SDAG-LABEL: v_permlane16_v3i64:9557; GFX11-SDAG: ; %bb.0:9558; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9559; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v89560; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v99561; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9562; GFX11-SDAG-NEXT: v_permlane16_b32 v7, v7, s0, s19563; GFX11-SDAG-NEXT: v_permlane16_b32 v6, v6, s0, s19564; GFX11-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19565; GFX11-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19566; GFX11-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19567; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19568; GFX11-SDAG-NEXT: s_clause 0x19569; GFX11-SDAG-NEXT: global_store_b64 v[0:1], v[6:7], off offset:169570; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9571; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9572;9573; GFX11-GISEL-LABEL: v_permlane16_v3i64:9574; GFX11-GISEL: ; %bb.0:9575; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9576; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v89577; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v99578; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9579; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19580; GFX11-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19581; GFX11-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19582; GFX11-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19583; GFX11-GISEL-NEXT: v_permlane16_b32 v6, v6, s0, s19584; GFX11-GISEL-NEXT: v_permlane16_b32 v7, v7, s0, s19585; GFX11-GISEL-NEXT: s_clause 0x19586; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9587; GFX11-GISEL-NEXT: global_store_b64 v[0:1], v[6:7], off offset:169588; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9589;9590; GFX12-SDAG-LABEL: v_permlane16_v3i64:9591; GFX12-SDAG: ; %bb.0:9592; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09593; GFX12-SDAG-NEXT: s_wait_expcnt 0x09594; GFX12-SDAG-NEXT: s_wait_samplecnt 0x09595; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x09596; GFX12-SDAG-NEXT: s_wait_kmcnt 0x09597; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v89598; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v99599; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)9600; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9601; GFX12-SDAG-NEXT: v_permlane16_b32 v7, v7, s0, s19602; GFX12-SDAG-NEXT: v_permlane16_b32 v6, v6, s0, s19603; GFX12-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19604; GFX12-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19605; GFX12-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19606; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19607; GFX12-SDAG-NEXT: s_clause 0x19608; GFX12-SDAG-NEXT: global_store_b64 v[0:1], v[6:7], off offset:169609; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9610; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]9611;9612; GFX12-GISEL-LABEL: v_permlane16_v3i64:9613; GFX12-GISEL: ; %bb.0:9614; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x09615; GFX12-GISEL-NEXT: s_wait_expcnt 0x09616; GFX12-GISEL-NEXT: s_wait_samplecnt 0x09617; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09618; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09619; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v89620; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v99621; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9622; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9623; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19624; GFX12-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19625; GFX12-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19626; GFX12-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19627; GFX12-GISEL-NEXT: v_permlane16_b32 v6, v6, s0, s19628; GFX12-GISEL-NEXT: v_permlane16_b32 v7, v7, s0, s19629; GFX12-GISEL-NEXT: s_clause 0x19630; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9631; GFX12-GISEL-NEXT: global_store_b64 v[0:1], v[6:7], off offset:169632; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9633 %v = call <3 x i64> @llvm.amdgcn.permlane16.v3i64(<3 x i64> %src0, <3 x i64> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9634 store <3 x i64> %v, ptr addrspace(1) %out9635 ret void9636}9637 9638define void @v_permlane16_v4f64(ptr addrspace(1) %out, <4 x double> %src0, i32 %src1, i32 %src2) {9639; GFX10-SDAG-LABEL: v_permlane16_v4f64:9640; GFX10-SDAG: ; %bb.0:9641; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9642; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v109643; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v119644; GFX10-SDAG-NEXT: v_permlane16_b32 v9, v9, s4, s59645; GFX10-SDAG-NEXT: v_permlane16_b32 v8, v8, s4, s59646; GFX10-SDAG-NEXT: v_permlane16_b32 v7, v7, s4, s59647; GFX10-SDAG-NEXT: v_permlane16_b32 v6, v6, s4, s59648; GFX10-SDAG-NEXT: v_permlane16_b32 v5, v5, s4, s59649; GFX10-SDAG-NEXT: v_permlane16_b32 v4, v4, s4, s59650; GFX10-SDAG-NEXT: v_permlane16_b32 v3, v3, s4, s59651; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v2, s4, s59652; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:169653; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9654; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9655;9656; GFX10-GISEL-LABEL: v_permlane16_v4f64:9657; GFX10-GISEL: ; %bb.0:9658; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9659; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v109660; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v119661; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v2, s4, s59662; GFX10-GISEL-NEXT: v_permlane16_b32 v3, v3, s4, s59663; GFX10-GISEL-NEXT: v_permlane16_b32 v4, v4, s4, s59664; GFX10-GISEL-NEXT: v_permlane16_b32 v5, v5, s4, s59665; GFX10-GISEL-NEXT: v_permlane16_b32 v6, v6, s4, s59666; GFX10-GISEL-NEXT: v_permlane16_b32 v7, v7, s4, s59667; GFX10-GISEL-NEXT: v_permlane16_b32 v8, v8, s4, s59668; GFX10-GISEL-NEXT: v_permlane16_b32 v9, v9, s4, s59669; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9670; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:169671; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9672;9673; GFX11-SDAG-LABEL: v_permlane16_v4f64:9674; GFX11-SDAG: ; %bb.0:9675; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9676; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v109677; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v119678; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9679; GFX11-SDAG-NEXT: v_permlane16_b32 v9, v9, s0, s19680; GFX11-SDAG-NEXT: v_permlane16_b32 v8, v8, s0, s19681; GFX11-SDAG-NEXT: v_permlane16_b32 v7, v7, s0, s19682; GFX11-SDAG-NEXT: v_permlane16_b32 v6, v6, s0, s19683; GFX11-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19684; GFX11-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19685; GFX11-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19686; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19687; GFX11-SDAG-NEXT: s_clause 0x19688; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[6:9], off offset:169689; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9690; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9691;9692; GFX11-GISEL-LABEL: v_permlane16_v4f64:9693; GFX11-GISEL: ; %bb.0:9694; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9695; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v109696; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v119697; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9698; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19699; GFX11-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19700; GFX11-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19701; GFX11-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19702; GFX11-GISEL-NEXT: v_permlane16_b32 v6, v6, s0, s19703; GFX11-GISEL-NEXT: v_permlane16_b32 v7, v7, s0, s19704; GFX11-GISEL-NEXT: v_permlane16_b32 v8, v8, s0, s19705; GFX11-GISEL-NEXT: v_permlane16_b32 v9, v9, s0, s19706; GFX11-GISEL-NEXT: s_clause 0x19707; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9708; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[6:9], off offset:169709; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9710;9711; GFX12-SDAG-LABEL: v_permlane16_v4f64:9712; GFX12-SDAG: ; %bb.0:9713; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09714; GFX12-SDAG-NEXT: s_wait_expcnt 0x09715; GFX12-SDAG-NEXT: s_wait_samplecnt 0x09716; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x09717; GFX12-SDAG-NEXT: s_wait_kmcnt 0x09718; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v109719; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v119720; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)9721; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9722; GFX12-SDAG-NEXT: v_permlane16_b32 v9, v9, s0, s19723; GFX12-SDAG-NEXT: v_permlane16_b32 v8, v8, s0, s19724; GFX12-SDAG-NEXT: v_permlane16_b32 v7, v7, s0, s19725; GFX12-SDAG-NEXT: v_permlane16_b32 v6, v6, s0, s19726; GFX12-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19727; GFX12-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19728; GFX12-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19729; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19730; GFX12-SDAG-NEXT: s_clause 0x19731; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[6:9], off offset:169732; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9733; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]9734;9735; GFX12-GISEL-LABEL: v_permlane16_v4f64:9736; GFX12-GISEL: ; %bb.0:9737; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x09738; GFX12-GISEL-NEXT: s_wait_expcnt 0x09739; GFX12-GISEL-NEXT: s_wait_samplecnt 0x09740; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09741; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09742; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v109743; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v119744; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9745; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9746; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19747; GFX12-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19748; GFX12-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19749; GFX12-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19750; GFX12-GISEL-NEXT: v_permlane16_b32 v6, v6, s0, s19751; GFX12-GISEL-NEXT: v_permlane16_b32 v7, v7, s0, s19752; GFX12-GISEL-NEXT: v_permlane16_b32 v8, v8, s0, s19753; GFX12-GISEL-NEXT: v_permlane16_b32 v9, v9, s0, s19754; GFX12-GISEL-NEXT: s_clause 0x19755; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9756; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[6:9], off offset:169757; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9758 %v = call <4 x double> @llvm.amdgcn.permlane16.v4f64(<4 x double> %src0, <4 x double> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9759 store <4 x double> %v, ptr addrspace(1) %out9760 ret void9761}9762 9763define void @v_permlane16_v8f64(ptr addrspace(1) %out, <8 x double> %src0, i32 %src1, i32 %src2) {9764; GFX10-SDAG-LABEL: v_permlane16_v8f64:9765; GFX10-SDAG: ; %bb.0:9766; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9767; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v189768; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v199769; GFX10-SDAG-NEXT: v_permlane16_b32 v17, v17, s4, s59770; GFX10-SDAG-NEXT: v_permlane16_b32 v16, v16, s4, s59771; GFX10-SDAG-NEXT: v_permlane16_b32 v15, v15, s4, s59772; GFX10-SDAG-NEXT: v_permlane16_b32 v14, v14, s4, s59773; GFX10-SDAG-NEXT: v_permlane16_b32 v13, v13, s4, s59774; GFX10-SDAG-NEXT: v_permlane16_b32 v12, v12, s4, s59775; GFX10-SDAG-NEXT: v_permlane16_b32 v11, v11, s4, s59776; GFX10-SDAG-NEXT: v_permlane16_b32 v10, v10, s4, s59777; GFX10-SDAG-NEXT: v_permlane16_b32 v9, v9, s4, s59778; GFX10-SDAG-NEXT: v_permlane16_b32 v8, v8, s4, s59779; GFX10-SDAG-NEXT: v_permlane16_b32 v7, v7, s4, s59780; GFX10-SDAG-NEXT: v_permlane16_b32 v6, v6, s4, s59781; GFX10-SDAG-NEXT: v_permlane16_b32 v5, v5, s4, s59782; GFX10-SDAG-NEXT: v_permlane16_b32 v4, v4, s4, s59783; GFX10-SDAG-NEXT: v_permlane16_b32 v3, v3, s4, s59784; GFX10-SDAG-NEXT: v_permlane16_b32 v2, v2, s4, s59785; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[14:17], off offset:489786; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[10:13], off offset:329787; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:169788; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9789; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9790;9791; GFX10-GISEL-LABEL: v_permlane16_v8f64:9792; GFX10-GISEL: ; %bb.0:9793; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9794; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v189795; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v199796; GFX10-GISEL-NEXT: v_permlane16_b32 v2, v2, s4, s59797; GFX10-GISEL-NEXT: v_permlane16_b32 v3, v3, s4, s59798; GFX10-GISEL-NEXT: v_permlane16_b32 v4, v4, s4, s59799; GFX10-GISEL-NEXT: v_permlane16_b32 v5, v5, s4, s59800; GFX10-GISEL-NEXT: v_permlane16_b32 v6, v6, s4, s59801; GFX10-GISEL-NEXT: v_permlane16_b32 v7, v7, s4, s59802; GFX10-GISEL-NEXT: v_permlane16_b32 v8, v8, s4, s59803; GFX10-GISEL-NEXT: v_permlane16_b32 v9, v9, s4, s59804; GFX10-GISEL-NEXT: v_permlane16_b32 v10, v10, s4, s59805; GFX10-GISEL-NEXT: v_permlane16_b32 v11, v11, s4, s59806; GFX10-GISEL-NEXT: v_permlane16_b32 v12, v12, s4, s59807; GFX10-GISEL-NEXT: v_permlane16_b32 v13, v13, s4, s59808; GFX10-GISEL-NEXT: v_permlane16_b32 v14, v14, s4, s59809; GFX10-GISEL-NEXT: v_permlane16_b32 v15, v15, s4, s59810; GFX10-GISEL-NEXT: v_permlane16_b32 v16, v16, s4, s59811; GFX10-GISEL-NEXT: v_permlane16_b32 v17, v17, s4, s59812; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9813; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:169814; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[10:13], off offset:329815; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[14:17], off offset:489816; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9817;9818; GFX11-SDAG-LABEL: v_permlane16_v8f64:9819; GFX11-SDAG: ; %bb.0:9820; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9821; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v189822; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v199823; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9824; GFX11-SDAG-NEXT: v_permlane16_b32 v17, v17, s0, s19825; GFX11-SDAG-NEXT: v_permlane16_b32 v16, v16, s0, s19826; GFX11-SDAG-NEXT: v_permlane16_b32 v15, v15, s0, s19827; GFX11-SDAG-NEXT: v_permlane16_b32 v14, v14, s0, s19828; GFX11-SDAG-NEXT: v_permlane16_b32 v13, v13, s0, s19829; GFX11-SDAG-NEXT: v_permlane16_b32 v12, v12, s0, s19830; GFX11-SDAG-NEXT: v_permlane16_b32 v11, v11, s0, s19831; GFX11-SDAG-NEXT: v_permlane16_b32 v10, v10, s0, s19832; GFX11-SDAG-NEXT: v_permlane16_b32 v9, v9, s0, s19833; GFX11-SDAG-NEXT: v_permlane16_b32 v8, v8, s0, s19834; GFX11-SDAG-NEXT: v_permlane16_b32 v7, v7, s0, s19835; GFX11-SDAG-NEXT: v_permlane16_b32 v6, v6, s0, s19836; GFX11-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19837; GFX11-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19838; GFX11-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19839; GFX11-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19840; GFX11-SDAG-NEXT: s_clause 0x39841; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[14:17], off offset:489842; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[10:13], off offset:329843; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[6:9], off offset:169844; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9845; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9846;9847; GFX11-GISEL-LABEL: v_permlane16_v8f64:9848; GFX11-GISEL: ; %bb.0:9849; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9850; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v189851; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v199852; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9853; GFX11-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19854; GFX11-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19855; GFX11-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19856; GFX11-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19857; GFX11-GISEL-NEXT: v_permlane16_b32 v6, v6, s0, s19858; GFX11-GISEL-NEXT: v_permlane16_b32 v7, v7, s0, s19859; GFX11-GISEL-NEXT: v_permlane16_b32 v8, v8, s0, s19860; GFX11-GISEL-NEXT: v_permlane16_b32 v9, v9, s0, s19861; GFX11-GISEL-NEXT: v_permlane16_b32 v10, v10, s0, s19862; GFX11-GISEL-NEXT: v_permlane16_b32 v11, v11, s0, s19863; GFX11-GISEL-NEXT: v_permlane16_b32 v12, v12, s0, s19864; GFX11-GISEL-NEXT: v_permlane16_b32 v13, v13, s0, s19865; GFX11-GISEL-NEXT: v_permlane16_b32 v14, v14, s0, s19866; GFX11-GISEL-NEXT: v_permlane16_b32 v15, v15, s0, s19867; GFX11-GISEL-NEXT: v_permlane16_b32 v16, v16, s0, s19868; GFX11-GISEL-NEXT: v_permlane16_b32 v17, v17, s0, s19869; GFX11-GISEL-NEXT: s_clause 0x39870; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9871; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[6:9], off offset:169872; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[10:13], off offset:329873; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[14:17], off offset:489874; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9875;9876; GFX12-SDAG-LABEL: v_permlane16_v8f64:9877; GFX12-SDAG: ; %bb.0:9878; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x09879; GFX12-SDAG-NEXT: s_wait_expcnt 0x09880; GFX12-SDAG-NEXT: s_wait_samplecnt 0x09881; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x09882; GFX12-SDAG-NEXT: s_wait_kmcnt 0x09883; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v189884; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v199885; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)9886; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9887; GFX12-SDAG-NEXT: v_permlane16_b32 v17, v17, s0, s19888; GFX12-SDAG-NEXT: v_permlane16_b32 v16, v16, s0, s19889; GFX12-SDAG-NEXT: v_permlane16_b32 v15, v15, s0, s19890; GFX12-SDAG-NEXT: v_permlane16_b32 v14, v14, s0, s19891; GFX12-SDAG-NEXT: v_permlane16_b32 v13, v13, s0, s19892; GFX12-SDAG-NEXT: v_permlane16_b32 v12, v12, s0, s19893; GFX12-SDAG-NEXT: v_permlane16_b32 v11, v11, s0, s19894; GFX12-SDAG-NEXT: v_permlane16_b32 v10, v10, s0, s19895; GFX12-SDAG-NEXT: v_permlane16_b32 v9, v9, s0, s19896; GFX12-SDAG-NEXT: v_permlane16_b32 v8, v8, s0, s19897; GFX12-SDAG-NEXT: v_permlane16_b32 v7, v7, s0, s19898; GFX12-SDAG-NEXT: v_permlane16_b32 v6, v6, s0, s19899; GFX12-SDAG-NEXT: v_permlane16_b32 v5, v5, s0, s19900; GFX12-SDAG-NEXT: v_permlane16_b32 v4, v4, s0, s19901; GFX12-SDAG-NEXT: v_permlane16_b32 v3, v3, s0, s19902; GFX12-SDAG-NEXT: v_permlane16_b32 v2, v2, s0, s19903; GFX12-SDAG-NEXT: s_clause 0x39904; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[14:17], off offset:489905; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[10:13], off offset:329906; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[6:9], off offset:169907; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9908; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]9909;9910; GFX12-GISEL-LABEL: v_permlane16_v8f64:9911; GFX12-GISEL: ; %bb.0:9912; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x09913; GFX12-GISEL-NEXT: s_wait_expcnt 0x09914; GFX12-GISEL-NEXT: s_wait_samplecnt 0x09915; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x09916; GFX12-GISEL-NEXT: s_wait_kmcnt 0x09917; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v189918; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v199919; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)9920; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9921; GFX12-GISEL-NEXT: v_permlane16_b32 v2, v2, s0, s19922; GFX12-GISEL-NEXT: v_permlane16_b32 v3, v3, s0, s19923; GFX12-GISEL-NEXT: v_permlane16_b32 v4, v4, s0, s19924; GFX12-GISEL-NEXT: v_permlane16_b32 v5, v5, s0, s19925; GFX12-GISEL-NEXT: v_permlane16_b32 v6, v6, s0, s19926; GFX12-GISEL-NEXT: v_permlane16_b32 v7, v7, s0, s19927; GFX12-GISEL-NEXT: v_permlane16_b32 v8, v8, s0, s19928; GFX12-GISEL-NEXT: v_permlane16_b32 v9, v9, s0, s19929; GFX12-GISEL-NEXT: v_permlane16_b32 v10, v10, s0, s19930; GFX12-GISEL-NEXT: v_permlane16_b32 v11, v11, s0, s19931; GFX12-GISEL-NEXT: v_permlane16_b32 v12, v12, s0, s19932; GFX12-GISEL-NEXT: v_permlane16_b32 v13, v13, s0, s19933; GFX12-GISEL-NEXT: v_permlane16_b32 v14, v14, s0, s19934; GFX12-GISEL-NEXT: v_permlane16_b32 v15, v15, s0, s19935; GFX12-GISEL-NEXT: v_permlane16_b32 v16, v16, s0, s19936; GFX12-GISEL-NEXT: v_permlane16_b32 v17, v17, s0, s19937; GFX12-GISEL-NEXT: s_clause 0x39938; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9939; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[6:9], off offset:169940; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[10:13], off offset:329941; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[14:17], off offset:489942; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]9943 %v = call <8 x double> @llvm.amdgcn.permlane16.v8f64(<8 x double> %src0, <8 x double> %src0, i32 %src1, i32 %src2, i1 false, i1 false)9944 store <8 x double> %v, ptr addrspace(1) %out9945 ret void9946}9947 9948define void @v_permlanex16_v2i64(ptr addrspace(1) %out, <2 x i64> %src0, i32 %src1, i32 %src2) {9949; GFX10-SDAG-LABEL: v_permlanex16_v2i64:9950; GFX10-SDAG: ; %bb.0:9951; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9952; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v69953; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v79954; GFX10-SDAG-NEXT: v_permlanex16_b32 v5, v5, s4, s59955; GFX10-SDAG-NEXT: v_permlanex16_b32 v4, v4, s4, s59956; GFX10-SDAG-NEXT: v_permlanex16_b32 v3, v3, s4, s59957; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v2, s4, s59958; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9959; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]9960;9961; GFX10-GISEL-LABEL: v_permlanex16_v2i64:9962; GFX10-GISEL: ; %bb.0:9963; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9964; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v69965; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v79966; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v2, s4, s59967; GFX10-GISEL-NEXT: v_permlanex16_b32 v3, v3, s4, s59968; GFX10-GISEL-NEXT: v_permlanex16_b32 v4, v4, s4, s59969; GFX10-GISEL-NEXT: v_permlanex16_b32 v5, v5, s4, s59970; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off9971; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]9972;9973; GFX11-SDAG-LABEL: v_permlanex16_v2i64:9974; GFX11-SDAG: ; %bb.0:9975; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9976; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v69977; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v79978; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)9979; GFX11-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s19980; GFX11-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s19981; GFX11-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s19982; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s19983; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off9984; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]9985;9986; GFX11-GISEL-LABEL: v_permlanex16_v2i64:9987; GFX11-GISEL: ; %bb.0:9988; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9989; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v69990; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v79991; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)9992; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s19993; GFX11-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s19994; GFX11-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s19995; GFX11-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s19996; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off9997; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]9998;9999; GFX12-SDAG-LABEL: v_permlanex16_v2i64:10000; GFX12-SDAG: ; %bb.0:10001; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x010002; GFX12-SDAG-NEXT: s_wait_expcnt 0x010003; GFX12-SDAG-NEXT: s_wait_samplecnt 0x010004; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x010005; GFX12-SDAG-NEXT: s_wait_kmcnt 0x010006; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v610007; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v710008; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)10009; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)10010; GFX12-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s110011; GFX12-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s110012; GFX12-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s110013; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s110014; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off10015; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]10016;10017; GFX12-GISEL-LABEL: v_permlanex16_v2i64:10018; GFX12-GISEL: ; %bb.0:10019; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x010020; GFX12-GISEL-NEXT: s_wait_expcnt 0x010021; GFX12-GISEL-NEXT: s_wait_samplecnt 0x010022; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x010023; GFX12-GISEL-NEXT: s_wait_kmcnt 0x010024; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v610025; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v710026; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)10027; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)10028; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s110029; GFX12-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s110030; GFX12-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s110031; GFX12-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s110032; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off10033; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]10034 %v = call <2 x i64> @llvm.amdgcn.permlanex16.v2i64(<2 x i64> %src0, <2 x i64> %src0, i32 %src1, i32 %src2, i1 false, i1 false)10035 store <2 x i64> %v, ptr addrspace(1) %out10036 ret void10037}10038 10039define void @v_permlanex16_v3i64(ptr addrspace(1) %out, <3 x i64> %src0, i32 %src1, i32 %src2) {10040; GFX10-SDAG-LABEL: v_permlanex16_v3i64:10041; GFX10-SDAG: ; %bb.0:10042; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10043; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v810044; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v910045; GFX10-SDAG-NEXT: v_permlanex16_b32 v7, v7, s4, s510046; GFX10-SDAG-NEXT: v_permlanex16_b32 v6, v6, s4, s510047; GFX10-SDAG-NEXT: v_permlanex16_b32 v5, v5, s4, s510048; GFX10-SDAG-NEXT: v_permlanex16_b32 v4, v4, s4, s510049; GFX10-SDAG-NEXT: v_permlanex16_b32 v3, v3, s4, s510050; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v2, s4, s510051; GFX10-SDAG-NEXT: global_store_dwordx2 v[0:1], v[6:7], off offset:1610052; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off10053; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]10054;10055; GFX10-GISEL-LABEL: v_permlanex16_v3i64:10056; GFX10-GISEL: ; %bb.0:10057; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10058; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v810059; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v910060; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v2, s4, s510061; GFX10-GISEL-NEXT: v_permlanex16_b32 v3, v3, s4, s510062; GFX10-GISEL-NEXT: v_permlanex16_b32 v4, v4, s4, s510063; GFX10-GISEL-NEXT: v_permlanex16_b32 v5, v5, s4, s510064; GFX10-GISEL-NEXT: v_permlanex16_b32 v6, v6, s4, s510065; GFX10-GISEL-NEXT: v_permlanex16_b32 v7, v7, s4, s510066; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off10067; GFX10-GISEL-NEXT: global_store_dwordx2 v[0:1], v[6:7], off offset:1610068; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]10069;10070; GFX11-SDAG-LABEL: v_permlanex16_v3i64:10071; GFX11-SDAG: ; %bb.0:10072; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10073; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v810074; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v910075; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)10076; GFX11-SDAG-NEXT: v_permlanex16_b32 v7, v7, s0, s110077; GFX11-SDAG-NEXT: v_permlanex16_b32 v6, v6, s0, s110078; GFX11-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s110079; GFX11-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s110080; GFX11-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s110081; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s110082; GFX11-SDAG-NEXT: s_clause 0x110083; GFX11-SDAG-NEXT: global_store_b64 v[0:1], v[6:7], off offset:1610084; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off10085; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]10086;10087; GFX11-GISEL-LABEL: v_permlanex16_v3i64:10088; GFX11-GISEL: ; %bb.0:10089; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10090; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v810091; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v910092; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)10093; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s110094; GFX11-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s110095; GFX11-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s110096; GFX11-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s110097; GFX11-GISEL-NEXT: v_permlanex16_b32 v6, v6, s0, s110098; GFX11-GISEL-NEXT: v_permlanex16_b32 v7, v7, s0, s110099; GFX11-GISEL-NEXT: s_clause 0x110100; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off10101; GFX11-GISEL-NEXT: global_store_b64 v[0:1], v[6:7], off offset:1610102; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]10103;10104; GFX12-SDAG-LABEL: v_permlanex16_v3i64:10105; GFX12-SDAG: ; %bb.0:10106; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x010107; GFX12-SDAG-NEXT: s_wait_expcnt 0x010108; GFX12-SDAG-NEXT: s_wait_samplecnt 0x010109; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x010110; GFX12-SDAG-NEXT: s_wait_kmcnt 0x010111; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v810112; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v910113; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)10114; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)10115; GFX12-SDAG-NEXT: v_permlanex16_b32 v7, v7, s0, s110116; GFX12-SDAG-NEXT: v_permlanex16_b32 v6, v6, s0, s110117; GFX12-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s110118; GFX12-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s110119; GFX12-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s110120; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s110121; GFX12-SDAG-NEXT: s_clause 0x110122; GFX12-SDAG-NEXT: global_store_b64 v[0:1], v[6:7], off offset:1610123; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off10124; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]10125;10126; GFX12-GISEL-LABEL: v_permlanex16_v3i64:10127; GFX12-GISEL: ; %bb.0:10128; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x010129; GFX12-GISEL-NEXT: s_wait_expcnt 0x010130; GFX12-GISEL-NEXT: s_wait_samplecnt 0x010131; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x010132; GFX12-GISEL-NEXT: s_wait_kmcnt 0x010133; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v810134; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v910135; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)10136; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)10137; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s110138; GFX12-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s110139; GFX12-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s110140; GFX12-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s110141; GFX12-GISEL-NEXT: v_permlanex16_b32 v6, v6, s0, s110142; GFX12-GISEL-NEXT: v_permlanex16_b32 v7, v7, s0, s110143; GFX12-GISEL-NEXT: s_clause 0x110144; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off10145; GFX12-GISEL-NEXT: global_store_b64 v[0:1], v[6:7], off offset:1610146; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]10147 %v = call <3 x i64> @llvm.amdgcn.permlanex16.v3i64(<3 x i64> %src0, <3 x i64> %src0, i32 %src1, i32 %src2, i1 false, i1 false)10148 store <3 x i64> %v, ptr addrspace(1) %out10149 ret void10150}10151 10152define void @v_permlanex16_v4f64(ptr addrspace(1) %out, <4 x double> %src0, i32 %src1, i32 %src2) {10153; GFX10-SDAG-LABEL: v_permlanex16_v4f64:10154; GFX10-SDAG: ; %bb.0:10155; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10156; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v1010157; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v1110158; GFX10-SDAG-NEXT: v_permlanex16_b32 v9, v9, s4, s510159; GFX10-SDAG-NEXT: v_permlanex16_b32 v8, v8, s4, s510160; GFX10-SDAG-NEXT: v_permlanex16_b32 v7, v7, s4, s510161; GFX10-SDAG-NEXT: v_permlanex16_b32 v6, v6, s4, s510162; GFX10-SDAG-NEXT: v_permlanex16_b32 v5, v5, s4, s510163; GFX10-SDAG-NEXT: v_permlanex16_b32 v4, v4, s4, s510164; GFX10-SDAG-NEXT: v_permlanex16_b32 v3, v3, s4, s510165; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v2, s4, s510166; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:1610167; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off10168; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]10169;10170; GFX10-GISEL-LABEL: v_permlanex16_v4f64:10171; GFX10-GISEL: ; %bb.0:10172; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10173; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v1010174; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v1110175; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v2, s4, s510176; GFX10-GISEL-NEXT: v_permlanex16_b32 v3, v3, s4, s510177; GFX10-GISEL-NEXT: v_permlanex16_b32 v4, v4, s4, s510178; GFX10-GISEL-NEXT: v_permlanex16_b32 v5, v5, s4, s510179; GFX10-GISEL-NEXT: v_permlanex16_b32 v6, v6, s4, s510180; GFX10-GISEL-NEXT: v_permlanex16_b32 v7, v7, s4, s510181; GFX10-GISEL-NEXT: v_permlanex16_b32 v8, v8, s4, s510182; GFX10-GISEL-NEXT: v_permlanex16_b32 v9, v9, s4, s510183; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off10184; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:1610185; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]10186;10187; GFX11-SDAG-LABEL: v_permlanex16_v4f64:10188; GFX11-SDAG: ; %bb.0:10189; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10190; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v1010191; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v1110192; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)10193; GFX11-SDAG-NEXT: v_permlanex16_b32 v9, v9, s0, s110194; GFX11-SDAG-NEXT: v_permlanex16_b32 v8, v8, s0, s110195; GFX11-SDAG-NEXT: v_permlanex16_b32 v7, v7, s0, s110196; GFX11-SDAG-NEXT: v_permlanex16_b32 v6, v6, s0, s110197; GFX11-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s110198; GFX11-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s110199; GFX11-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s110200; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s110201; GFX11-SDAG-NEXT: s_clause 0x110202; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[6:9], off offset:1610203; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off10204; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]10205;10206; GFX11-GISEL-LABEL: v_permlanex16_v4f64:10207; GFX11-GISEL: ; %bb.0:10208; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10209; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v1010210; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v1110211; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)10212; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s110213; GFX11-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s110214; GFX11-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s110215; GFX11-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s110216; GFX11-GISEL-NEXT: v_permlanex16_b32 v6, v6, s0, s110217; GFX11-GISEL-NEXT: v_permlanex16_b32 v7, v7, s0, s110218; GFX11-GISEL-NEXT: v_permlanex16_b32 v8, v8, s0, s110219; GFX11-GISEL-NEXT: v_permlanex16_b32 v9, v9, s0, s110220; GFX11-GISEL-NEXT: s_clause 0x110221; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off10222; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[6:9], off offset:1610223; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]10224;10225; GFX12-SDAG-LABEL: v_permlanex16_v4f64:10226; GFX12-SDAG: ; %bb.0:10227; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x010228; GFX12-SDAG-NEXT: s_wait_expcnt 0x010229; GFX12-SDAG-NEXT: s_wait_samplecnt 0x010230; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x010231; GFX12-SDAG-NEXT: s_wait_kmcnt 0x010232; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v1010233; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v1110234; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)10235; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)10236; GFX12-SDAG-NEXT: v_permlanex16_b32 v9, v9, s0, s110237; GFX12-SDAG-NEXT: v_permlanex16_b32 v8, v8, s0, s110238; GFX12-SDAG-NEXT: v_permlanex16_b32 v7, v7, s0, s110239; GFX12-SDAG-NEXT: v_permlanex16_b32 v6, v6, s0, s110240; GFX12-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s110241; GFX12-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s110242; GFX12-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s110243; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s110244; GFX12-SDAG-NEXT: s_clause 0x110245; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[6:9], off offset:1610246; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off10247; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]10248;10249; GFX12-GISEL-LABEL: v_permlanex16_v4f64:10250; GFX12-GISEL: ; %bb.0:10251; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x010252; GFX12-GISEL-NEXT: s_wait_expcnt 0x010253; GFX12-GISEL-NEXT: s_wait_samplecnt 0x010254; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x010255; GFX12-GISEL-NEXT: s_wait_kmcnt 0x010256; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v1010257; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v1110258; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)10259; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)10260; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s110261; GFX12-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s110262; GFX12-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s110263; GFX12-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s110264; GFX12-GISEL-NEXT: v_permlanex16_b32 v6, v6, s0, s110265; GFX12-GISEL-NEXT: v_permlanex16_b32 v7, v7, s0, s110266; GFX12-GISEL-NEXT: v_permlanex16_b32 v8, v8, s0, s110267; GFX12-GISEL-NEXT: v_permlanex16_b32 v9, v9, s0, s110268; GFX12-GISEL-NEXT: s_clause 0x110269; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off10270; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[6:9], off offset:1610271; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]10272 %v = call <4 x double> @llvm.amdgcn.permlanex16.v4f64(<4 x double> %src0, <4 x double> %src0, i32 %src1, i32 %src2, i1 false, i1 false)10273 store <4 x double> %v, ptr addrspace(1) %out10274 ret void10275}10276 10277define void @v_permlanex16_v8f64(ptr addrspace(1) %out, <8 x double> %src0, i32 %src1, i32 %src2) {10278; GFX10-SDAG-LABEL: v_permlanex16_v8f64:10279; GFX10-SDAG: ; %bb.0:10280; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10281; GFX10-SDAG-NEXT: v_readfirstlane_b32 s4, v1810282; GFX10-SDAG-NEXT: v_readfirstlane_b32 s5, v1910283; GFX10-SDAG-NEXT: v_permlanex16_b32 v17, v17, s4, s510284; GFX10-SDAG-NEXT: v_permlanex16_b32 v16, v16, s4, s510285; GFX10-SDAG-NEXT: v_permlanex16_b32 v15, v15, s4, s510286; GFX10-SDAG-NEXT: v_permlanex16_b32 v14, v14, s4, s510287; GFX10-SDAG-NEXT: v_permlanex16_b32 v13, v13, s4, s510288; GFX10-SDAG-NEXT: v_permlanex16_b32 v12, v12, s4, s510289; GFX10-SDAG-NEXT: v_permlanex16_b32 v11, v11, s4, s510290; GFX10-SDAG-NEXT: v_permlanex16_b32 v10, v10, s4, s510291; GFX10-SDAG-NEXT: v_permlanex16_b32 v9, v9, s4, s510292; GFX10-SDAG-NEXT: v_permlanex16_b32 v8, v8, s4, s510293; GFX10-SDAG-NEXT: v_permlanex16_b32 v7, v7, s4, s510294; GFX10-SDAG-NEXT: v_permlanex16_b32 v6, v6, s4, s510295; GFX10-SDAG-NEXT: v_permlanex16_b32 v5, v5, s4, s510296; GFX10-SDAG-NEXT: v_permlanex16_b32 v4, v4, s4, s510297; GFX10-SDAG-NEXT: v_permlanex16_b32 v3, v3, s4, s510298; GFX10-SDAG-NEXT: v_permlanex16_b32 v2, v2, s4, s510299; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[14:17], off offset:4810300; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[10:13], off offset:3210301; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:1610302; GFX10-SDAG-NEXT: global_store_dwordx4 v[0:1], v[2:5], off10303; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]10304;10305; GFX10-GISEL-LABEL: v_permlanex16_v8f64:10306; GFX10-GISEL: ; %bb.0:10307; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10308; GFX10-GISEL-NEXT: v_readfirstlane_b32 s4, v1810309; GFX10-GISEL-NEXT: v_readfirstlane_b32 s5, v1910310; GFX10-GISEL-NEXT: v_permlanex16_b32 v2, v2, s4, s510311; GFX10-GISEL-NEXT: v_permlanex16_b32 v3, v3, s4, s510312; GFX10-GISEL-NEXT: v_permlanex16_b32 v4, v4, s4, s510313; GFX10-GISEL-NEXT: v_permlanex16_b32 v5, v5, s4, s510314; GFX10-GISEL-NEXT: v_permlanex16_b32 v6, v6, s4, s510315; GFX10-GISEL-NEXT: v_permlanex16_b32 v7, v7, s4, s510316; GFX10-GISEL-NEXT: v_permlanex16_b32 v8, v8, s4, s510317; GFX10-GISEL-NEXT: v_permlanex16_b32 v9, v9, s4, s510318; GFX10-GISEL-NEXT: v_permlanex16_b32 v10, v10, s4, s510319; GFX10-GISEL-NEXT: v_permlanex16_b32 v11, v11, s4, s510320; GFX10-GISEL-NEXT: v_permlanex16_b32 v12, v12, s4, s510321; GFX10-GISEL-NEXT: v_permlanex16_b32 v13, v13, s4, s510322; GFX10-GISEL-NEXT: v_permlanex16_b32 v14, v14, s4, s510323; GFX10-GISEL-NEXT: v_permlanex16_b32 v15, v15, s4, s510324; GFX10-GISEL-NEXT: v_permlanex16_b32 v16, v16, s4, s510325; GFX10-GISEL-NEXT: v_permlanex16_b32 v17, v17, s4, s510326; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[2:5], off10327; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:1610328; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[10:13], off offset:3210329; GFX10-GISEL-NEXT: global_store_dwordx4 v[0:1], v[14:17], off offset:4810330; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]10331;10332; GFX11-SDAG-LABEL: v_permlanex16_v8f64:10333; GFX11-SDAG: ; %bb.0:10334; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10335; GFX11-SDAG-NEXT: v_readfirstlane_b32 s0, v1810336; GFX11-SDAG-NEXT: v_readfirstlane_b32 s1, v1910337; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)10338; GFX11-SDAG-NEXT: v_permlanex16_b32 v17, v17, s0, s110339; GFX11-SDAG-NEXT: v_permlanex16_b32 v16, v16, s0, s110340; GFX11-SDAG-NEXT: v_permlanex16_b32 v15, v15, s0, s110341; GFX11-SDAG-NEXT: v_permlanex16_b32 v14, v14, s0, s110342; GFX11-SDAG-NEXT: v_permlanex16_b32 v13, v13, s0, s110343; GFX11-SDAG-NEXT: v_permlanex16_b32 v12, v12, s0, s110344; GFX11-SDAG-NEXT: v_permlanex16_b32 v11, v11, s0, s110345; GFX11-SDAG-NEXT: v_permlanex16_b32 v10, v10, s0, s110346; GFX11-SDAG-NEXT: v_permlanex16_b32 v9, v9, s0, s110347; GFX11-SDAG-NEXT: v_permlanex16_b32 v8, v8, s0, s110348; GFX11-SDAG-NEXT: v_permlanex16_b32 v7, v7, s0, s110349; GFX11-SDAG-NEXT: v_permlanex16_b32 v6, v6, s0, s110350; GFX11-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s110351; GFX11-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s110352; GFX11-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s110353; GFX11-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s110354; GFX11-SDAG-NEXT: s_clause 0x310355; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[14:17], off offset:4810356; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[10:13], off offset:3210357; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[6:9], off offset:1610358; GFX11-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off10359; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]10360;10361; GFX11-GISEL-LABEL: v_permlanex16_v8f64:10362; GFX11-GISEL: ; %bb.0:10363; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10364; GFX11-GISEL-NEXT: v_readfirstlane_b32 s0, v1810365; GFX11-GISEL-NEXT: v_readfirstlane_b32 s1, v1910366; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)10367; GFX11-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s110368; GFX11-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s110369; GFX11-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s110370; GFX11-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s110371; GFX11-GISEL-NEXT: v_permlanex16_b32 v6, v6, s0, s110372; GFX11-GISEL-NEXT: v_permlanex16_b32 v7, v7, s0, s110373; GFX11-GISEL-NEXT: v_permlanex16_b32 v8, v8, s0, s110374; GFX11-GISEL-NEXT: v_permlanex16_b32 v9, v9, s0, s110375; GFX11-GISEL-NEXT: v_permlanex16_b32 v10, v10, s0, s110376; GFX11-GISEL-NEXT: v_permlanex16_b32 v11, v11, s0, s110377; GFX11-GISEL-NEXT: v_permlanex16_b32 v12, v12, s0, s110378; GFX11-GISEL-NEXT: v_permlanex16_b32 v13, v13, s0, s110379; GFX11-GISEL-NEXT: v_permlanex16_b32 v14, v14, s0, s110380; GFX11-GISEL-NEXT: v_permlanex16_b32 v15, v15, s0, s110381; GFX11-GISEL-NEXT: v_permlanex16_b32 v16, v16, s0, s110382; GFX11-GISEL-NEXT: v_permlanex16_b32 v17, v17, s0, s110383; GFX11-GISEL-NEXT: s_clause 0x310384; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off10385; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[6:9], off offset:1610386; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[10:13], off offset:3210387; GFX11-GISEL-NEXT: global_store_b128 v[0:1], v[14:17], off offset:4810388; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]10389;10390; GFX12-SDAG-LABEL: v_permlanex16_v8f64:10391; GFX12-SDAG: ; %bb.0:10392; GFX12-SDAG-NEXT: s_wait_loadcnt_dscnt 0x010393; GFX12-SDAG-NEXT: s_wait_expcnt 0x010394; GFX12-SDAG-NEXT: s_wait_samplecnt 0x010395; GFX12-SDAG-NEXT: s_wait_bvhcnt 0x010396; GFX12-SDAG-NEXT: s_wait_kmcnt 0x010397; GFX12-SDAG-NEXT: v_readfirstlane_b32 s0, v1810398; GFX12-SDAG-NEXT: v_readfirstlane_b32 s1, v1910399; GFX12-SDAG-NEXT: s_wait_alu depctr_va_sdst(0)10400; GFX12-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)10401; GFX12-SDAG-NEXT: v_permlanex16_b32 v17, v17, s0, s110402; GFX12-SDAG-NEXT: v_permlanex16_b32 v16, v16, s0, s110403; GFX12-SDAG-NEXT: v_permlanex16_b32 v15, v15, s0, s110404; GFX12-SDAG-NEXT: v_permlanex16_b32 v14, v14, s0, s110405; GFX12-SDAG-NEXT: v_permlanex16_b32 v13, v13, s0, s110406; GFX12-SDAG-NEXT: v_permlanex16_b32 v12, v12, s0, s110407; GFX12-SDAG-NEXT: v_permlanex16_b32 v11, v11, s0, s110408; GFX12-SDAG-NEXT: v_permlanex16_b32 v10, v10, s0, s110409; GFX12-SDAG-NEXT: v_permlanex16_b32 v9, v9, s0, s110410; GFX12-SDAG-NEXT: v_permlanex16_b32 v8, v8, s0, s110411; GFX12-SDAG-NEXT: v_permlanex16_b32 v7, v7, s0, s110412; GFX12-SDAG-NEXT: v_permlanex16_b32 v6, v6, s0, s110413; GFX12-SDAG-NEXT: v_permlanex16_b32 v5, v5, s0, s110414; GFX12-SDAG-NEXT: v_permlanex16_b32 v4, v4, s0, s110415; GFX12-SDAG-NEXT: v_permlanex16_b32 v3, v3, s0, s110416; GFX12-SDAG-NEXT: v_permlanex16_b32 v2, v2, s0, s110417; GFX12-SDAG-NEXT: s_clause 0x310418; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[14:17], off offset:4810419; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[10:13], off offset:3210420; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[6:9], off offset:1610421; GFX12-SDAG-NEXT: global_store_b128 v[0:1], v[2:5], off10422; GFX12-SDAG-NEXT: s_setpc_b64 s[30:31]10423;10424; GFX12-GISEL-LABEL: v_permlanex16_v8f64:10425; GFX12-GISEL: ; %bb.0:10426; GFX12-GISEL-NEXT: s_wait_loadcnt_dscnt 0x010427; GFX12-GISEL-NEXT: s_wait_expcnt 0x010428; GFX12-GISEL-NEXT: s_wait_samplecnt 0x010429; GFX12-GISEL-NEXT: s_wait_bvhcnt 0x010430; GFX12-GISEL-NEXT: s_wait_kmcnt 0x010431; GFX12-GISEL-NEXT: v_readfirstlane_b32 s0, v1810432; GFX12-GISEL-NEXT: v_readfirstlane_b32 s1, v1910433; GFX12-GISEL-NEXT: s_wait_alu depctr_va_sdst(0)10434; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)10435; GFX12-GISEL-NEXT: v_permlanex16_b32 v2, v2, s0, s110436; GFX12-GISEL-NEXT: v_permlanex16_b32 v3, v3, s0, s110437; GFX12-GISEL-NEXT: v_permlanex16_b32 v4, v4, s0, s110438; GFX12-GISEL-NEXT: v_permlanex16_b32 v5, v5, s0, s110439; GFX12-GISEL-NEXT: v_permlanex16_b32 v6, v6, s0, s110440; GFX12-GISEL-NEXT: v_permlanex16_b32 v7, v7, s0, s110441; GFX12-GISEL-NEXT: v_permlanex16_b32 v8, v8, s0, s110442; GFX12-GISEL-NEXT: v_permlanex16_b32 v9, v9, s0, s110443; GFX12-GISEL-NEXT: v_permlanex16_b32 v10, v10, s0, s110444; GFX12-GISEL-NEXT: v_permlanex16_b32 v11, v11, s0, s110445; GFX12-GISEL-NEXT: v_permlanex16_b32 v12, v12, s0, s110446; GFX12-GISEL-NEXT: v_permlanex16_b32 v13, v13, s0, s110447; GFX12-GISEL-NEXT: v_permlanex16_b32 v14, v14, s0, s110448; GFX12-GISEL-NEXT: v_permlanex16_b32 v15, v15, s0, s110449; GFX12-GISEL-NEXT: v_permlanex16_b32 v16, v16, s0, s110450; GFX12-GISEL-NEXT: v_permlanex16_b32 v17, v17, s0, s110451; GFX12-GISEL-NEXT: s_clause 0x310452; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[2:5], off10453; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[6:9], off offset:1610454; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[10:13], off offset:3210455; GFX12-GISEL-NEXT: global_store_b128 v[0:1], v[14:17], off offset:4810456; GFX12-GISEL-NEXT: s_setpc_b64 s[30:31]10457 %v = call <8 x double> @llvm.amdgcn.permlanex16.v8f64(<8 x double> %src0, <8 x double> %src0, i32 %src1, i32 %src2, i1 false, i1 false)10458 store <8 x double> %v, ptr addrspace(1) %out10459 ret void10460}10461 10462define amdgpu_kernel void @v_permlanex16_convergent(ptr addrspace(1) %out, i32 %src0, i32 %pattern_lo, i32 %pattern_hi) {10463; GFX10-LABEL: v_permlanex16_convergent:10464; GFX10: ; %bb.0:10465; GFX10-NEXT: s_clause 0x110466; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c10467; GFX10-NEXT: s_load_dword s2, s[4:5], 0x3410468; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v010469; GFX10-NEXT: s_waitcnt lgkmcnt(0)10470; GFX10-NEXT: v_mov_b32_e32 v1, s010471; GFX10-NEXT: v_permlanex16_b32 v1, v1, s1, s210472; GFX10-NEXT: s_and_saveexec_b32 s0, vcc_lo10473; GFX10-NEXT: s_cbranch_execz .LBB142_210474; GFX10-NEXT: ; %bb.1: ; %t10475; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2410476; GFX10-NEXT: v_mov_b32_e32 v0, 010477; GFX10-NEXT: s_waitcnt lgkmcnt(0)10478; GFX10-NEXT: global_store_dword v0, v1, s[0:1]10479; GFX10-NEXT: .LBB142_2: ; %f10480; GFX10-NEXT: s_endpgm10481;10482; GFX11-LABEL: v_permlanex16_convergent:10483; GFX11: ; %bb.0:10484; GFX11-NEXT: s_clause 0x110485; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c10486; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x3410487; GFX11-NEXT: s_waitcnt lgkmcnt(0)10488; GFX11-NEXT: v_dual_mov_b32 v1, s0 :: v_dual_and_b32 v0, 0x3ff, v010489; GFX11-NEXT: s_mov_b32 s0, exec_lo10490; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)10491; GFX11-NEXT: v_permlanex16_b32 v1, v1, s1, s210492; GFX11-NEXT: v_cmpx_eq_u32_e32 0, v010493; GFX11-NEXT: s_cbranch_execz .LBB142_210494; GFX11-NEXT: ; %bb.1: ; %t10495; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x2410496; GFX11-NEXT: v_mov_b32_e32 v0, 010497; GFX11-NEXT: s_waitcnt lgkmcnt(0)10498; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]10499; GFX11-NEXT: .LBB142_2: ; %f10500; GFX11-NEXT: s_endpgm10501;10502; GFX12-LABEL: v_permlanex16_convergent:10503; GFX12: ; %bb.0:10504; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x2c10505; GFX12-NEXT: s_wait_kmcnt 0x010506; GFX12-NEXT: v_dual_mov_b32 v1, s0 :: v_dual_and_b32 v0, 0x3ff, v010507; GFX12-NEXT: s_mov_b32 s0, exec_lo10508; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)10509; GFX12-NEXT: v_permlanex16_b32 v1, v1, s1, s210510; GFX12-NEXT: v_cmpx_eq_u32_e32 0, v010511; GFX12-NEXT: s_cbranch_execz .LBB142_210512; GFX12-NEXT: ; %bb.1: ; %t10513; GFX12-NEXT: s_load_b64 s[0:1], s[4:5], 0x2410514; GFX12-NEXT: v_mov_b32_e32 v0, 010515; GFX12-NEXT: s_wait_kmcnt 0x010516; GFX12-NEXT: global_store_b32 v0, v1, s[0:1]10517; GFX12-NEXT: .LBB142_2: ; %f10518; GFX12-NEXT: s_endpgm10519 %tidx = call i32 @llvm.amdgcn.workitem.id.x()10520 %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %pattern_lo, i32 %pattern_hi, i1 false, i1 false)10521 %select = icmp eq i32 %tidx, 010522 br i1 %select, label %t, label %f10523t:10524 store i32 %v, ptr addrspace(1) %out10525 br label %f10526f:10527 ret void10528}10529