Skip to content

Commit 9a282fb

Browse files
committed
[SYCL] Added Implicit LValueToRValue cast to lambda () operator arguments
Signed-off-by: Vladimir Lazarev <[email protected]>
1 parent f1a7138 commit 9a282fb

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ CompoundStmt *CreateSYCLKernelBody(Sema &S, CXXMemberCallExpr *e,
124124
auto DRE = DeclRefExpr::Create(S.Context, NestedNameSpecifierLoc(),
125125
SourceLocation(), param_VD, false,
126126
DeclarationNameInfo(), ArgType, VK_LValue);
127-
ParamStmts.push_back(DRE);
127+
Expr *Res = ImplicitCastExpr::Create(
128+
S.Context, ArgType, CK_LValueToRValue, DRE, nullptr, VK_RValue);
129+
ParamStmts.push_back(Res);
128130
}
129131

130132
// Create ref for call operator
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// RUN: %clang -cc1 -triple spir64-unknown-linux-sycldevice -std=c++11 -fsycl-is-device -S -I /sycl_include_path -I /opencl_include_path -I /usr/include/c++/4.8.5 -I /usr/include/c++/4.8.5/x86_64-redhat-linux -I /usr/include/c++/4.8.5/backward -I /include -I /usr/include -fcxx-exceptions -fexceptions -emit-llvm -x c++ %s -o - | FileCheck %s
2+
// XFAIL: *
3+
#include <CL/sycl.hpp>
4+
5+
#include <array>
6+
7+
constexpr cl::sycl::access::mode sycl_read = cl::sycl::access::mode::read;
8+
constexpr cl::sycl::access::mode sycl_write = cl::sycl::access::mode::write;
9+
10+
int main() {
11+
const size_t array_size = 1;
12+
std::array<cl::sycl::cl_int, array_size> A = {1};
13+
cl::sycl::queue deviceQueue;
14+
cl::sycl::range<1> numOfItems{array_size};
15+
cl::sycl::buffer<cl::sycl::cl_int, 1> bufferA(A.data(), numOfItems);
16+
17+
deviceQueue.submit([&](cl::sycl::handler &cgh) {
18+
auto accessorA = bufferA.template get_access<sycl_read>(cgh);
19+
// CHECK: %wiID = alloca %"struct.cl::sycl::id", align 8
20+
// CHECK: call spir_func void @"_ZZZ4mainENK3$_0clERN2cl4sycl7handlerEENKUlNS1_2idILm1EEEE_clES5_"(%class.anon* %0, %"struct.cl::sycl::id"* byval align 8 %wiID)
21+
// CHECK: %call = call spir_func i64 @_Z13get_global_idj(i32 0)
22+
cgh.parallel_for<class kernel_function>(numOfItems,
23+
[=](cl::sycl::id<1> wiID) {
24+
accessorA[wiID] = accessorA[wiID] * accessorA[wiID];
25+
});
26+
});
27+
return 0;
28+
}

0 commit comments

Comments
 (0)