xref: /llvm-project/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.permlane32.swap.ll (revision 27a8afa3fcf7e0378dff65cf3374f7a4e4e2b9a6)
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