1 // RUN: %clang_cc1 %s -triple=amdgcn-amd-amdhsa -emit-llvm -o - | FileCheck %s 2 3 #define __private__ __attribute__((address_space(5))) 4 5 void func_pchar(__private__ char *x); 6 void func_pvoid(__private__ void *x); 7 void func_pint(__private__ int *x); 8 9 class Base { 10 }; 11 12 class Derived : public Base { 13 }; 14 fn(Derived * p)15void fn(Derived *p) { 16 __private__ Base *b = (__private__ Base *)p; 17 } 18 test_cast(char * gen_char_ptr,void * gen_void_ptr,int * gen_int_ptr)19void test_cast(char *gen_char_ptr, void *gen_void_ptr, int *gen_int_ptr) { 20 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i8 addrspace(5)* 21 // CHECK-NEXT: store i8 addrspace(5)* %[[cast]] 22 __private__ char *priv_char_ptr = (__private__ char *)gen_char_ptr; 23 24 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i8 addrspace(5)* 25 // CHECK-NEXT: store i8 addrspace(5)* %[[cast]] 26 priv_char_ptr = (__private__ char *)gen_void_ptr; 27 28 // CHECK: %[[cast:.*]] = addrspacecast i32* %{{.*}} to i8 addrspace(5)* 29 // CHECK-NEXT: store i8 addrspace(5)* %[[cast]] 30 priv_char_ptr = (__private__ char *)gen_int_ptr; 31 32 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i8 addrspace(5)* 33 // CHECK-NEXT: store i8 addrspace(5)* %[[cast]] 34 __private__ void *priv_void_ptr = (__private__ void *)gen_char_ptr; 35 36 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i8 addrspace(5)* 37 // CHECK-NEXT: store i8 addrspace(5)* %[[cast]] 38 priv_void_ptr = (__private__ void *)gen_void_ptr; 39 40 // CHECK: %[[cast:.*]] = addrspacecast i32* %{{.*}} to i8 addrspace(5)* 41 // CHECK-NEXT: store i8 addrspace(5)* %[[cast]] 42 priv_void_ptr = (__private__ void *)gen_int_ptr; 43 44 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i32 addrspace(5)* 45 // CHECK-NEXT: store i32 addrspace(5)* %[[cast]] 46 __private__ int *priv_int_ptr = (__private__ int *)gen_void_ptr; 47 48 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i8 addrspace(5)* 49 // CHECK-NEXT: call void @_Z10func_pcharPU3AS5c(i8 addrspace(5)* %[[cast]]) 50 func_pchar((__private__ char *)gen_char_ptr); 51 52 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i8 addrspace(5)* 53 // CHECK-NEXT: call void @_Z10func_pcharPU3AS5c(i8 addrspace(5)* %[[cast]]) 54 func_pchar((__private__ char *)gen_void_ptr); 55 56 // CHECK: %[[cast:.*]] = addrspacecast i32* %{{.*}} to i8 addrspace(5)* 57 // CHECK-NEXT: call void @_Z10func_pcharPU3AS5c(i8 addrspace(5)* %[[cast]]) 58 func_pchar((__private__ char *)gen_int_ptr); 59 60 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i8 addrspace(5)* 61 // CHECK-NEXT: call void @_Z10func_pvoidPU3AS5v(i8 addrspace(5)* %[[cast]]) 62 func_pvoid((__private__ void *)gen_char_ptr); 63 64 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i8 addrspace(5)* 65 // CHECK-NEXT: call void @_Z10func_pvoidPU3AS5v(i8 addrspace(5)* %[[cast]]) 66 func_pvoid((__private__ void *)gen_void_ptr); 67 68 // CHECK: %[[cast:.*]] = addrspacecast i32* %{{.*}} to i8 addrspace(5)* 69 // CHECK-NEXT: call void @_Z10func_pvoidPU3AS5v(i8 addrspace(5)* %[[cast]]) 70 func_pvoid((__private__ void *)gen_int_ptr); 71 72 // CHECK: %[[cast:.*]] = addrspacecast i8* %{{.*}} to i32 addrspace(5)* 73 // CHECK-NEXT: call void @_Z9func_pintPU3AS5i(i32 addrspace(5)* %[[cast]]) 74 func_pint((__private__ int *)gen_void_ptr); 75 } 76