comparison test/CodeGen/AMDGPU/llvm.AMDGPU.bfe.i32.ll @ 95:afa8332a0e37

LLVM 3.8
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 13 Oct 2015 17:48:58 +0900
parents
children
comparison
equal deleted inserted replaced
84:f3e34b893a5f 95:afa8332a0e37
1 ; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
3 ; RUN: llc -march=r600 -mcpu=redwood -show-mc-encoding -verify-machineinstrs < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4
5 declare i32 @llvm.AMDGPU.bfe.i32(i32, i32, i32) nounwind readnone
6
7 ; FUNC-LABEL: {{^}}bfe_i32_arg_arg_arg:
8 ; SI: v_bfe_i32
9 ; EG: BFE_INT
10 ; EG: encoding: [{{[x0-9a-f]+,[x0-9a-f]+,[x0-9a-f]+,[x0-9a-f]+,[x0-9a-f]+}},0xac
11 define void @bfe_i32_arg_arg_arg(i32 addrspace(1)* %out, i32 %src0, i32 %src1, i32 %src2) nounwind {
12 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 %src1, i32 %src1) nounwind readnone
13 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
14 ret void
15 }
16
17 ; FUNC-LABEL: {{^}}bfe_i32_arg_arg_imm:
18 ; SI: v_bfe_i32
19 ; EG: BFE_INT
20 define void @bfe_i32_arg_arg_imm(i32 addrspace(1)* %out, i32 %src0, i32 %src1) nounwind {
21 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 %src1, i32 123) nounwind readnone
22 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
23 ret void
24 }
25
26 ; FUNC-LABEL: {{^}}bfe_i32_arg_imm_arg:
27 ; SI: v_bfe_i32
28 ; EG: BFE_INT
29 define void @bfe_i32_arg_imm_arg(i32 addrspace(1)* %out, i32 %src0, i32 %src2) nounwind {
30 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 123, i32 %src2) nounwind readnone
31 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
32 ret void
33 }
34
35 ; FUNC-LABEL: {{^}}bfe_i32_imm_arg_arg:
36 ; SI: v_bfe_i32
37 ; EG: BFE_INT
38 define void @bfe_i32_imm_arg_arg(i32 addrspace(1)* %out, i32 %src1, i32 %src2) nounwind {
39 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 123, i32 %src1, i32 %src2) nounwind readnone
40 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
41 ret void
42 }
43
44 ; FUNC-LABEL: {{^}}v_bfe_print_arg:
45 ; SI: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 2, 8
46 define void @v_bfe_print_arg(i32 addrspace(1)* %out, i32 addrspace(1)* %src0) nounwind {
47 %load = load i32, i32 addrspace(1)* %src0, align 4
48 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %load, i32 2, i32 8) nounwind readnone
49 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
50 ret void
51 }
52
53 ; FUNC-LABEL: {{^}}bfe_i32_arg_0_width_reg_offset:
54 ; SI-NOT: {{[^@]}}bfe
55 ; SI: s_endpgm
56 ; EG-NOT: BFE
57 define void @bfe_i32_arg_0_width_reg_offset(i32 addrspace(1)* %out, i32 %src0, i32 %src1) nounwind {
58 %bfe_u32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 %src1, i32 0) nounwind readnone
59 store i32 %bfe_u32, i32 addrspace(1)* %out, align 4
60 ret void
61 }
62
63 ; FUNC-LABEL: {{^}}bfe_i32_arg_0_width_imm_offset:
64 ; SI-NOT: {{[^@]}}bfe
65 ; SI: s_endpgm
66 ; EG-NOT: BFE
67 define void @bfe_i32_arg_0_width_imm_offset(i32 addrspace(1)* %out, i32 %src0, i32 %src1) nounwind {
68 %bfe_u32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 8, i32 0) nounwind readnone
69 store i32 %bfe_u32, i32 addrspace(1)* %out, align 4
70 ret void
71 }
72
73 ; FUNC-LABEL: {{^}}bfe_i32_test_6:
74 ; SI: v_lshlrev_b32_e32 v{{[0-9]+}}, 31, v{{[0-9]+}}
75 ; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 1, v{{[0-9]+}}
76 ; SI: s_endpgm
77 define void @bfe_i32_test_6(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
78 %x = load i32, i32 addrspace(1)* %in, align 4
79 %shl = shl i32 %x, 31
80 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 1, i32 31)
81 store i32 %bfe, i32 addrspace(1)* %out, align 4
82 ret void
83 }
84
85 ; FUNC-LABEL: {{^}}bfe_i32_test_7:
86 ; SI-NOT: shl
87 ; SI-NOT: {{[^@]}}bfe
88 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
89 ; SI: buffer_store_dword [[VREG]],
90 ; SI: s_endpgm
91 define void @bfe_i32_test_7(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
92 %x = load i32, i32 addrspace(1)* %in, align 4
93 %shl = shl i32 %x, 31
94 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 0, i32 31)
95 store i32 %bfe, i32 addrspace(1)* %out, align 4
96 ret void
97 }
98
99 ; FUNC-LABEL: {{^}}bfe_i32_test_8:
100 ; SI: buffer_load_dword
101 ; SI: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 1
102 ; SI: s_endpgm
103 define void @bfe_i32_test_8(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
104 %x = load i32, i32 addrspace(1)* %in, align 4
105 %shl = shl i32 %x, 31
106 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 31, i32 1)
107 store i32 %bfe, i32 addrspace(1)* %out, align 4
108 ret void
109 }
110
111 ; FUNC-LABEL: {{^}}bfe_i32_test_9:
112 ; SI-NOT: {{[^@]}}bfe
113 ; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, v{{[0-9]+}}
114 ; SI-NOT: {{[^@]}}bfe
115 ; SI: s_endpgm
116 define void @bfe_i32_test_9(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
117 %x = load i32, i32 addrspace(1)* %in, align 4
118 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 31, i32 1)
119 store i32 %bfe, i32 addrspace(1)* %out, align 4
120 ret void
121 }
122
123 ; FUNC-LABEL: {{^}}bfe_i32_test_10:
124 ; SI-NOT: {{[^@]}}bfe
125 ; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 1, v{{[0-9]+}}
126 ; SI-NOT: {{[^@]}}bfe
127 ; SI: s_endpgm
128 define void @bfe_i32_test_10(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
129 %x = load i32, i32 addrspace(1)* %in, align 4
130 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 1, i32 31)
131 store i32 %bfe, i32 addrspace(1)* %out, align 4
132 ret void
133 }
134
135 ; FUNC-LABEL: {{^}}bfe_i32_test_11:
136 ; SI-NOT: {{[^@]}}bfe
137 ; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 8, v{{[0-9]+}}
138 ; SI-NOT: {{[^@]}}bfe
139 ; SI: s_endpgm
140 define void @bfe_i32_test_11(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
141 %x = load i32, i32 addrspace(1)* %in, align 4
142 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 8, i32 24)
143 store i32 %bfe, i32 addrspace(1)* %out, align 4
144 ret void
145 }
146
147 ; FUNC-LABEL: {{^}}bfe_i32_test_12:
148 ; SI-NOT: {{[^@]}}bfe
149 ; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 24, v{{[0-9]+}}
150 ; SI-NOT: {{[^@]}}bfe
151 ; SI: s_endpgm
152 define void @bfe_i32_test_12(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
153 %x = load i32, i32 addrspace(1)* %in, align 4
154 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 24, i32 8)
155 store i32 %bfe, i32 addrspace(1)* %out, align 4
156 ret void
157 }
158
159 ; FUNC-LABEL: {{^}}bfe_i32_test_13:
160 ; SI: v_ashrrev_i32_e32 {{v[0-9]+}}, 31, {{v[0-9]+}}
161 ; SI-NOT: {{[^@]}}bfe
162 ; SI: s_endpgm
163 define void @bfe_i32_test_13(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
164 %x = load i32, i32 addrspace(1)* %in, align 4
165 %shl = ashr i32 %x, 31
166 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 31, i32 1)
167 store i32 %bfe, i32 addrspace(1)* %out, align 4 ret void
168 }
169
170 ; FUNC-LABEL: {{^}}bfe_i32_test_14:
171 ; SI-NOT: lshr
172 ; SI-NOT: {{[^@]}}bfe
173 ; SI: s_endpgm
174 define void @bfe_i32_test_14(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
175 %x = load i32, i32 addrspace(1)* %in, align 4
176 %shl = lshr i32 %x, 31
177 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 31, i32 1)
178 store i32 %bfe, i32 addrspace(1)* %out, align 4 ret void
179 }
180
181 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_0:
182 ; SI-NOT: {{[^@]}}bfe
183 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
184 ; SI: buffer_store_dword [[VREG]],
185 ; SI: s_endpgm
186 ; EG-NOT: BFE
187 define void @bfe_i32_constant_fold_test_0(i32 addrspace(1)* %out) nounwind {
188 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 0, i32 0, i32 0) nounwind readnone
189 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
190 ret void
191 }
192
193 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_1:
194 ; SI-NOT: {{[^@]}}bfe
195 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
196 ; SI: buffer_store_dword [[VREG]],
197 ; SI: s_endpgm
198 ; EG-NOT: BFE
199 define void @bfe_i32_constant_fold_test_1(i32 addrspace(1)* %out) nounwind {
200 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 12334, i32 0, i32 0) nounwind readnone
201 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
202 ret void
203 }
204
205 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_2:
206 ; SI-NOT: {{[^@]}}bfe
207 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
208 ; SI: buffer_store_dword [[VREG]],
209 ; SI: s_endpgm
210 ; EG-NOT: BFE
211 define void @bfe_i32_constant_fold_test_2(i32 addrspace(1)* %out) nounwind {
212 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 0, i32 0, i32 1) nounwind readnone
213 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
214 ret void
215 }
216
217 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_3:
218 ; SI-NOT: {{[^@]}}bfe
219 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -1
220 ; SI: buffer_store_dword [[VREG]],
221 ; SI: s_endpgm
222 ; EG-NOT: BFE
223 define void @bfe_i32_constant_fold_test_3(i32 addrspace(1)* %out) nounwind {
224 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 1, i32 0, i32 1) nounwind readnone
225 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
226 ret void
227 }
228
229 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_4:
230 ; SI-NOT: {{[^@]}}bfe
231 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -1
232 ; SI: buffer_store_dword [[VREG]],
233 ; SI: s_endpgm
234 ; EG-NOT: BFE
235 define void @bfe_i32_constant_fold_test_4(i32 addrspace(1)* %out) nounwind {
236 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 4294967295, i32 0, i32 1) nounwind readnone
237 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
238 ret void
239 }
240
241 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_5:
242 ; SI-NOT: {{[^@]}}bfe
243 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -1
244 ; SI: buffer_store_dword [[VREG]],
245 ; SI: s_endpgm
246 ; EG-NOT: BFE
247 define void @bfe_i32_constant_fold_test_5(i32 addrspace(1)* %out) nounwind {
248 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 128, i32 7, i32 1) nounwind readnone
249 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
250 ret void
251 }
252
253 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_6:
254 ; SI-NOT: {{[^@]}}bfe
255 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0xffffff80
256 ; SI: buffer_store_dword [[VREG]],
257 ; SI: s_endpgm
258 ; EG-NOT: BFE
259 define void @bfe_i32_constant_fold_test_6(i32 addrspace(1)* %out) nounwind {
260 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 128, i32 0, i32 8) nounwind readnone
261 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
262 ret void
263 }
264
265 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_7:
266 ; SI-NOT: {{[^@]}}bfe
267 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0x7f
268 ; SI: buffer_store_dword [[VREG]],
269 ; SI: s_endpgm
270 ; EG-NOT: BFE
271 define void @bfe_i32_constant_fold_test_7(i32 addrspace(1)* %out) nounwind {
272 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 127, i32 0, i32 8) nounwind readnone
273 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
274 ret void
275 }
276
277 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_8:
278 ; SI-NOT: {{[^@]}}bfe
279 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 1
280 ; SI: buffer_store_dword [[VREG]],
281 ; SI: s_endpgm
282 ; EG-NOT: BFE
283 define void @bfe_i32_constant_fold_test_8(i32 addrspace(1)* %out) nounwind {
284 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 127, i32 6, i32 8) nounwind readnone
285 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
286 ret void
287 }
288
289 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_9:
290 ; SI-NOT: {{[^@]}}bfe
291 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 1
292 ; SI: buffer_store_dword [[VREG]],
293 ; SI: s_endpgm
294 ; EG-NOT: BFE
295 define void @bfe_i32_constant_fold_test_9(i32 addrspace(1)* %out) nounwind {
296 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 65536, i32 16, i32 8) nounwind readnone
297 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
298 ret void
299 }
300
301 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_10:
302 ; SI-NOT: {{[^@]}}bfe
303 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
304 ; SI: buffer_store_dword [[VREG]],
305 ; SI: s_endpgm
306 ; EG-NOT: BFE
307 define void @bfe_i32_constant_fold_test_10(i32 addrspace(1)* %out) nounwind {
308 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 65535, i32 16, i32 16) nounwind readnone
309 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
310 ret void
311 }
312
313 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_11:
314 ; SI-NOT: {{[^@]}}bfe
315 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -6
316 ; SI: buffer_store_dword [[VREG]],
317 ; SI: s_endpgm
318 ; EG-NOT: BFE
319 define void @bfe_i32_constant_fold_test_11(i32 addrspace(1)* %out) nounwind {
320 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 160, i32 4, i32 4) nounwind readnone
321 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
322 ret void
323 }
324
325 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_12:
326 ; SI-NOT: {{[^@]}}bfe
327 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
328 ; SI: buffer_store_dword [[VREG]],
329 ; SI: s_endpgm
330 ; EG-NOT: BFE
331 define void @bfe_i32_constant_fold_test_12(i32 addrspace(1)* %out) nounwind {
332 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 160, i32 31, i32 1) nounwind readnone
333 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
334 ret void
335 }
336
337 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_13:
338 ; SI-NOT: {{[^@]}}bfe
339 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 1
340 ; SI: buffer_store_dword [[VREG]],
341 ; SI: s_endpgm
342 ; EG-NOT: BFE
343 define void @bfe_i32_constant_fold_test_13(i32 addrspace(1)* %out) nounwind {
344 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 131070, i32 16, i32 16) nounwind readnone
345 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
346 ret void
347 }
348
349 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_14:
350 ; SI-NOT: {{[^@]}}bfe
351 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 40
352 ; SI: buffer_store_dword [[VREG]],
353 ; SI: s_endpgm
354 ; EG-NOT: BFE
355 define void @bfe_i32_constant_fold_test_14(i32 addrspace(1)* %out) nounwind {
356 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 160, i32 2, i32 30) nounwind readnone
357 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
358 ret void
359 }
360
361 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_15:
362 ; SI-NOT: {{[^@]}}bfe
363 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 10
364 ; SI: buffer_store_dword [[VREG]],
365 ; SI: s_endpgm
366 ; EG-NOT: BFE
367 define void @bfe_i32_constant_fold_test_15(i32 addrspace(1)* %out) nounwind {
368 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 160, i32 4, i32 28) nounwind readnone
369 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
370 ret void
371 }
372
373 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_16:
374 ; SI-NOT: {{[^@]}}bfe
375 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -1
376 ; SI: buffer_store_dword [[VREG]],
377 ; SI: s_endpgm
378 ; EG-NOT: BFE
379 define void @bfe_i32_constant_fold_test_16(i32 addrspace(1)* %out) nounwind {
380 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 4294967295, i32 1, i32 7) nounwind readnone
381 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
382 ret void
383 }
384
385 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_17:
386 ; SI-NOT: {{[^@]}}bfe
387 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0x7f
388 ; SI: buffer_store_dword [[VREG]],
389 ; SI: s_endpgm
390 ; EG-NOT: BFE
391 define void @bfe_i32_constant_fold_test_17(i32 addrspace(1)* %out) nounwind {
392 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 255, i32 1, i32 31) nounwind readnone
393 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
394 ret void
395 }
396
397 ; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_18:
398 ; SI-NOT: {{[^@]}}bfe
399 ; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0
400 ; SI: buffer_store_dword [[VREG]],
401 ; SI: s_endpgm
402 ; EG-NOT: BFE
403 define void @bfe_i32_constant_fold_test_18(i32 addrspace(1)* %out) nounwind {
404 %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 255, i32 31, i32 1) nounwind readnone
405 store i32 %bfe_i32, i32 addrspace(1)* %out, align 4
406 ret void
407 }
408
409 ; FUNC-LABEL: {{^}}bfe_sext_in_reg_i24:
410 ; SI: buffer_load_dword [[LOAD:v[0-9]+]],
411 ; SI-NOT: v_lshl
412 ; SI-NOT: v_ashr
413 ; SI: v_bfe_i32 [[BFE:v[0-9]+]], [[LOAD]], 0, 24
414 ; SI: buffer_store_dword [[BFE]],
415 define void @bfe_sext_in_reg_i24(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
416 %x = load i32, i32 addrspace(1)* %in, align 4
417 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 0, i32 24)
418 %shl = shl i32 %bfe, 8
419 %ashr = ashr i32 %shl, 8
420 store i32 %ashr, i32 addrspace(1)* %out, align 4
421 ret void
422 }
423
424 ; FUNC-LABEL: @simplify_demanded_bfe_sdiv
425 ; SI: buffer_load_dword [[LOAD:v[0-9]+]]
426 ; SI: v_bfe_i32 [[BFE:v[0-9]+]], [[LOAD]], 1, 16
427 ; SI: v_lshrrev_b32_e32 [[TMP0:v[0-9]+]], 31, [[BFE]]
428 ; SI: v_add_i32_e32 [[TMP1:v[0-9]+]], vcc, [[TMP0]], [[BFE]]
429 ; SI: v_ashrrev_i32_e32 [[TMP2:v[0-9]+]], 1, [[TMP1]]
430 ; SI: buffer_store_dword [[TMP2]]
431 define void @simplify_demanded_bfe_sdiv(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
432 %src = load i32, i32 addrspace(1)* %in, align 4
433 %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %src, i32 1, i32 16) nounwind readnone
434 %div = sdiv i32 %bfe, 2
435 store i32 %div, i32 addrspace(1)* %out, align 4
436 ret void
437 }