summaryrefslogtreecommitdiffstats
path: root/llvm/test/Verifier/non-integral-pointers.ll
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-07-28 23:43:38 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-07-28 23:43:38 +0000
commitc6af5ead8696f066fd5ec2978b9fc071ddf88a42 (patch)
tree7f59237be705b684b8d92accac499f2c5d22a30b /llvm/test/Verifier/non-integral-pointers.ll
parentaa3506c5f0b68624895e9643824a52dafaf8ab80 (diff)
downloadbcm5719-llvm-c6af5ead8696f066fd5ec2978b9fc071ddf88a42.tar.gz
bcm5719-llvm-c6af5ead8696f066fd5ec2978b9fc071ddf88a42.zip
[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 llvm-svn: 277085
Diffstat (limited to 'llvm/test/Verifier/non-integral-pointers.ll')
-rw-r--r--llvm/test/Verifier/non-integral-pointers.ll45
1 files changed, 45 insertions, 0 deletions
diff --git a/llvm/test/Verifier/non-integral-pointers.ll b/llvm/test/Verifier/non-integral-pointers.ll
new file mode 100644
index 00000000000..221dd350522
--- /dev/null
+++ b/llvm/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
+}
OpenPOWER on IntegriCloud