1d1cca313SMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2d1cca313SMatt Arsenault; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx950 < %s | FileCheck -check-prefix=GCN %s 3d1cca313SMatt Arsenault; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx950 < %s | FileCheck -check-prefix=GCN %s 4d1cca313SMatt Arsenault 5d1cca313SMatt Arsenault; RUN: not --crash llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 -filetype=null %s 2>&1 | FileCheck -check-prefix=ERR-SDAG %s 6d1cca313SMatt Arsenault; RUN: not --crash llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 -filetype=null %s 2>&1 | FileCheck -check-prefix=ERR-GISEL %s 7d1cca313SMatt Arsenault 8d1cca313SMatt Arsenault; ERR-SDAG: LLVM ERROR: Cannot select: intrinsic %llvm.amdgcn.permlane32.swap 9d1cca313SMatt Arsenault; ERR-GISEL: LLVM ERROR: cannot select: %{{[0-9]+}}:vgpr_32(s32), %{{[0-9]+}}:vgpr_32(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.permlane32.swap) 10d1cca313SMatt Arsenault 11d1cca313SMatt Arsenault 12d1cca313SMatt Arsenaultdeclare { i32, i32 } @llvm.amdgcn.permlane32.swap(i32, i32, i1 immarg, i1 immarg) 13d1cca313SMatt Arsenault 14d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_vv(i32 %vdst_old, i32 %src0_old) { 15d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_vv: 16d1cca313SMatt Arsenault; GCN: ; %bb.0: 17d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e32 v0, v1 19d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 20d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 %src0_old, i1 false, i1 false) 21d1cca313SMatt Arsenault ret { i32, i32 } %v 22d1cca313SMatt Arsenault} 23d1cca313SMatt Arsenault 24d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_vi(i32 %vdst_old) { 25d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_vi: 26d1cca313SMatt Arsenault; GCN: ; %bb.0: 27d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 28d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v1, 1 29*27a8afa3SMatt Arsenault; GCN-NEXT: s_nop 1 30d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e32 v0, v1 31d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 32d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 1, i1 false, i1 false) 33d1cca313SMatt Arsenault ret { i32, i32 } %v 34d1cca313SMatt Arsenault} 35d1cca313SMatt Arsenault 36d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_vl(i32 %vdst_old) { 37d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_vl: 38d1cca313SMatt Arsenault; GCN: ; %bb.0: 39d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 40d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v1, 0xc1d1 41*27a8afa3SMatt Arsenault; GCN-NEXT: s_nop 1 42d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e32 v0, v1 43d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 44d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 49617, i1 false, i1 false) 45d1cca313SMatt Arsenault ret { i32, i32 } %v 46d1cca313SMatt Arsenault} 47d1cca313SMatt Arsenault 48d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_iv(i32 %src0_old) { 49d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_iv: 50d1cca313SMatt Arsenault; GCN: ; %bb.0: 51d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 52d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v1, v0 53d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v0, 1 54*27a8afa3SMatt Arsenault; GCN-NEXT: s_nop 1 55d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e32 v0, v1 56d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 57d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 1, i32 %src0_old, i1 false, i1 false) 58d1cca313SMatt Arsenault ret { i32, i32 } %v 59d1cca313SMatt Arsenault} 60d1cca313SMatt Arsenault 61d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_ss(i32 inreg %vdst_old, i32 inreg %src0_old) { 62d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_ss: 63d1cca313SMatt Arsenault; GCN: ; %bb.0: 64d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 65d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v0, s0 66d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v1, s1 67*27a8afa3SMatt Arsenault; GCN-NEXT: s_nop 1 68d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e32 v0, v1 69d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 70d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 %src0_old, i1 false, i1 false) 71d1cca313SMatt Arsenault ret { i32, i32 } %v 72d1cca313SMatt Arsenault} 73d1cca313SMatt Arsenault 74d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_sv(i32 inreg %vdst_old, i32 %src0_old) { 75d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_sv: 76d1cca313SMatt Arsenault; GCN: ; %bb.0: 77d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 78d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v1, v0 79d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v0, s0 80*27a8afa3SMatt Arsenault; GCN-NEXT: s_nop 1 81d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e32 v0, v1 82d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 83d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 %src0_old, i1 false, i1 false) 84d1cca313SMatt Arsenault ret { i32, i32 } %v 85d1cca313SMatt Arsenault} 86d1cca313SMatt Arsenault 87d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_vs(i32 %vdst_old, i32 inreg %src0_old) { 88d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_vs: 89d1cca313SMatt Arsenault; GCN: ; %bb.0: 90d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 91d1cca313SMatt Arsenault; GCN-NEXT: v_mov_b32_e32 v1, s0 92*27a8afa3SMatt Arsenault; GCN-NEXT: s_nop 1 93d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e32 v0, v1 94d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 95d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 %src0_old, i1 false, i1 false) 96d1cca313SMatt Arsenault ret { i32, i32 } %v 97d1cca313SMatt Arsenault} 98d1cca313SMatt Arsenault 99d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_vv_fi(i32 %vdst_old, i32 %src0_old) { 100d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_vv_fi: 101d1cca313SMatt Arsenault; GCN: ; %bb.0: 102d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 103d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e64 v0, v1 fi:1 104d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 105d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 %src0_old, i1 true, i1 false) 106d1cca313SMatt Arsenault ret { i32, i32 } %v 107d1cca313SMatt Arsenault} 108d1cca313SMatt Arsenault 109d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_vv_bc(i32 %vdst_old, i32 %src0_old) { 110d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_vv_bc: 111d1cca313SMatt Arsenault; GCN: ; %bb.0: 112d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 113d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e64 v0, v1 bound_ctrl:1 114d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 115d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 %src0_old, i1 false, i1 true) 116d1cca313SMatt Arsenault ret { i32, i32 } %v 117d1cca313SMatt Arsenault} 118d1cca313SMatt Arsenault 119d1cca313SMatt Arsenaultdefine { i32, i32 } @v_permlane32_swap_b32_vv_fi_bc(i32 %vdst_old, i32 %src0_old) { 120d1cca313SMatt Arsenault; GCN-LABEL: v_permlane32_swap_b32_vv_fi_bc: 121d1cca313SMatt Arsenault; GCN: ; %bb.0: 122d1cca313SMatt Arsenault; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 123d1cca313SMatt Arsenault; GCN-NEXT: v_permlane32_swap_b32_e64 v0, v1 bound_ctrl:1 fi:1 124d1cca313SMatt Arsenault; GCN-NEXT: s_setpc_b64 s[30:31] 125d1cca313SMatt Arsenault %v = call { i32, i32 } @llvm.amdgcn.permlane32.swap(i32 %vdst_old, i32 %src0_old, i1 true, i1 true) 126d1cca313SMatt Arsenault ret { i32, i32 } %v 127d1cca313SMatt Arsenault} 128