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