diff --git a/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-pointer-ops.ll b/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-pointer-ops.ll index 63c0463149b79..e1c22edfc01cf 100644 --- a/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-pointer-ops.ll +++ b/llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-pointer-ops.ll @@ -1,6 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 -; RUN: opt -S -mcpu=gfx900 -amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s -; RUN: opt -S -mcpu=gfx900 -passes=amdgpu-lower-buffer-fat-pointers < %s | FileCheck %s +; FIXME: Currently generates invalid IR for ptrtoaddr +; RUN: opt -S -mcpu=gfx900 -amdgpu-lower-buffer-fat-pointers -disable-verify < %s | FileCheck %s +; RUN: opt -S -mcpu=gfx900 -passes=amdgpu-lower-buffer-fat-pointers -disable-verify < %s | FileCheck %s target triple = "amdgcn--" @@ -255,6 +256,56 @@ define i32 @ptrtoint_offset(ptr addrspace(7) %ptr) { ret i32 %ret } +;; FIXME: this currently generates invalid IR +define i32 @ptrtoaddr(ptr addrspace(7) %ptr) { +; CHECK-LABEL: define i32 @ptrtoaddr +; CHECK-SAME: ({ ptr addrspace(8), i32 } [[PTR:%.*]]) #[[ATTR0]] { +; CHECK-NEXT: [[RET:%.*]] = ptrtoaddr { ptr addrspace(8), i32 } [[PTR]] to i32 +; CHECK-NEXT: ret i32 [[RET]] +; + %ret = ptrtoaddr ptr addrspace(7) %ptr to i32 + ret i32 %ret +} + +;; FIXME: this currently generates invalid IR +define <2 x i32> @ptrtoaddr_vec(<2 x ptr addrspace(7)> %ptr) { +; CHECK-LABEL: define <2 x i32> @ptrtoaddr_vec +; CHECK-SAME: ({ <2 x ptr addrspace(8)>, <2 x i32> } [[PTR:%.*]]) #[[ATTR0]] { +; CHECK-NEXT: [[RET:%.*]] = ptrtoaddr { <2 x ptr addrspace(8)>, <2 x i32> } [[PTR]] to <2 x i32> +; CHECK-NEXT: ret <2 x i32> [[RET]] +; + %ret = ptrtoaddr <2 x ptr addrspace(7)> %ptr to <2 x i32> + ret <2 x i32> %ret +} + +;; Check that we extend the offset to i160. +;; FIXME: this currently generates invalid IR +define i160 @ptrtoaddr_ext(ptr addrspace(7) %ptr) { +; CHECK-LABEL: define i160 @ptrtoaddr_ext +; CHECK-SAME: ({ ptr addrspace(8), i32 } [[PTR:%.*]]) #[[ATTR0]] { +; CHECK-NEXT: [[ADDR:%.*]] = ptrtoaddr { ptr addrspace(8), i32 } [[PTR]] to i32 +; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[ADDR]] to i160 +; CHECK-NEXT: ret i160 [[EXT]] +; + %addr = ptrtoaddr ptr addrspace(7) %ptr to i32 + %ext = zext i32 %addr to i160 + ret i160 %ext +} + +;; FIXME: this currently generates invalid IR +;; Check that we truncate the offset to i16. +define i16 @ptrtoaddr_trunc(ptr addrspace(7) %ptr) { +; CHECK-LABEL: define i16 @ptrtoaddr_trunc +; CHECK-SAME: ({ ptr addrspace(8), i32 } [[PTR:%.*]]) #[[ATTR0]] { +; CHECK-NEXT: [[ADDR:%.*]] = ptrtoaddr { ptr addrspace(8), i32 } [[PTR]] to i32 +; CHECK-NEXT: [[TRUNC:%.*]] = trunc i32 [[ADDR]] to i16 +; CHECK-NEXT: ret i16 [[TRUNC]] +; + %addr = ptrtoaddr ptr addrspace(7) %ptr to i32 + %trunc = trunc i32 %addr to i16 + ret i16 %trunc +} + define ptr addrspace(7) @inttoptr(i160 %v) { ; CHECK-LABEL: define { ptr addrspace(8), i32 } @inttoptr ; CHECK-SAME: (i160 [[V:%.*]]) #[[ATTR0]] {