1// 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 3// 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 4// 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 5 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 112