diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-07-28 23:43:38 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-07-28 23:43:38 +0000 |
commit | 1c20b71db84da88acac366d738f5afbec70e71db (patch) | |
tree | 371c13b8c5708fb3ed77df31091658aa6ff3d7a2 /test/Verifier | |
parent | b17a45cae01a7fddb0cd509e1074fe7a9d2c81b1 (diff) |
[IR] Introduce a non-integral pointer type
Summary:
This change adds a `ni` specifier in the `datalayout` string to denote
pointers in some given address spaces as "non-integral", and adds some
typing rules around these special pointers.
Reviewers: majnemer, chandlerc, atrick, dberlin, eli.friedman, tstellarAMD, arsenm
Subscribers: arsenm, mcrosier, llvm-commits
Differential Revision: https://reviews.llvm.org/D22488
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277085 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Verifier')
-rw-r--r-- | test/Verifier/non-integral-pointers.ll | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/test/Verifier/non-integral-pointers.ll b/test/Verifier/non-integral-pointers.ll new file mode 100644 index 000000000000..221dd3505224 --- /dev/null +++ b/test/Verifier/non-integral-pointers.ll @@ -0,0 +1,45 @@ +; RUN: not opt -verify < %s 2>&1 | FileCheck %s + +target datalayout = "e-ni:4:6" + +define i64 @f_0(i8 addrspace(4)* %ptr) { +; CHECK: ptrtoint not supported for non-integral pointers + %val = ptrtoint i8 addrspace(4)* %ptr to i64 + ret i64 %val +} + +define <4 x i64> @f_1(<4 x i8 addrspace(4)*> %ptr) { +; CHECK: ptrtoint not supported for non-integral pointers + %val = ptrtoint <4 x i8 addrspace(4)*> %ptr to <4 x i64> + ret <4 x i64> %val +} + +define i64 @f_2(i8 addrspace(3)* %ptr) { +; Negative test + %val = ptrtoint i8 addrspace(3)* %ptr to i64 + ret i64 %val +} + +define i8 addrspace(4)* @f_3(i64 %integer) { +; CHECK: inttoptr not supported for non-integral pointers + %val = inttoptr i64 %integer to i8 addrspace(4)* + ret i8 addrspace(4)* %val +} + +define <4 x i8 addrspace(4)*> @f_4(<4 x i64> %integer) { +; CHECK: inttoptr not supported for non-integral pointers + %val = inttoptr <4 x i64> %integer to <4 x i8 addrspace(4)*> + ret <4 x i8 addrspace(4)*> %val +} + +define i8 addrspace(3)* @f_5(i64 %integer) { +; Negative test + %val = inttoptr i64 %integer to i8 addrspace(3)* + ret i8 addrspace(3)* %val +} + +define i64 @f_6(i8 addrspace(6)* %ptr) { +; CHECK: ptrtoint not supported for non-integral pointers + %val = ptrtoint i8 addrspace(6)* %ptr to i64 + ret i64 %val +} |