brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.3 KiB · 39191d2 Raw
624 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11-SDAG %s3; RUN: llc -global-isel -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11-GISEL %s4 5declare i32 @llvm.amdgcn.permlane64(i32)6declare i32 @llvm.amdgcn.workitem.id.x()7 8define amdgpu_kernel void @test_s_i32(ptr addrspace(1) %out, i32 %src0) {9; GFX11-LABEL: test_s:10; GFX11:       ; %bb.0:11; GFX11-NEXT:    s_clause 0x112; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c13; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2414; GFX11-NEXT:    s_waitcnt lgkmcnt(0)15; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s216; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)17; GFX11-NEXT:    v_permlane64_b32 v0, v018; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]19; GFX11-NEXT:    s_endpgm20; GFX11-SDAG-LABEL: test_s_i32:21; GFX11-SDAG:       ; %bb.0:22; GFX11-SDAG-NEXT:    s_clause 0x123; GFX11-SDAG-NEXT:    s_load_b32 s2, s[4:5], 0x2c24; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2425; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)26; GFX11-SDAG-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s227; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]28; GFX11-SDAG-NEXT:    s_endpgm29;30; GFX11-GISEL-LABEL: test_s_i32:31; GFX11-GISEL:       ; %bb.0:32; GFX11-GISEL-NEXT:    s_clause 0x133; GFX11-GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c34; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2435; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)36; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s237; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]38; GFX11-GISEL-NEXT:    s_endpgm39  %v = call i32 @llvm.amdgcn.permlane64.i32(i32 %src0)40  store i32 %v, ptr addrspace(1) %out41  ret void42}43 44define amdgpu_kernel void @test_s_i64(ptr addrspace(1) %out, i64 %src0) {45; GFX11-SDAG-LABEL: test_s_i64:46; GFX11-SDAG:       ; %bb.0:47; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2448; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)49; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s350; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s251; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]52; GFX11-SDAG-NEXT:    s_endpgm53;54; GFX11-GISEL-LABEL: test_s_i64:55; GFX11-GISEL:       ; %bb.0:56; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2457; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 058; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)59; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s360; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]61; GFX11-GISEL-NEXT:    s_endpgm62  %v = call i64 @llvm.amdgcn.permlane64.i64(i64 %src0)63  store i64 %v, ptr addrspace(1) %out64  ret void65}66 67define amdgpu_kernel void @test_s_f64(ptr addrspace(1) %out, double %src0) {68; GFX11-SDAG-LABEL: test_s_f64:69; GFX11-SDAG:       ; %bb.0:70; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2471; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)72; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s373; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s274; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]75; GFX11-SDAG-NEXT:    s_endpgm76;77; GFX11-GISEL-LABEL: test_s_f64:78; GFX11-GISEL:       ; %bb.0:79; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2480; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 081; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)82; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s383; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]84; GFX11-GISEL-NEXT:    s_endpgm85  %v = call double @llvm.amdgcn.permlane64.f64(double %src0)86  store double %v, ptr addrspace(1) %out87  ret void88}89 90define amdgpu_kernel void @test_i_i32(ptr addrspace(1) %out) {91; GFX11-LABEL: test_i:92; GFX11:       ; %bb.0:93; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2494; GFX11-NEXT:    v_dual_mov_b32 v0, 0x63 :: v_dual_mov_b32 v1, 095; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)96; GFX11-NEXT:    v_permlane64_b32 v0, v097; GFX11-NEXT:    s_waitcnt lgkmcnt(0)98; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]99; GFX11-NEXT:    s_endpgm100; GFX11-SDAG-LABEL: test_i_i32:101; GFX11-SDAG:       ; %bb.0:102; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24103; GFX11-SDAG-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x63104; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)105; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]106; GFX11-SDAG-NEXT:    s_endpgm107;108; GFX11-GISEL-LABEL: test_i_i32:109; GFX11-GISEL:       ; %bb.0:110; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24111; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, 0x63 :: v_dual_mov_b32 v1, 0112; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)113; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]114; GFX11-GISEL-NEXT:    s_endpgm115  %v = call i32 @llvm.amdgcn.permlane64.i32(i32 99)116  store i32 %v, ptr addrspace(1) %out117  ret void118}119 120define amdgpu_kernel void @test_i_f32(ptr addrspace(1) %out) {121; GFX11-SDAG-LABEL: test_i_f32:122; GFX11-SDAG:       ; %bb.0:123; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24124; GFX11-SDAG-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x449a5000125; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)126; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]127; GFX11-SDAG-NEXT:    s_endpgm128;129; GFX11-GISEL-LABEL: test_i_f32:130; GFX11-GISEL:       ; %bb.0:131; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24132; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, 0x449a5000 :: v_dual_mov_b32 v1, 0133; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)134; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]135; GFX11-GISEL-NEXT:    s_endpgm136  %v = call float @llvm.amdgcn.permlane64.f32(float 1234.5)137  store float %v, ptr addrspace(1) %out138  ret void139}140 141define amdgpu_kernel void @test_i_i64(ptr addrspace(1) %out) {142; GFX11-SDAG-LABEL: test_i_i64:143; GFX11-SDAG:       ; %bb.0:144; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24145; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, 0x63146; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)147; GFX11-SDAG-NEXT:    global_store_b64 v1, v[0:1], s[0:1]148; GFX11-SDAG-NEXT:    s_endpgm149;150; GFX11-GISEL-LABEL: test_i_i64:151; GFX11-GISEL:       ; %bb.0:152; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24153; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, 0x63154; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, 0155; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)156; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]157; GFX11-GISEL-NEXT:    s_endpgm158  %v = call i64 @llvm.amdgcn.permlane64.i64(i64 99)159  store i64 %v, ptr addrspace(1) %out160  ret void161}162 163define amdgpu_kernel void @test_i_f64(ptr addrspace(1) %out) {164; GFX11-SDAG-LABEL: test_i_f64:165; GFX11-SDAG:       ; %bb.0:166; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24167; GFX11-SDAG-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x40934a00168; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)169; GFX11-SDAG-NEXT:    global_store_b64 v0, v[0:1], s[0:1]170; GFX11-SDAG-NEXT:    s_endpgm171;172; GFX11-GISEL-LABEL: test_i_f64:173; GFX11-GISEL:       ; %bb.0:174; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24175; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, 0176; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0x40934a00 :: v_dual_mov_b32 v2, 0177; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)178; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]179; GFX11-GISEL-NEXT:    s_endpgm180  %v = call double @llvm.amdgcn.permlane64.f64(double 1234.5)181  store double %v, ptr addrspace(1) %out182  ret void183}184 185 186 187define amdgpu_kernel void @test_v_i32(ptr addrspace(1) %out, i32 %src0) #1 {188; GFX11-LABEL: test_v:189; GFX11:       ; %bb.0:190; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24191; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0192; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)193; GFX11-NEXT:    v_permlane64_b32 v0, v0194; GFX11-NEXT:    s_waitcnt lgkmcnt(0)195; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]196; GFX11-NEXT:    s_endpgm197; GFX11-SDAG-LABEL: test_v_i32:198; GFX11-SDAG:       ; %bb.0:199; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24200; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0201; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)202; GFX11-SDAG-NEXT:    v_permlane64_b32 v0, v0203; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)204; GFX11-SDAG-NEXT:    global_store_b32 v1, v0, s[0:1]205; GFX11-SDAG-NEXT:    s_endpgm206;207; GFX11-GISEL-LABEL: test_v_i32:208; GFX11-GISEL:       ; %bb.0:209; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24210; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0211; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)212; GFX11-GISEL-NEXT:    v_permlane64_b32 v0, v0213; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)214; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]215; GFX11-GISEL-NEXT:    s_endpgm216  %tidx = call i32 @llvm.amdgcn.workitem.id.x()217  %v = call i32 @llvm.amdgcn.permlane64.i32(i32 %tidx)218  store i32 %v, ptr addrspace(1) %out219  ret void220}221 222define amdgpu_kernel void @test_v_f32(ptr addrspace(1) %out, float %src0) #1 {223; GFX11-SDAG-LABEL: test_v_f32:224; GFX11-SDAG:       ; %bb.0:225; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24226; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0227; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)228; GFX11-SDAG-NEXT:    v_permlane64_b32 v0, v0229; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)230; GFX11-SDAG-NEXT:    global_store_b32 v1, v0, s[0:1]231; GFX11-SDAG-NEXT:    s_endpgm232;233; GFX11-GISEL-LABEL: test_v_f32:234; GFX11-GISEL:       ; %bb.0:235; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24236; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0237; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)238; GFX11-GISEL-NEXT:    v_permlane64_b32 v0, v0239; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)240; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]241; GFX11-GISEL-NEXT:    s_endpgm242  %tidx = call i32 @llvm.amdgcn.workitem.id.x()243  %tidx_f32 = bitcast i32 %tidx to float244  %v = call float @llvm.amdgcn.permlane64.f32(float %tidx_f32)245  store float %v, ptr addrspace(1) %out246  ret void247}248 249define amdgpu_kernel void @test_v_i64(ptr addrspace(1) %out, i64 %src0) #1 {250; GFX11-SDAG-LABEL: test_v_i64:251; GFX11-SDAG:       ; %bb.0:252; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24253; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0254; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0255; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)256; GFX11-SDAG-NEXT:    v_permlane64_b32 v1, v2257; GFX11-SDAG-NEXT:    v_permlane64_b32 v0, v0258; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)259; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]260; GFX11-SDAG-NEXT:    s_endpgm261;262; GFX11-GISEL-LABEL: test_v_i64:263; GFX11-GISEL:       ; %bb.0:264; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24265; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0266; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0267; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)268; GFX11-GISEL-NEXT:    v_permlane64_b32 v0, v0269; GFX11-GISEL-NEXT:    v_permlane64_b32 v1, v2270; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)271; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]272; GFX11-GISEL-NEXT:    s_endpgm273  %tidx = call i32 @llvm.amdgcn.workitem.id.x()274  %tidx_i64 = zext i32 %tidx to i64275  %v = call i64 @llvm.amdgcn.permlane64.i64(i64 %tidx_i64)276  store i64 %v, ptr addrspace(1) %out277  ret void278}279 280define amdgpu_kernel void @test_v_f64(ptr addrspace(1) %out, double %src0) #1 {281; GFX11-SDAG-LABEL: test_v_f64:282; GFX11-SDAG:       ; %bb.0:283; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0284; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24285; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0286; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)287; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0288; GFX11-SDAG-NEXT:    v_permlane64_b32 v1, v1289; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)290; GFX11-SDAG-NEXT:    v_permlane64_b32 v0, v0291; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)292; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]293; GFX11-SDAG-NEXT:    s_endpgm294;295; GFX11-GISEL-LABEL: test_v_f64:296; GFX11-GISEL:       ; %bb.0:297; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0298; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24299; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0300; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)301; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0302; GFX11-GISEL-NEXT:    v_permlane64_b32 v0, v0303; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)304; GFX11-GISEL-NEXT:    v_permlane64_b32 v1, v1305; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)306; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]307; GFX11-GISEL-NEXT:    s_endpgm308  %tidx = call i32 @llvm.amdgcn.workitem.id.x()309  %tidx_f32 = bitcast i32 %tidx to float310  %tidx_f64 = fpext float %tidx_f32 to double311  %v = call double @llvm.amdgcn.permlane64.f64(double %tidx_f64)312  store double %v, ptr addrspace(1) %out313  ret void314}315 316define void @test_half(ptr addrspace(1) %out, half %src0) {317; GFX11-SDAG-LABEL: test_half:318; GFX11-SDAG:       ; %bb.0:319; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)320; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2321; GFX11-SDAG-NEXT:    global_store_b16 v[0:1], v2, off322; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]323;324; GFX11-GISEL-LABEL: test_half:325; GFX11-GISEL:       ; %bb.0:326; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)327; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2328; GFX11-GISEL-NEXT:    global_store_b16 v[0:1], v2, off329; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]330  %v = call half @llvm.amdgcn.permlane64.f16(half %src0)331  store half %v, ptr addrspace(1) %out332  ret void333}334 335define void @test_bfloat(ptr addrspace(1) %out, bfloat %src0) {336; GFX11-SDAG-LABEL: test_bfloat:337; GFX11-SDAG:       ; %bb.0:338; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)339; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2340; GFX11-SDAG-NEXT:    global_store_b16 v[0:1], v2, off341; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]342;343; GFX11-GISEL-LABEL: test_bfloat:344; GFX11-GISEL:       ; %bb.0:345; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)346; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2347; GFX11-GISEL-NEXT:    global_store_b16 v[0:1], v2, off348; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]349  %v = call bfloat @llvm.amdgcn.permlane64.bf16(bfloat %src0)350  store bfloat %v, ptr addrspace(1) %out351  ret void352}353 354define void @test_i16(ptr addrspace(1) %out, i16 %src0) {355; GFX11-SDAG-LABEL: test_i16:356; GFX11-SDAG:       ; %bb.0:357; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)358; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2359; GFX11-SDAG-NEXT:    global_store_b16 v[0:1], v2, off360; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]361;362; GFX11-GISEL-LABEL: test_i16:363; GFX11-GISEL:       ; %bb.0:364; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)365; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2366; GFX11-GISEL-NEXT:    global_store_b16 v[0:1], v2, off367; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]368  %v = call i16 @llvm.amdgcn.permlane64.i16(i16 %src0)369  store i16 %v, ptr addrspace(1) %out370  ret void371}372 373define void @test_v2f16(ptr addrspace(1) %out, <2 x half> %src0) {374; GFX11-SDAG-LABEL: test_v2f16:375; GFX11-SDAG:       ; %bb.0:376; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)377; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2378; GFX11-SDAG-NEXT:    global_store_b32 v[0:1], v2, off379; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]380;381; GFX11-GISEL-LABEL: test_v2f16:382; GFX11-GISEL:       ; %bb.0:383; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)384; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2385; GFX11-GISEL-NEXT:    global_store_b32 v[0:1], v2, off386; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]387  %v = call <2 x half> @llvm.amdgcn.permlane64.v2f16(<2 x half> %src0)388  store <2 x half> %v, ptr addrspace(1) %out389  ret void390}391 392define void @test_v2f32(ptr addrspace(1) %out, <2 x float> %src0) {393; GFX11-SDAG-LABEL: test_v2f32:394; GFX11-SDAG:       ; %bb.0:395; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)396; GFX11-SDAG-NEXT:    v_permlane64_b32 v3, v3397; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2398; GFX11-SDAG-NEXT:    global_store_b64 v[0:1], v[2:3], off399; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]400;401; GFX11-GISEL-LABEL: test_v2f32:402; GFX11-GISEL:       ; %bb.0:403; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)404; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2405; GFX11-GISEL-NEXT:    v_permlane64_b32 v3, v3406; GFX11-GISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off407; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]408  %v = call <2 x float> @llvm.amdgcn.permlane64.v2f32(<2 x float> %src0)409  store <2 x float> %v, ptr addrspace(1) %out410  ret void411}412 413define void @test_v7i32(ptr addrspace(1) %out, <7 x i32> %src0) {414; GFX11-SDAG-LABEL: test_v7i32:415; GFX11-SDAG:       ; %bb.0:416; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)417; GFX11-SDAG-NEXT:    v_permlane64_b32 v8, v8418; GFX11-SDAG-NEXT:    v_permlane64_b32 v7, v7419; GFX11-SDAG-NEXT:    v_permlane64_b32 v6, v6420; GFX11-SDAG-NEXT:    v_permlane64_b32 v5, v5421; GFX11-SDAG-NEXT:    v_permlane64_b32 v4, v4422; GFX11-SDAG-NEXT:    v_permlane64_b32 v3, v3423; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2424; GFX11-SDAG-NEXT:    s_clause 0x1425; GFX11-SDAG-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16426; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off427; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]428;429; GFX11-GISEL-LABEL: test_v7i32:430; GFX11-GISEL:       ; %bb.0:431; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2433; GFX11-GISEL-NEXT:    v_permlane64_b32 v3, v3434; GFX11-GISEL-NEXT:    v_permlane64_b32 v4, v4435; GFX11-GISEL-NEXT:    v_permlane64_b32 v5, v5436; GFX11-GISEL-NEXT:    v_permlane64_b32 v6, v6437; GFX11-GISEL-NEXT:    v_permlane64_b32 v7, v7438; GFX11-GISEL-NEXT:    v_permlane64_b32 v8, v8439; GFX11-GISEL-NEXT:    s_clause 0x1440; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off441; GFX11-GISEL-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16442; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]443  %v = call <7 x i32> @llvm.amdgcn.permlane64.v7i32(<7 x i32> %src0)444  store <7 x i32> %v, ptr addrspace(1) %out445  ret void446}447 448define void @test_v8i16(ptr addrspace(1) %out, <8 x i16> %src0) {449; GFX11-SDAG-LABEL: test_v8i16:450; GFX11-SDAG:       ; %bb.0:451; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)452; GFX11-SDAG-NEXT:    v_permlane64_b32 v5, v5453; GFX11-SDAG-NEXT:    v_permlane64_b32 v4, v4454; GFX11-SDAG-NEXT:    v_permlane64_b32 v3, v3455; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2456; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off457; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]458;459; GFX11-GISEL-LABEL: test_v8i16:460; GFX11-GISEL:       ; %bb.0:461; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)462; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2463; GFX11-GISEL-NEXT:    v_permlane64_b32 v3, v3464; GFX11-GISEL-NEXT:    v_permlane64_b32 v4, v4465; GFX11-GISEL-NEXT:    v_permlane64_b32 v5, v5466; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off467; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]468  %v = call <8 x i16> @llvm.amdgcn.permlane64.v8i16(<8 x i16> %src0)469  store <8 x i16> %v, ptr addrspace(1) %out470  ret void471}472 473define void @test_v2i64(ptr addrspace(1) %out, <2 x i64> %src0) {474; GFX11-SDAG-LABEL: test_v2i64:475; GFX11-SDAG:       ; %bb.0:476; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)477; GFX11-SDAG-NEXT:    v_permlane64_b32 v5, v5478; GFX11-SDAG-NEXT:    v_permlane64_b32 v4, v4479; GFX11-SDAG-NEXT:    v_permlane64_b32 v3, v3480; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2481; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off482; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]483;484; GFX11-GISEL-LABEL: test_v2i64:485; GFX11-GISEL:       ; %bb.0:486; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)487; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2488; GFX11-GISEL-NEXT:    v_permlane64_b32 v3, v3489; GFX11-GISEL-NEXT:    v_permlane64_b32 v4, v4490; GFX11-GISEL-NEXT:    v_permlane64_b32 v5, v5491; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off492; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]493  %v = call <2 x i64> @llvm.amdgcn.permlane64.v2i64(<2 x i64> %src0)494  store <2 x i64> %v, ptr addrspace(1) %out495  ret void496}497 498define void @test_v3i64(ptr addrspace(1) %out, <3 x i64> %src0) {499; GFX11-SDAG-LABEL: test_v3i64:500; GFX11-SDAG:       ; %bb.0:501; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)502; GFX11-SDAG-NEXT:    v_permlane64_b32 v7, v7503; GFX11-SDAG-NEXT:    v_permlane64_b32 v6, v6504; GFX11-SDAG-NEXT:    v_permlane64_b32 v5, v5505; GFX11-SDAG-NEXT:    v_permlane64_b32 v4, v4506; GFX11-SDAG-NEXT:    v_permlane64_b32 v3, v3507; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2508; GFX11-SDAG-NEXT:    s_clause 0x1509; GFX11-SDAG-NEXT:    global_store_b64 v[0:1], v[6:7], off offset:16510; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off511; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]512;513; GFX11-GISEL-LABEL: test_v3i64:514; GFX11-GISEL:       ; %bb.0:515; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)516; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2517; GFX11-GISEL-NEXT:    v_permlane64_b32 v3, v3518; GFX11-GISEL-NEXT:    v_permlane64_b32 v4, v4519; GFX11-GISEL-NEXT:    v_permlane64_b32 v5, v5520; GFX11-GISEL-NEXT:    v_permlane64_b32 v6, v6521; GFX11-GISEL-NEXT:    v_permlane64_b32 v7, v7522; GFX11-GISEL-NEXT:    s_clause 0x1523; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off524; GFX11-GISEL-NEXT:    global_store_b64 v[0:1], v[6:7], off offset:16525; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]526  %v = call <3 x i64> @llvm.amdgcn.permlane64.v3i64(<3 x i64> %src0)527  store <3 x i64> %v, ptr addrspace(1) %out528  ret void529}530 531define void @test_v4f64(ptr addrspace(1) %out, <4 x double> %src0) {532; GFX11-SDAG-LABEL: test_v4f64:533; GFX11-SDAG:       ; %bb.0:534; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)535; GFX11-SDAG-NEXT:    v_permlane64_b32 v9, v9536; GFX11-SDAG-NEXT:    v_permlane64_b32 v8, v8537; GFX11-SDAG-NEXT:    v_permlane64_b32 v7, v7538; GFX11-SDAG-NEXT:    v_permlane64_b32 v6, v6539; GFX11-SDAG-NEXT:    v_permlane64_b32 v5, v5540; GFX11-SDAG-NEXT:    v_permlane64_b32 v4, v4541; GFX11-SDAG-NEXT:    v_permlane64_b32 v3, v3542; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2543; GFX11-SDAG-NEXT:    s_clause 0x1544; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[6:9], off offset:16545; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off546; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]547;548; GFX11-GISEL-LABEL: test_v4f64:549; GFX11-GISEL:       ; %bb.0:550; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)551; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2552; GFX11-GISEL-NEXT:    v_permlane64_b32 v3, v3553; GFX11-GISEL-NEXT:    v_permlane64_b32 v4, v4554; GFX11-GISEL-NEXT:    v_permlane64_b32 v5, v5555; GFX11-GISEL-NEXT:    v_permlane64_b32 v6, v6556; GFX11-GISEL-NEXT:    v_permlane64_b32 v7, v7557; GFX11-GISEL-NEXT:    v_permlane64_b32 v8, v8558; GFX11-GISEL-NEXT:    v_permlane64_b32 v9, v9559; GFX11-GISEL-NEXT:    s_clause 0x1560; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off561; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[6:9], off offset:16562; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]563  %v = call <4 x double> @llvm.amdgcn.permlane64.v4f64(<4 x double> %src0)564  store <4 x double> %v, ptr addrspace(1) %out565  ret void566}567 568define void @test_v8f64(ptr addrspace(1) %out, <8 x double> %src0) {569; GFX11-SDAG-LABEL: test_v8f64:570; GFX11-SDAG:       ; %bb.0:571; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)572; GFX11-SDAG-NEXT:    v_permlane64_b32 v17, v17573; GFX11-SDAG-NEXT:    v_permlane64_b32 v16, v16574; GFX11-SDAG-NEXT:    v_permlane64_b32 v15, v15575; GFX11-SDAG-NEXT:    v_permlane64_b32 v14, v14576; GFX11-SDAG-NEXT:    v_permlane64_b32 v13, v13577; GFX11-SDAG-NEXT:    v_permlane64_b32 v12, v12578; GFX11-SDAG-NEXT:    v_permlane64_b32 v11, v11579; GFX11-SDAG-NEXT:    v_permlane64_b32 v10, v10580; GFX11-SDAG-NEXT:    v_permlane64_b32 v9, v9581; GFX11-SDAG-NEXT:    v_permlane64_b32 v8, v8582; GFX11-SDAG-NEXT:    v_permlane64_b32 v7, v7583; GFX11-SDAG-NEXT:    v_permlane64_b32 v6, v6584; GFX11-SDAG-NEXT:    v_permlane64_b32 v5, v5585; GFX11-SDAG-NEXT:    v_permlane64_b32 v4, v4586; GFX11-SDAG-NEXT:    v_permlane64_b32 v3, v3587; GFX11-SDAG-NEXT:    v_permlane64_b32 v2, v2588; GFX11-SDAG-NEXT:    s_clause 0x3589; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[14:17], off offset:48590; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[10:13], off offset:32591; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[6:9], off offset:16592; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off593; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]594;595; GFX11-GISEL-LABEL: test_v8f64:596; GFX11-GISEL:       ; %bb.0:597; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)598; GFX11-GISEL-NEXT:    v_permlane64_b32 v2, v2599; GFX11-GISEL-NEXT:    v_permlane64_b32 v3, v3600; GFX11-GISEL-NEXT:    v_permlane64_b32 v4, v4601; GFX11-GISEL-NEXT:    v_permlane64_b32 v5, v5602; GFX11-GISEL-NEXT:    v_permlane64_b32 v6, v6603; GFX11-GISEL-NEXT:    v_permlane64_b32 v7, v7604; GFX11-GISEL-NEXT:    v_permlane64_b32 v8, v8605; GFX11-GISEL-NEXT:    v_permlane64_b32 v9, v9606; GFX11-GISEL-NEXT:    v_permlane64_b32 v10, v10607; GFX11-GISEL-NEXT:    v_permlane64_b32 v11, v11608; GFX11-GISEL-NEXT:    v_permlane64_b32 v12, v12609; GFX11-GISEL-NEXT:    v_permlane64_b32 v13, v13610; GFX11-GISEL-NEXT:    v_permlane64_b32 v14, v14611; GFX11-GISEL-NEXT:    v_permlane64_b32 v15, v15612; GFX11-GISEL-NEXT:    v_permlane64_b32 v16, v16613; GFX11-GISEL-NEXT:    v_permlane64_b32 v17, v17614; GFX11-GISEL-NEXT:    s_clause 0x3615; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off616; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[6:9], off offset:16617; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[10:13], off offset:32618; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[14:17], off offset:48619; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]620  %v = call <8 x double> @llvm.amdgcn.permlane64.v8f64(<8 x double> %src0)621  store <8 x double> %v, ptr addrspace(1) %out622  ret void623}624