|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 |
2 | | -; FIXME: Currently generates invalid IR for ptrtoaddr |
3 | | -; RUN: opt -S -mcpu=gfx900 -amdgpu-lower-buffer-fat-pointers -disable-verify < %s | FileCheck %s |
4 | | -; RUN: opt -S -mcpu=gfx900 -passes=amdgpu-lower-buffer-fat-pointers -disable-verify < %s | FileCheck %s |
| 2 | +; RUN: opt -S -mcpu=gfx900 -amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s |
| 3 | +; RUN: opt -S -mcpu=gfx900 -passes=amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s |
5 | 4 |
|
6 | 5 | target triple = "amdgcn--" |
7 | 6 |
|
@@ -256,50 +255,50 @@ define i32 @ptrtoint_offset(ptr addrspace(7) %ptr) { |
256 | 255 | ret i32 %ret |
257 | 256 | } |
258 | 257 |
|
259 | | -;; FIXME: this currently generates invalid IR |
260 | 258 | define i32 @ptrtoaddr(ptr addrspace(7) %ptr) { |
261 | 259 | ; CHECK-LABEL: define i32 @ptrtoaddr |
262 | 260 | ; CHECK-SAME: ({ ptr addrspace(8), i32 } [[PTR:%.*]]) #[[ATTR0]] { |
263 | | -; CHECK-NEXT: [[RET:%.*]] = ptrtoaddr { ptr addrspace(8), i32 } [[PTR]] to i32 |
| 261 | +; CHECK-NEXT: [[PTR_RSRC:%.*]] = extractvalue { ptr addrspace(8), i32 } [[PTR]], 0 |
| 262 | +; CHECK-NEXT: [[RET:%.*]] = extractvalue { ptr addrspace(8), i32 } [[PTR]], 1 |
264 | 263 | ; CHECK-NEXT: ret i32 [[RET]] |
265 | 264 | ; |
266 | 265 | %ret = ptrtoaddr ptr addrspace(7) %ptr to i32 |
267 | 266 | ret i32 %ret |
268 | 267 | } |
269 | 268 |
|
270 | | -;; FIXME: this currently generates invalid IR |
271 | 269 | define <2 x i32> @ptrtoaddr_vec(<2 x ptr addrspace(7)> %ptr) { |
272 | 270 | ; CHECK-LABEL: define <2 x i32> @ptrtoaddr_vec |
273 | 271 | ; CHECK-SAME: ({ <2 x ptr addrspace(8)>, <2 x i32> } [[PTR:%.*]]) #[[ATTR0]] { |
274 | | -; CHECK-NEXT: [[RET:%.*]] = ptrtoaddr { <2 x ptr addrspace(8)>, <2 x i32> } [[PTR]] to <2 x i32> |
| 272 | +; CHECK-NEXT: [[PTR_RSRC:%.*]] = extractvalue { <2 x ptr addrspace(8)>, <2 x i32> } [[PTR]], 0 |
| 273 | +; CHECK-NEXT: [[RET:%.*]] = extractvalue { <2 x ptr addrspace(8)>, <2 x i32> } [[PTR]], 1 |
275 | 274 | ; CHECK-NEXT: ret <2 x i32> [[RET]] |
276 | 275 | ; |
277 | 276 | %ret = ptrtoaddr <2 x ptr addrspace(7)> %ptr to <2 x i32> |
278 | 277 | ret <2 x i32> %ret |
279 | 278 | } |
280 | 279 |
|
281 | 280 | ;; Check that we extend the offset to i160. |
282 | | -;; FIXME: this currently generates invalid IR |
283 | 281 | define i160 @ptrtoaddr_ext(ptr addrspace(7) %ptr) { |
284 | 282 | ; CHECK-LABEL: define i160 @ptrtoaddr_ext |
285 | 283 | ; CHECK-SAME: ({ ptr addrspace(8), i32 } [[PTR:%.*]]) #[[ATTR0]] { |
286 | | -; CHECK-NEXT: [[ADDR:%.*]] = ptrtoaddr { ptr addrspace(8), i32 } [[PTR]] to i32 |
287 | | -; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[ADDR]] to i160 |
288 | | -; CHECK-NEXT: ret i160 [[EXT]] |
| 284 | +; CHECK-NEXT: [[PTR_RSRC:%.*]] = extractvalue { ptr addrspace(8), i32 } [[PTR]], 0 |
| 285 | +; CHECK-NEXT: [[PTR_OFF:%.*]] = extractvalue { ptr addrspace(8), i32 } [[PTR]], 1 |
| 286 | +; CHECK-NEXT: [[RET:%.*]] = zext i32 [[PTR_OFF]] to i160 |
| 287 | +; CHECK-NEXT: ret i160 [[RET]] |
289 | 288 | ; |
290 | 289 | %addr = ptrtoaddr ptr addrspace(7) %ptr to i32 |
291 | 290 | %ext = zext i32 %addr to i160 |
292 | 291 | ret i160 %ext |
293 | 292 | } |
294 | 293 |
|
295 | | -;; FIXME: this currently generates invalid IR |
296 | 294 | ;; Check that we truncate the offset to i16. |
297 | 295 | define i16 @ptrtoaddr_trunc(ptr addrspace(7) %ptr) { |
298 | 296 | ; CHECK-LABEL: define i16 @ptrtoaddr_trunc |
299 | 297 | ; CHECK-SAME: ({ ptr addrspace(8), i32 } [[PTR:%.*]]) #[[ATTR0]] { |
300 | | -; CHECK-NEXT: [[ADDR:%.*]] = ptrtoaddr { ptr addrspace(8), i32 } [[PTR]] to i32 |
301 | | -; CHECK-NEXT: [[TRUNC:%.*]] = trunc i32 [[ADDR]] to i16 |
302 | | -; CHECK-NEXT: ret i16 [[TRUNC]] |
| 298 | +; CHECK-NEXT: [[PTR_RSRC:%.*]] = extractvalue { ptr addrspace(8), i32 } [[PTR]], 0 |
| 299 | +; CHECK-NEXT: [[PTR_OFF:%.*]] = extractvalue { ptr addrspace(8), i32 } [[PTR]], 1 |
| 300 | +; CHECK-NEXT: [[RET:%.*]] = trunc i32 [[PTR_OFF]] to i16 |
| 301 | +; CHECK-NEXT: ret i16 [[RET]] |
303 | 302 | ; |
304 | 303 | %addr = ptrtoaddr ptr addrspace(7) %ptr to i32 |
305 | 304 | %trunc = trunc i32 %addr to i16 |
|
0 commit comments