blob: 02950bb6627049b351f5639a4dcf1e7aad9a588d [file] [log] [blame]
Yaxun Liu26f75662016-08-19 05:17:25 +00001// RUN: %clang_cc1 %s -cl-std=CL2.0 -finclude-default-header -emit-llvm -O0 -triple spir-unknown-unknown -o - | FileCheck --check-prefix=SZ32 %s
2// RUN: %clang_cc1 %s -cl-std=CL2.0 -finclude-default-header -emit-llvm -O0 -triple spir64-unknown-unknown -o - | FileCheck --check-prefix=SZ64 --check-prefix=SZ64ONLY %s
Yaxun Liuaf3d4db2017-05-23 16:15:53 +00003// RUN: %clang_cc1 %s -cl-std=CL2.0 -finclude-default-header -emit-llvm -O0 -triple amdgcn -o - | FileCheck --check-prefix=SZ64 --check-prefix=AMDONLY %s
Yaxun Liu6d96f1632017-05-18 18:51:09 +00004// RUN: %clang_cc1 %s -cl-std=CL2.0 -finclude-default-header -emit-llvm -O0 -triple amdgcn---opencl -o - | FileCheck --check-prefix=SZ64 --check-prefix=AMDONLY %s
Yaxun Liu26f75662016-08-19 05:17:25 +00005
6//SZ32: define{{.*}} i32 @test_ptrtoint_private(i8* %x)
7//SZ32: ptrtoint i8* %{{.*}} to i32
8//SZ64: define{{.*}} i64 @test_ptrtoint_private(i8* %x)
9//SZ64: ptrtoint i8* %{{.*}} to i64
10size_t test_ptrtoint_private(private char* x) {
11 return (size_t)x;
12}
13
14//SZ32: define{{.*}} i32 @test_ptrtoint_global(i8 addrspace(1)* %x)
15//SZ32: ptrtoint i8 addrspace(1)* %{{.*}} to i32
16//SZ64: define{{.*}} i64 @test_ptrtoint_global(i8 addrspace(1)* %x)
17//SZ64: ptrtoint i8 addrspace(1)* %{{.*}} to i64
18intptr_t test_ptrtoint_global(global char* x) {
19 return (intptr_t)x;
20}
21
22//SZ32: define{{.*}} i32 @test_ptrtoint_constant(i8 addrspace(2)* %x)
23//SZ32: ptrtoint i8 addrspace(2)* %{{.*}} to i32
24//SZ64: define{{.*}} i64 @test_ptrtoint_constant(i8 addrspace(2)* %x)
25//SZ64: ptrtoint i8 addrspace(2)* %{{.*}} to i64
26uintptr_t test_ptrtoint_constant(constant char* x) {
27 return (uintptr_t)x;
28}
29
30//SZ32: define{{.*}} i32 @test_ptrtoint_local(i8 addrspace(3)* %x)
31//SZ32: ptrtoint i8 addrspace(3)* %{{.*}} to i32
32//SZ64: define{{.*}} i64 @test_ptrtoint_local(i8 addrspace(3)* %x)
33//SZ64: ptrtoint i8 addrspace(3)* %{{.*}} to i64
34size_t test_ptrtoint_local(local char* x) {
35 return (size_t)x;
36}
37
38//SZ32: define{{.*}} i32 @test_ptrtoint_generic(i8 addrspace(4)* %x)
39//SZ32: ptrtoint i8 addrspace(4)* %{{.*}} to i32
40//SZ64: define{{.*}} i64 @test_ptrtoint_generic(i8 addrspace(4)* %x)
41//SZ64: ptrtoint i8 addrspace(4)* %{{.*}} to i64
42size_t test_ptrtoint_generic(generic char* x) {
43 return (size_t)x;
44}
45
46//SZ32: define{{.*}} i8* @test_inttoptr_private(i32 %x)
47//SZ32: inttoptr i32 %{{.*}} to i8*
48//SZ64: define{{.*}} i8* @test_inttoptr_private(i64 %x)
49//AMDONLY: trunc i64 %{{.*}} to i32
50//AMDONLY: inttoptr i32 %{{.*}} to i8*
51//SZ64ONLY: inttoptr i64 %{{.*}} to i8*
52private char* test_inttoptr_private(size_t x) {
53 return (private char*)x;
54}
55
56//SZ32: define{{.*}} i8 addrspace(1)* @test_inttoptr_global(i32 %x)
57//SZ32: inttoptr i32 %{{.*}} to i8 addrspace(1)*
58//SZ64: define{{.*}} i8 addrspace(1)* @test_inttoptr_global(i64 %x)
59//SZ64: inttoptr i64 %{{.*}} to i8 addrspace(1)*
60global char* test_inttoptr_global(size_t x) {
61 return (global char*)x;
62}
63
64//SZ32: define{{.*}} i8 addrspace(3)* @test_add_local(i8 addrspace(3)* %x, i32 %y)
65//SZ32: getelementptr inbounds i8, i8 addrspace(3)* %{{.*}}, i32
66//SZ64: define{{.*}} i8 addrspace(3)* @test_add_local(i8 addrspace(3)* %x, i64 %y)
67//AMDONLY: trunc i64 %{{.*}} to i32
68//AMDONLY: getelementptr inbounds i8, i8 addrspace(3)* %{{.*}}, i32
69//SZ64ONLY: getelementptr inbounds i8, i8 addrspace(3)* %{{.*}}, i64
70local char* test_add_local(local char* x, ptrdiff_t y) {
71 return x + y;
72}
73
74//SZ32: define{{.*}} i8 addrspace(1)* @test_add_global(i8 addrspace(1)* %x, i32 %y)
75//SZ32: getelementptr inbounds i8, i8 addrspace(1)* %{{.*}}, i32
76//SZ64: define{{.*}} i8 addrspace(1)* @test_add_global(i8 addrspace(1)* %x, i64 %y)
77//SZ64: getelementptr inbounds i8, i8 addrspace(1)* %{{.*}}, i64
78global char* test_add_global(global char* x, ptrdiff_t y) {
79 return x + y;
80}
81
82//SZ32: define{{.*}} i32 @test_sub_local(i8 addrspace(3)* %x, i8 addrspace(3)* %y)
83//SZ32: ptrtoint i8 addrspace(3)* %{{.*}} to i32
84//SZ32: ptrtoint i8 addrspace(3)* %{{.*}} to i32
85//SZ64: define{{.*}} i64 @test_sub_local(i8 addrspace(3)* %x, i8 addrspace(3)* %y)
86//SZ64: ptrtoint i8 addrspace(3)* %{{.*}} to i64
87//SZ64: ptrtoint i8 addrspace(3)* %{{.*}} to i64
88ptrdiff_t test_sub_local(local char* x, local char *y) {
89 return x - y;
90}
91
92//SZ32: define{{.*}} i32 @test_sub_private(i8* %x, i8* %y)
93//SZ32: ptrtoint i8* %{{.*}} to i32
94//SZ32: ptrtoint i8* %{{.*}} to i32
95//SZ64: define{{.*}} i64 @test_sub_private(i8* %x, i8* %y)
96//SZ64: ptrtoint i8* %{{.*}} to i64
97//SZ64: ptrtoint i8* %{{.*}} to i64
98ptrdiff_t test_sub_private(private char* x, private char *y) {
99 return x - y;
100}
101
102//SZ32: define{{.*}} i32 @test_sub_mix(i8* %x, i8 addrspace(4)* %y)
103//SZ32: ptrtoint i8* %{{.*}} to i32
104//SZ32: ptrtoint i8 addrspace(4)* %{{.*}} to i32
105//SZ64: define{{.*}} i64 @test_sub_mix(i8* %x, i8 addrspace(4)* %y)
106//SZ64: ptrtoint i8* %{{.*}} to i64
107//SZ64: ptrtoint i8 addrspace(4)* %{{.*}} to i64
108ptrdiff_t test_sub_mix(private char* x, generic char *y) {
109 return x - y;
110}
111