xref: /llvm-project/clang/test/CodeGenOpenCLCXX/template-address-spaces.clcpp (revision ebd97534e71aafaa637e466d700f66bbfa63d56b)
1*ebd97534SNikita Popov// RUN: %clang_cc1 %s -emit-llvm -o - -O0 -triple spir-unknown-unknown | FileCheck %s
2d1c8a151SAnastasia Stulova
3d1c8a151SAnastasia Stulovatemplate <typename T>
4d1c8a151SAnastasia Stulovastruct S{
5d1c8a151SAnastasia Stulova  T a;
6d1c8a151SAnastasia Stulova  T foo();
7d1c8a151SAnastasia Stulova};
8d1c8a151SAnastasia Stulova
9d1c8a151SAnastasia Stulovatemplate<typename T>
10d1c8a151SAnastasia StulovaT S<T>::foo() { return a;}
11d1c8a151SAnastasia Stulova
12d1c8a151SAnastasia Stulova// CHECK: %struct.S = type { i32 }
13*ebd97534SNikita Popov// CHECK: %struct.S.0 = type { ptr addrspace(4) }
14*ebd97534SNikita Popov// CHECK: %struct.S.1 = type { ptr addrspace(1) }
15d1c8a151SAnastasia Stulova
16*ebd97534SNikita Popov// CHECK:  [[A1:%[.a-z0-9]+]] = addrspacecast ptr %{{[a-z0-9]+}} to ptr addrspace(4)
17*ebd97534SNikita Popov// CHECK:  %call = call spir_func noundef i32 @_ZNU3AS41SIiE3fooEv(ptr addrspace(4) {{[^,]*}} [[A1]]) #1
18*ebd97534SNikita Popov// CHECK:  [[A2:%[.a-z0-9]+]] = addrspacecast ptr %{{[a-z0-9]+}} to ptr addrspace(4)
19*ebd97534SNikita Popov// CHECK:  %call1 = call spir_func noundef ptr addrspace(4) @_ZNU3AS41SIPU3AS4iE3fooEv(ptr addrspace(4) {{[^,]*}} [[A2]]) #1
20*ebd97534SNikita Popov// CHECK:  [[A3:%[.a-z0-9]+]] = addrspacecast ptr %{{[a-z0-9]+}} to ptr addrspace(4)
21*ebd97534SNikita Popov// CHECK:  %call2 = call spir_func noundef ptr addrspace(1) @_ZNU3AS41SIPU3AS1iE3fooEv(ptr addrspace(4) {{[^,]*}} [[A3]]) #1
22d1c8a151SAnastasia Stulova
23d1c8a151SAnastasia Stulovavoid bar(){
24d1c8a151SAnastasia Stulova  S<int> sint;
25d1c8a151SAnastasia Stulova  S<int*> sintptr;
26d1c8a151SAnastasia Stulova  S<__global int*> sintptrgl;
27d1c8a151SAnastasia Stulova
28d1c8a151SAnastasia Stulova  sint.foo();
29d1c8a151SAnastasia Stulova  sintptr.foo();
30d1c8a151SAnastasia Stulova  sintptrgl.foo();
31d1c8a151SAnastasia Stulova}
32