annotate llvm/test/CodeGen/AMDGPU/llvm.amdgcn.sbfe.ll @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
1 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
2 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
150
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 ; GCN-LABEL: {{^}}bfe_i32_arg_arg_arg:
anatofuz
parents:
diff changeset
5 ; GCN: v_bfe_i32
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
6 define amdgpu_kernel void @bfe_i32_arg_arg_arg(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) #0 {
150
anatofuz
parents:
diff changeset
7 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 %src0, i32 %src1, i32 %src1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
8 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
9 ret void
anatofuz
parents:
diff changeset
10 }
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 ; GCN-LABEL: {{^}}bfe_i32_arg_arg_imm:
anatofuz
parents:
diff changeset
13 ; GCN: v_bfe_i32
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
14 define amdgpu_kernel void @bfe_i32_arg_arg_imm(ptr addrspace(1) %out, i32 %src0, i32 %src1) #0 {
150
anatofuz
parents:
diff changeset
15 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 %src0, i32 %src1, i32 123)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
16 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
17 ret void
anatofuz
parents:
diff changeset
18 }
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 ; GCN-LABEL: {{^}}bfe_i32_arg_imm_arg:
anatofuz
parents:
diff changeset
21 ; GCN: v_bfe_i32
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
22 define amdgpu_kernel void @bfe_i32_arg_imm_arg(ptr addrspace(1) %out, i32 %src0, i32 %src2) #0 {
150
anatofuz
parents:
diff changeset
23 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 %src0, i32 123, i32 %src2)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
24 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
25 ret void
anatofuz
parents:
diff changeset
26 }
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 ; GCN-LABEL: {{^}}bfe_i32_imm_arg_arg:
anatofuz
parents:
diff changeset
29 ; GCN: v_bfe_i32
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
30 define amdgpu_kernel void @bfe_i32_imm_arg_arg(ptr addrspace(1) %out, i32 %src1, i32 %src2) #0 {
150
anatofuz
parents:
diff changeset
31 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 123, i32 %src1, i32 %src2)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
32 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
33 ret void
anatofuz
parents:
diff changeset
34 }
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 ; GCN-LABEL: {{^}}v_bfe_print_arg:
anatofuz
parents:
diff changeset
37 ; GCN: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 2, 8
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
38 define amdgpu_kernel void @v_bfe_print_arg(ptr addrspace(1) %out, ptr addrspace(1) %src0) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
39 %load = load i32, ptr addrspace(1) %src0, align 4
150
anatofuz
parents:
diff changeset
40 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 %load, i32 2, i32 8)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
41 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
42 ret void
anatofuz
parents:
diff changeset
43 }
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 ; GCN-LABEL: {{^}}bfe_i32_arg_0_width_reg_offset:
anatofuz
parents:
diff changeset
46 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
47 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
48 define amdgpu_kernel void @bfe_i32_arg_0_width_reg_offset(ptr addrspace(1) %out, i32 %src0, i32 %src1) #0 {
150
anatofuz
parents:
diff changeset
49 %bfe_u32 = call i32 @llvm.amdgcn.sbfe.i32(i32 %src0, i32 %src1, i32 0)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
50 store i32 %bfe_u32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
51 ret void
anatofuz
parents:
diff changeset
52 }
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 ; GCN-LABEL: {{^}}bfe_i32_arg_0_width_imm_offset:
anatofuz
parents:
diff changeset
55 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
56 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
57 define amdgpu_kernel void @bfe_i32_arg_0_width_imm_offset(ptr addrspace(1) %out, i32 %src0, i32 %src1) #0 {
150
anatofuz
parents:
diff changeset
58 %bfe_u32 = call i32 @llvm.amdgcn.sbfe.i32(i32 %src0, i32 8, i32 0)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
59 store i32 %bfe_u32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
60 ret void
anatofuz
parents:
diff changeset
61 }
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 ; GCN-LABEL: {{^}}bfe_i32_test_6:
anatofuz
parents:
diff changeset
64 ; GCN: v_lshlrev_b32_e32 v{{[0-9]+}}, 31, v{{[0-9]+}}
anatofuz
parents:
diff changeset
65 ; GCN: v_ashrrev_i32_e32 v{{[0-9]+}}, 1, v{{[0-9]+}}
anatofuz
parents:
diff changeset
66 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
67 define amdgpu_kernel void @bfe_i32_test_6(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
68 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
69 %shl = shl i32 %x, 31
anatofuz
parents:
diff changeset
70 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %shl, i32 1, i32 31)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
71 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
72 ret void
anatofuz
parents:
diff changeset
73 }
anatofuz
parents:
diff changeset
74
anatofuz
parents:
diff changeset
75 ; GCN-LABEL: {{^}}bfe_i32_test_7:
anatofuz
parents:
diff changeset
76 ; GCN-NOT: shl
anatofuz
parents:
diff changeset
77 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
78 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
anatofuz
parents:
diff changeset
79 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
80 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
81 define amdgpu_kernel void @bfe_i32_test_7(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
82 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
83 %shl = shl i32 %x, 31
anatofuz
parents:
diff changeset
84 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %shl, i32 0, i32 31)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
85 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
86 ret void
anatofuz
parents:
diff changeset
87 }
anatofuz
parents:
diff changeset
88
anatofuz
parents:
diff changeset
89 ; GCN-LABEL: {{^}}bfe_i32_test_8:
anatofuz
parents:
diff changeset
90 ; GCN: buffer_load_dword
anatofuz
parents:
diff changeset
91 ; GCN: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 1
anatofuz
parents:
diff changeset
92 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
93 define amdgpu_kernel void @bfe_i32_test_8(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
94 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
95 %shl = shl i32 %x, 31
anatofuz
parents:
diff changeset
96 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %shl, i32 31, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
97 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
98 ret void
anatofuz
parents:
diff changeset
99 }
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 ; GCN-LABEL: {{^}}bfe_i32_test_9:
anatofuz
parents:
diff changeset
102 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
103 ; GCN: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, v{{[0-9]+}}
anatofuz
parents:
diff changeset
104 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
105 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
106 define amdgpu_kernel void @bfe_i32_test_9(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
107 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
108 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %x, i32 31, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
109 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
110 ret void
anatofuz
parents:
diff changeset
111 }
anatofuz
parents:
diff changeset
112
anatofuz
parents:
diff changeset
113 ; GCN-LABEL: {{^}}bfe_i32_test_10:
anatofuz
parents:
diff changeset
114 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
115 ; GCN: v_ashrrev_i32_e32 v{{[0-9]+}}, 1, v{{[0-9]+}}
anatofuz
parents:
diff changeset
116 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
117 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
118 define amdgpu_kernel void @bfe_i32_test_10(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
119 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
120 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %x, i32 1, i32 31)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
121 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
122 ret void
anatofuz
parents:
diff changeset
123 }
anatofuz
parents:
diff changeset
124
anatofuz
parents:
diff changeset
125 ; GCN-LABEL: {{^}}bfe_i32_test_11:
anatofuz
parents:
diff changeset
126 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
127 ; GCN: v_ashrrev_i32_e32 v{{[0-9]+}}, 8, v{{[0-9]+}}
anatofuz
parents:
diff changeset
128 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
129 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
130 define amdgpu_kernel void @bfe_i32_test_11(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
131 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
132 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %x, i32 8, i32 24)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
133 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
134 ret void
anatofuz
parents:
diff changeset
135 }
anatofuz
parents:
diff changeset
136
anatofuz
parents:
diff changeset
137 ; GCN-LABEL: {{^}}bfe_i32_test_12:
anatofuz
parents:
diff changeset
138 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
139 ; GCN: v_ashrrev_i32_e32 v{{[0-9]+}}, 24, v{{[0-9]+}}
anatofuz
parents:
diff changeset
140 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
141 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
142 define amdgpu_kernel void @bfe_i32_test_12(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
143 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
144 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %x, i32 24, i32 8)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
145 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
146 ret void
anatofuz
parents:
diff changeset
147 }
anatofuz
parents:
diff changeset
148
anatofuz
parents:
diff changeset
149 ; GCN-LABEL: {{^}}bfe_i32_test_13:
anatofuz
parents:
diff changeset
150 ; GCN: v_ashrrev_i32_e32 {{v[0-9]+}}, 31, {{v[0-9]+}}
anatofuz
parents:
diff changeset
151 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
152 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
153 define amdgpu_kernel void @bfe_i32_test_13(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
154 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
155 %shl = ashr i32 %x, 31
anatofuz
parents:
diff changeset
156 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %shl, i32 31, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
157 store i32 %bfe, ptr addrspace(1) %out, align 4 ret void
150
anatofuz
parents:
diff changeset
158 }
anatofuz
parents:
diff changeset
159
anatofuz
parents:
diff changeset
160 ; GCN-LABEL: {{^}}bfe_i32_test_14:
anatofuz
parents:
diff changeset
161 ; GCN-NOT: lshr
anatofuz
parents:
diff changeset
162 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
163 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
164 define amdgpu_kernel void @bfe_i32_test_14(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
165 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
166 %shl = lshr i32 %x, 31
anatofuz
parents:
diff changeset
167 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %shl, i32 31, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
168 store i32 %bfe, ptr addrspace(1) %out, align 4 ret void
150
anatofuz
parents:
diff changeset
169 }
anatofuz
parents:
diff changeset
170
anatofuz
parents:
diff changeset
171 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_0:
anatofuz
parents:
diff changeset
172 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
173 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
anatofuz
parents:
diff changeset
174 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
175 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
176 define amdgpu_kernel void @bfe_i32_constant_fold_test_0(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
177 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 0, i32 0, i32 0)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
178 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
179 ret void
anatofuz
parents:
diff changeset
180 }
anatofuz
parents:
diff changeset
181
anatofuz
parents:
diff changeset
182 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_1:
anatofuz
parents:
diff changeset
183 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
184 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
anatofuz
parents:
diff changeset
185 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
186 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
187 define amdgpu_kernel void @bfe_i32_constant_fold_test_1(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
188 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 12334, i32 0, i32 0)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
189 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
190 ret void
anatofuz
parents:
diff changeset
191 }
anatofuz
parents:
diff changeset
192
anatofuz
parents:
diff changeset
193 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_2:
anatofuz
parents:
diff changeset
194 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
195 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
anatofuz
parents:
diff changeset
196 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
197 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
198 define amdgpu_kernel void @bfe_i32_constant_fold_test_2(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
199 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 0, i32 0, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
200 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
201 ret void
anatofuz
parents:
diff changeset
202 }
anatofuz
parents:
diff changeset
203
anatofuz
parents:
diff changeset
204 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_3:
anatofuz
parents:
diff changeset
205 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
206 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], -1
anatofuz
parents:
diff changeset
207 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
208 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
209 define amdgpu_kernel void @bfe_i32_constant_fold_test_3(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
210 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 1, i32 0, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
211 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
212 ret void
anatofuz
parents:
diff changeset
213 }
anatofuz
parents:
diff changeset
214
anatofuz
parents:
diff changeset
215 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_4:
anatofuz
parents:
diff changeset
216 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
217 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], -1
anatofuz
parents:
diff changeset
218 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
219 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
220 define amdgpu_kernel void @bfe_i32_constant_fold_test_4(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
221 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 4294967295, i32 0, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
222 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
223 ret void
anatofuz
parents:
diff changeset
224 }
anatofuz
parents:
diff changeset
225
anatofuz
parents:
diff changeset
226 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_5:
anatofuz
parents:
diff changeset
227 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
228 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], -1
anatofuz
parents:
diff changeset
229 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
230 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
231 define amdgpu_kernel void @bfe_i32_constant_fold_test_5(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
232 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 128, i32 7, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
233 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
234 ret void
anatofuz
parents:
diff changeset
235 }
anatofuz
parents:
diff changeset
236
anatofuz
parents:
diff changeset
237 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_6:
anatofuz
parents:
diff changeset
238 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
239 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0xffffff80
anatofuz
parents:
diff changeset
240 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
241 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
242 define amdgpu_kernel void @bfe_i32_constant_fold_test_6(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
243 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 128, i32 0, i32 8)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
244 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
245 ret void
anatofuz
parents:
diff changeset
246 }
anatofuz
parents:
diff changeset
247
anatofuz
parents:
diff changeset
248 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_7:
anatofuz
parents:
diff changeset
249 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
250 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0x7f
anatofuz
parents:
diff changeset
251 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
252 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
253 define amdgpu_kernel void @bfe_i32_constant_fold_test_7(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
254 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 127, i32 0, i32 8)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
255 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
256 ret void
anatofuz
parents:
diff changeset
257 }
anatofuz
parents:
diff changeset
258
anatofuz
parents:
diff changeset
259 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_8:
anatofuz
parents:
diff changeset
260 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
261 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 1
anatofuz
parents:
diff changeset
262 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
263 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
264 define amdgpu_kernel void @bfe_i32_constant_fold_test_8(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
265 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 127, i32 6, i32 8)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
266 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
267 ret void
anatofuz
parents:
diff changeset
268 }
anatofuz
parents:
diff changeset
269
anatofuz
parents:
diff changeset
270 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_9:
anatofuz
parents:
diff changeset
271 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
272 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 1
anatofuz
parents:
diff changeset
273 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
274 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
275 define amdgpu_kernel void @bfe_i32_constant_fold_test_9(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
276 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 65536, i32 16, i32 8)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
277 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
278 ret void
anatofuz
parents:
diff changeset
279 }
anatofuz
parents:
diff changeset
280
anatofuz
parents:
diff changeset
281 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_10:
anatofuz
parents:
diff changeset
282 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
283 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
anatofuz
parents:
diff changeset
284 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
285 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
286 define amdgpu_kernel void @bfe_i32_constant_fold_test_10(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
287 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 65535, i32 16, i32 16)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
288 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
289 ret void
anatofuz
parents:
diff changeset
290 }
anatofuz
parents:
diff changeset
291
anatofuz
parents:
diff changeset
292 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_11:
anatofuz
parents:
diff changeset
293 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
294 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], -6
anatofuz
parents:
diff changeset
295 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
296 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
297 define amdgpu_kernel void @bfe_i32_constant_fold_test_11(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
298 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 160, i32 4, i32 4)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
299 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
300 ret void
anatofuz
parents:
diff changeset
301 }
anatofuz
parents:
diff changeset
302
anatofuz
parents:
diff changeset
303 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_12:
anatofuz
parents:
diff changeset
304 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
305 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
anatofuz
parents:
diff changeset
306 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
307 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
308 define amdgpu_kernel void @bfe_i32_constant_fold_test_12(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
309 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 160, i32 31, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
310 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
311 ret void
anatofuz
parents:
diff changeset
312 }
anatofuz
parents:
diff changeset
313
anatofuz
parents:
diff changeset
314 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_13:
anatofuz
parents:
diff changeset
315 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
316 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 1
anatofuz
parents:
diff changeset
317 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
318 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
319 define amdgpu_kernel void @bfe_i32_constant_fold_test_13(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
320 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 131070, i32 16, i32 16)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
321 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
322 ret void
anatofuz
parents:
diff changeset
323 }
anatofuz
parents:
diff changeset
324
anatofuz
parents:
diff changeset
325 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_14:
anatofuz
parents:
diff changeset
326 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
327 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 40
anatofuz
parents:
diff changeset
328 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
329 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
330 define amdgpu_kernel void @bfe_i32_constant_fold_test_14(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
331 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 160, i32 2, i32 30)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
332 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
333 ret void
anatofuz
parents:
diff changeset
334 }
anatofuz
parents:
diff changeset
335
anatofuz
parents:
diff changeset
336 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_15:
anatofuz
parents:
diff changeset
337 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
338 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 10
anatofuz
parents:
diff changeset
339 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
340 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
341 define amdgpu_kernel void @bfe_i32_constant_fold_test_15(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
342 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 160, i32 4, i32 28)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
343 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
344 ret void
anatofuz
parents:
diff changeset
345 }
anatofuz
parents:
diff changeset
346
anatofuz
parents:
diff changeset
347 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_16:
anatofuz
parents:
diff changeset
348 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
349 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], -1
anatofuz
parents:
diff changeset
350 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
351 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
352 define amdgpu_kernel void @bfe_i32_constant_fold_test_16(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
353 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 4294967295, i32 1, i32 7)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
354 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
355 ret void
anatofuz
parents:
diff changeset
356 }
anatofuz
parents:
diff changeset
357
anatofuz
parents:
diff changeset
358 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_17:
anatofuz
parents:
diff changeset
359 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
360 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0x7f
anatofuz
parents:
diff changeset
361 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
362 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
363 define amdgpu_kernel void @bfe_i32_constant_fold_test_17(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
364 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 255, i32 1, i32 31)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
365 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
366 ret void
anatofuz
parents:
diff changeset
367 }
anatofuz
parents:
diff changeset
368
anatofuz
parents:
diff changeset
369 ; GCN-LABEL: {{^}}bfe_i32_constant_fold_test_18:
anatofuz
parents:
diff changeset
370 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
371 ; GCN: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
anatofuz
parents:
diff changeset
372 ; GCN: buffer_store_dword [[VREG]],
anatofuz
parents:
diff changeset
373 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
374 define amdgpu_kernel void @bfe_i32_constant_fold_test_18(ptr addrspace(1) %out) #0 {
150
anatofuz
parents:
diff changeset
375 %bfe_i32 = call i32 @llvm.amdgcn.sbfe.i32(i32 255, i32 31, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
376 store i32 %bfe_i32, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
377 ret void
anatofuz
parents:
diff changeset
378 }
anatofuz
parents:
diff changeset
379
anatofuz
parents:
diff changeset
380 ; GCN-LABEL: {{^}}bfe_sext_in_reg_i24:
anatofuz
parents:
diff changeset
381 ; GCN: buffer_load_dword [[LOAD:v[0-9]+]],
anatofuz
parents:
diff changeset
382 ; GCN-NOT: v_lshl
anatofuz
parents:
diff changeset
383 ; GCN-NOT: v_ashr
anatofuz
parents:
diff changeset
384 ; GCN: v_bfe_i32 [[BFE:v[0-9]+]], [[LOAD]], 0, 24
anatofuz
parents:
diff changeset
385 ; GCN: buffer_store_dword [[BFE]],
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
386 define amdgpu_kernel void @bfe_sext_in_reg_i24(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
387 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
388 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %x, i32 0, i32 24)
anatofuz
parents:
diff changeset
389 %shl = shl i32 %bfe, 8
anatofuz
parents:
diff changeset
390 %ashr = ashr i32 %shl, 8
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
391 store i32 %ashr, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
392 ret void
anatofuz
parents:
diff changeset
393 }
anatofuz
parents:
diff changeset
394
anatofuz
parents:
diff changeset
395 ; GCN-LABEL: @simplify_demanded_bfe_sdiv
anatofuz
parents:
diff changeset
396 ; GCN: buffer_load_dword [[LOAD:v[0-9]+]]
anatofuz
parents:
diff changeset
397 ; GCN: v_bfe_i32 [[BFE:v[0-9]+]], [[LOAD]], 1, 16
anatofuz
parents:
diff changeset
398 ; GCN: v_lshrrev_b32_e32 [[TMP0:v[0-9]+]], 31, [[BFE]]
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
399 ; GCN: v_add_{{[iu]}}32_e32 [[TMP1:v[0-9]+]], vcc, [[BFE]], [[TMP0]]
150
anatofuz
parents:
diff changeset
400 ; GCN: v_ashrrev_i32_e32 [[TMP2:v[0-9]+]], 1, [[TMP1]]
anatofuz
parents:
diff changeset
401 ; GCN: buffer_store_dword [[TMP2]]
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
402 define amdgpu_kernel void @simplify_demanded_bfe_sdiv(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
403 %src = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
404 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %src, i32 1, i32 16)
anatofuz
parents:
diff changeset
405 %div = sdiv i32 %bfe, 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
406 store i32 %div, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
407 ret void
anatofuz
parents:
diff changeset
408 }
anatofuz
parents:
diff changeset
409
anatofuz
parents:
diff changeset
410 ; GCN-LABEL: {{^}}bfe_0_width:
anatofuz
parents:
diff changeset
411 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
412 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
413 define amdgpu_kernel void @bfe_0_width(ptr addrspace(1) %out, ptr addrspace(1) %ptr) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
414 %load = load i32, ptr addrspace(1) %ptr, align 4
150
anatofuz
parents:
diff changeset
415 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %load, i32 8, i32 0)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
416 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
417 ret void
anatofuz
parents:
diff changeset
418 }
anatofuz
parents:
diff changeset
419
anatofuz
parents:
diff changeset
420 ; GCN-LABEL: {{^}}bfe_8_bfe_8:
anatofuz
parents:
diff changeset
421 ; GCN: v_bfe_i32
anatofuz
parents:
diff changeset
422 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
423 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
424 define amdgpu_kernel void @bfe_8_bfe_8(ptr addrspace(1) %out, ptr addrspace(1) %ptr) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
425 %load = load i32, ptr addrspace(1) %ptr, align 4
150
anatofuz
parents:
diff changeset
426 %bfe0 = call i32 @llvm.amdgcn.sbfe.i32(i32 %load, i32 0, i32 8)
anatofuz
parents:
diff changeset
427 %bfe1 = call i32 @llvm.amdgcn.sbfe.i32(i32 %bfe0, i32 0, i32 8)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
428 store i32 %bfe1, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
429 ret void
anatofuz
parents:
diff changeset
430 }
anatofuz
parents:
diff changeset
431
anatofuz
parents:
diff changeset
432 ; GCN-LABEL: {{^}}bfe_8_bfe_16:
anatofuz
parents:
diff changeset
433 ; GCN: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8
anatofuz
parents:
diff changeset
434 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
435 define amdgpu_kernel void @bfe_8_bfe_16(ptr addrspace(1) %out, ptr addrspace(1) %ptr) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
436 %load = load i32, ptr addrspace(1) %ptr, align 4
150
anatofuz
parents:
diff changeset
437 %bfe0 = call i32 @llvm.amdgcn.sbfe.i32(i32 %load, i32 0, i32 8)
anatofuz
parents:
diff changeset
438 %bfe1 = call i32 @llvm.amdgcn.sbfe.i32(i32 %bfe0, i32 0, i32 16)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
439 store i32 %bfe1, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
440 ret void
anatofuz
parents:
diff changeset
441 }
anatofuz
parents:
diff changeset
442
anatofuz
parents:
diff changeset
443 ; This really should be folded into 1
anatofuz
parents:
diff changeset
444 ; GCN-LABEL: {{^}}bfe_16_bfe_8:
anatofuz
parents:
diff changeset
445 ; GCN: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8
anatofuz
parents:
diff changeset
446 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
447 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
448 define amdgpu_kernel void @bfe_16_bfe_8(ptr addrspace(1) %out, ptr addrspace(1) %ptr) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
449 %load = load i32, ptr addrspace(1) %ptr, align 4
150
anatofuz
parents:
diff changeset
450 %bfe0 = call i32 @llvm.amdgcn.sbfe.i32(i32 %load, i32 0, i32 16)
anatofuz
parents:
diff changeset
451 %bfe1 = call i32 @llvm.amdgcn.sbfe.i32(i32 %bfe0, i32 0, i32 8)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
452 store i32 %bfe1, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
453 ret void
anatofuz
parents:
diff changeset
454 }
anatofuz
parents:
diff changeset
455
anatofuz
parents:
diff changeset
456 ; Make sure there isn't a redundant BFE
anatofuz
parents:
diff changeset
457 ; GCN-LABEL: {{^}}sext_in_reg_i8_to_i32_bfe:
anatofuz
parents:
diff changeset
458 ; GCN: s_sext_i32_i8 s{{[0-9]+}}, s{{[0-9]+}}
anatofuz
parents:
diff changeset
459 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
460 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
461 define amdgpu_kernel void @sext_in_reg_i8_to_i32_bfe(ptr addrspace(1) %out, i32 %a, i32 %b) #0 {
150
anatofuz
parents:
diff changeset
462 %c = add i32 %a, %b ; add to prevent folding into extload
anatofuz
parents:
diff changeset
463 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %c, i32 0, i32 8)
anatofuz
parents:
diff changeset
464 %shl = shl i32 %bfe, 24
anatofuz
parents:
diff changeset
465 %ashr = ashr i32 %shl, 24
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
466 store i32 %ashr, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
467 ret void
anatofuz
parents:
diff changeset
468 }
anatofuz
parents:
diff changeset
469
anatofuz
parents:
diff changeset
470 ; GCN-LABEL: {{^}}sext_in_reg_i8_to_i32_bfe_wrong:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
471 define amdgpu_kernel void @sext_in_reg_i8_to_i32_bfe_wrong(ptr addrspace(1) %out, i32 %a, i32 %b) #0 {
150
anatofuz
parents:
diff changeset
472 %c = add i32 %a, %b ; add to prevent folding into extload
anatofuz
parents:
diff changeset
473 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %c, i32 8, i32 0)
anatofuz
parents:
diff changeset
474 %shl = shl i32 %bfe, 24
anatofuz
parents:
diff changeset
475 %ashr = ashr i32 %shl, 24
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
476 store i32 %ashr, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
477 ret void
anatofuz
parents:
diff changeset
478 }
anatofuz
parents:
diff changeset
479
anatofuz
parents:
diff changeset
480 ; GCN-LABEL: {{^}}sextload_i8_to_i32_bfe:
anatofuz
parents:
diff changeset
481 ; GCN: buffer_load_sbyte
anatofuz
parents:
diff changeset
482 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
483 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
484 define amdgpu_kernel void @sextload_i8_to_i32_bfe(ptr addrspace(1) %out, ptr addrspace(1) %ptr) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
485 %load = load i8, ptr addrspace(1) %ptr, align 1
150
anatofuz
parents:
diff changeset
486 %sext = sext i8 %load to i32
anatofuz
parents:
diff changeset
487 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %sext, i32 0, i32 8)
anatofuz
parents:
diff changeset
488 %shl = shl i32 %bfe, 24
anatofuz
parents:
diff changeset
489 %ashr = ashr i32 %shl, 24
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
490 store i32 %ashr, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
491 ret void
anatofuz
parents:
diff changeset
492 }
anatofuz
parents:
diff changeset
493
anatofuz
parents:
diff changeset
494 ; GCN: .text
anatofuz
parents:
diff changeset
495 ; GCN-LABEL: {{^}}sextload_i8_to_i32_bfe_0:{{.*$}}
anatofuz
parents:
diff changeset
496 ; GCN-NOT: {{[^@]}}bfe
anatofuz
parents:
diff changeset
497 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
498 define amdgpu_kernel void @sextload_i8_to_i32_bfe_0(ptr addrspace(1) %out, ptr addrspace(1) %ptr) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
499 %load = load i8, ptr addrspace(1) %ptr, align 1
150
anatofuz
parents:
diff changeset
500 %sext = sext i8 %load to i32
anatofuz
parents:
diff changeset
501 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %sext, i32 8, i32 0)
anatofuz
parents:
diff changeset
502 %shl = shl i32 %bfe, 24
anatofuz
parents:
diff changeset
503 %ashr = ashr i32 %shl, 24
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
504 store i32 %ashr, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
505 ret void
anatofuz
parents:
diff changeset
506 }
anatofuz
parents:
diff changeset
507
anatofuz
parents:
diff changeset
508 ; GCN-LABEL: {{^}}sext_in_reg_i1_bfe_offset_0:
anatofuz
parents:
diff changeset
509 ; GCN-NOT: shr
anatofuz
parents:
diff changeset
510 ; GCN-NOT: shl
anatofuz
parents:
diff changeset
511 ; GCN: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 1
anatofuz
parents:
diff changeset
512 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
513 define amdgpu_kernel void @sext_in_reg_i1_bfe_offset_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
514 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
515 %shl = shl i32 %x, 31
anatofuz
parents:
diff changeset
516 %shr = ashr i32 %shl, 31
anatofuz
parents:
diff changeset
517 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %shr, i32 0, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
518 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
519 ret void
anatofuz
parents:
diff changeset
520 }
anatofuz
parents:
diff changeset
521
anatofuz
parents:
diff changeset
522 ; GCN-LABEL: {{^}}sext_in_reg_i1_bfe_offset_1:
anatofuz
parents:
diff changeset
523 ; GCN: buffer_load_dword
anatofuz
parents:
diff changeset
524 ; GCN-NOT: shl
anatofuz
parents:
diff changeset
525 ; GCN-NOT: shr
anatofuz
parents:
diff changeset
526 ; GCN: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 1, 1
anatofuz
parents:
diff changeset
527 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
528 define amdgpu_kernel void @sext_in_reg_i1_bfe_offset_1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
529 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
530 %shl = shl i32 %x, 30
anatofuz
parents:
diff changeset
531 %shr = ashr i32 %shl, 30
anatofuz
parents:
diff changeset
532 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %shr, i32 1, i32 1)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
533 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
534 ret void
anatofuz
parents:
diff changeset
535 }
anatofuz
parents:
diff changeset
536
anatofuz
parents:
diff changeset
537 ; GCN-LABEL: {{^}}sext_in_reg_i2_bfe_offset_1:
anatofuz
parents:
diff changeset
538 ; GCN: buffer_load_dword
anatofuz
parents:
diff changeset
539 ; GCN-NOT: v_lshl
anatofuz
parents:
diff changeset
540 ; GCN-NOT: v_ashr
anatofuz
parents:
diff changeset
541 ; GCN: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 2
anatofuz
parents:
diff changeset
542 ; GCN: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 1, 2
anatofuz
parents:
diff changeset
543 ; GCN: s_endpgm
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
544 define amdgpu_kernel void @sext_in_reg_i2_bfe_offset_1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
545 %x = load i32, ptr addrspace(1) %in, align 4
150
anatofuz
parents:
diff changeset
546 %shl = shl i32 %x, 30
anatofuz
parents:
diff changeset
547 %shr = ashr i32 %shl, 30
anatofuz
parents:
diff changeset
548 %bfe = call i32 @llvm.amdgcn.sbfe.i32(i32 %shr, i32 1, i32 2)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
549 store i32 %bfe, ptr addrspace(1) %out, align 4
150
anatofuz
parents:
diff changeset
550 ret void
anatofuz
parents:
diff changeset
551 }
anatofuz
parents:
diff changeset
552
anatofuz
parents:
diff changeset
553 declare i32 @llvm.amdgcn.sbfe.i32(i32, i32, i32) #1
anatofuz
parents:
diff changeset
554
anatofuz
parents:
diff changeset
555 attributes #0 = { nounwind }
anatofuz
parents:
diff changeset
556 attributes #1 = { nounwind readnone }