teak-llvm/clang/test/CodeGenOpenCLCXX/method-overload-address-space.cl
Anastasia Stulova 5cffa45401 [OpenCL] Allow address spaces as method qualifiers.
Methods can now be qualified with address spaces to prevent
undesirable conversions to generic or to provide custom 
implementation to be used if the object is located in certain
memory segments.

This commit extends parsing and standard C++ overloading to
work for an address space of a method (i.e. implicit 'this'
parameter).

Differential Revision: https://reviews.llvm.org/D55850

llvm-svn: 351747
2019-01-21 16:01:38 +00:00

36 lines
1.0 KiB
Common Lisp

//RUN: %clang_cc1 %s -triple spir-unknown-unknown -cl-std=c++ -emit-llvm -O0 -o - | FileCheck %s
struct C {
void foo() __local;
void foo() __global;
void foo();
void bar();
};
__global C c1;
__kernel void k() {
__local C c2;
C c3;
__global C &c_ref = c1;
__global C *c_ptr;
// CHECK: call void @_ZNU3AS11C3fooEv(%struct.C addrspace(1)*
c1.foo();
// CHECK: call void @_ZNU3AS31C3fooEv(%struct.C addrspace(3)*
c2.foo();
// CHECK: call void @_ZNU3AS41C3fooEv(%struct.C addrspace(4)*
c3.foo();
// CHECK: call void @_ZNU3AS11C3fooEv(%struct.C addrspace(1)*
c_ptr->foo();
// CHECK: void @_ZNU3AS11C3fooEv(%struct.C addrspace(1)*
c_ref.foo();
// CHECK: call void @_ZNU3AS41C3barEv(%struct.C addrspace(4)* addrspacecast (%struct.C addrspace(1)* @c1 to %struct.C addrspace(4)*))
c1.bar();
//FIXME: Doesn't compile yet
//c_ptr->bar();
// CHECK: call void @_ZNU3AS41C3barEv(%struct.C addrspace(4)* addrspacecast (%struct.C addrspace(1)* @c1 to %struct.C addrspace(4)*))
c_ref.bar();
}