Skip to content

Commit 4cc2737

Browse files
committed
Merge remote-tracking branch 'intel_llvm/sycl' into llvmspirv_pulldown
2 parents 4132bd8 + 53a9d54 commit 4cc2737

File tree

173 files changed

+8155
-6821
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

173 files changed

+8155
-6821
lines changed

.github/CODEOWNERS

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@ clang/tools/clang-offload-*/ @intel/dpcpp-tools-reviewers
5050
# Explicit SIMD
5151
ESIMD/ @intel/dpcpp-esimd-reviewers
5252
esimd/ @intel/dpcpp-esimd-reviewers
53-
sycl/include/sycl/ext/intel/experimental/esimd.hpp @intel/dpcpp-esimd-reviewers
53+
sycl/include/sycl/ext/intel/esimd.hpp @intel/dpcpp-esimd-reviewers
5454
sycl/doc/extensions/experimental/sycl_ext_intel_esimd/ @intel/dpcpp-esimd-reviewers
5555
llvm/lib/SYCLLowerIR/CMakeLists.txt @intel/dpcpp-tools-reviewers @intel/dpcpp-esimd-reviewers

.github/workflows/sycl_containers.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@ on:
1010
paths:
1111
- 'devops/containers/**'
1212
- 'devops/dependencies.json'
13+
- 'devops/scripts/install_drivers.sh'
14+
- 'devops/scripts/install_build_tools.sh'
1315
- '.github/workflows/sycl_containers.yaml'
1416
pull_request:
1517
paths:
1618
- 'devops/containers/**'
1719
- 'devops/dependencies.json'
20+
- 'devops/scripts/install_drivers.sh'
21+
- 'devops/scripts/install_build_tools.sh'
1822
- '.github/workflows/sycl_containers.yaml'
1923

2024
jobs:

.github/workflows/sycl_linux_build_and_test.yml

+1-5
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,6 @@ on:
1515
type: string
1616
required: false
1717
default: "ghcr.io/intel/llvm/ubuntu2004_build:latest"
18-
build_runs_on:
19-
type: string
20-
required: false
21-
default: "build"
2218
build_ref:
2319
type: string
2420
required: false
@@ -68,7 +64,7 @@ on:
6864
jobs:
6965
build:
7066
name: Build + LIT
71-
runs-on: ${{ inputs.build_runs_on }}
67+
runs-on: [Linux, build]
7268
container:
7369
image: ${{ inputs.build_image }}
7470
options: -u 1001:1001

.github/workflows/sycl_nightly.yml

-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ jobs:
6464
if: github.repository == 'intel/llvm'
6565
uses: ./.github/workflows/sycl_linux_build_and_test.yml
6666
with:
67-
build_runs_on: build
6867
build_cache_root: "/__w/"
6968
build_cache_suffix: new_pm
7069
build_artifact_suffix: new_pm

.github/workflows/sycl_post_commit.yml

-2
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@ jobs:
1515
name: Linux Default
1616
uses: ./.github/workflows/sycl_linux_build_and_test.yml
1717
with:
18-
build_runs_on: build
1918
build_cache_root: "/__w/llvm"
2019
build_artifact_suffix: default
2120
linux_no_assert:
2221
name: Linux (no assert)
2322
uses: ./.github/workflows/sycl_linux_build_and_test.yml
2423
with:
25-
build_runs_on: build
2624
build_cache_root: "/__w/llvm"
2725
build_cache_suffix: gcc_no_assertions
2826
build_artifact_suffix: gcc_no_assertions

.github/workflows/sycl_precommit.yml

+10-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ on:
44
pull_request:
55
branches:
66
- sycl
7+
# Do not run builds if changes are only in the following locations
8+
paths-ignore:
9+
- 'devops/containers/**'
10+
- 'devops/scripts/install_drivers.sh'
11+
- 'devops/scripts/install_build_tools.sh'
12+
- 'sycl/doc/**'
13+
- 'sycl/gdb/**'
14+
- 'clang/docs/**'
15+
- '**.md'
16+
- '**.rst'
717

818
jobs:
919
lint:
@@ -25,7 +35,6 @@ jobs:
2535
if: always() && (success() || contains(github.event.pull_request.labels.*.name, 'ignore-lint'))
2636
uses: ./.github/workflows/sycl_linux_build_and_test.yml
2737
with:
28-
build_runs_on: "build"
2938
build_cache_root: "/__w/"
3039
build_cache_size: "8G"
3140
build_artifact_suffix: "default"

clang/include/clang/Basic/BuiltinsNVPTX.def

+6
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,12 @@ BUILTIN(__nvvm_sin_approx_f, "ff", "")
300300
BUILTIN(__nvvm_cos_approx_ftz_f, "ff", "")
301301
BUILTIN(__nvvm_cos_approx_f, "ff", "")
302302

303+
// Tanh
304+
305+
TARGET_BUILTIN(__nvvm_tanh_approx_f, "ff", "", AND(SM_75,PTX70))
306+
TARGET_BUILTIN(__nvvm_tanh_approx_f16, "hh", "", AND(SM_75, PTX70))
307+
TARGET_BUILTIN(__nvvm_tanh_approx_f16x2, "V2hV2h", "", AND(SM_75, PTX70))
308+
303309
// Fma
304310

305311
TARGET_BUILTIN(__nvvm_fma_rn_f16, "hhhh", "", AND(SM_53, PTX42))

clang/include/clang/Basic/DiagnosticSemaKinds.td

+2
Original file line numberDiff line numberDiff line change
@@ -7755,6 +7755,8 @@ let CategoryName = "Lambda Issue" in {
77557755
"%select{| explicitly}1 captured here">;
77567756
def err_implicit_this_capture : Error<
77577757
"implicit capture of 'this' is not allowed for kernel functions">;
7758+
def err_lambda_member_access : Error<
7759+
"invalid attempt to access member of lambda">;
77587760

77597761
// C++14 lambda init-captures.
77607762
def warn_cxx11_compat_init_capture : Warning<

clang/lib/Driver/Driver.cpp

+34-11
Original file line numberDiff line numberDiff line change
@@ -2992,9 +2992,10 @@ static SmallVector<const char *, 16>
29922992
getLinkerArgs(Compilation &C, DerivedArgList &Args, bool IncludeObj = false) {
29932993
SmallVector<const char *, 16> LibArgs;
29942994
SmallVector<std::string, 8> LibPaths;
2995-
// Add search directories from LIBRARY_PATH env variable
2995+
bool IsMSVC = C.getDefaultToolChain().getTriple().isWindowsMSVCEnvironment();
2996+
// Add search directories from LIBRARY_PATH/LIB env variable
29962997
llvm::Optional<std::string> LibPath =
2997-
llvm::sys::Process::GetEnv("LIBRARY_PATH");
2998+
llvm::sys::Process::GetEnv(IsMSVC ? "LIB" : "LIBRARY_PATH");
29982999
if (LibPath) {
29993000
SmallVector<StringRef, 8> SplitPaths;
30003001
const char EnvPathSeparatorStr[] = {llvm::sys::EnvPathSeparator, '\0'};
@@ -3028,12 +3029,36 @@ getLinkerArgs(Compilation &C, DerivedArgList &Args, bool IncludeObj = false) {
30283029
};
30293030
for (const auto *A : Args) {
30303031
std::string FileName = A->getAsString(Args);
3032+
auto addLibArg = [&](StringRef LibName) -> bool {
3033+
if (isStaticArchiveFile(LibName) ||
3034+
(IncludeObj && isObjectFile(LibName.str()))) {
3035+
LibArgs.push_back(Args.MakeArgString(LibName));
3036+
return true;
3037+
}
3038+
return false;
3039+
};
30313040
if (A->getOption().getKind() == Option::InputClass) {
3032-
StringRef Value(A->getValue());
3033-
if (isStaticArchiveFile(Value) ||
3034-
(IncludeObj && isObjectFile(Value.str()))) {
3035-
LibArgs.push_back(Args.MakeArgString(FileName));
3041+
if (addLibArg(FileName))
30363042
continue;
3043+
}
3044+
// Evaluate any libraries passed along after /link. These are typically
3045+
// ignored by the driver and sent directly to the linker. When performing
3046+
// offload, we should evaluate them at the driver level.
3047+
if (A->getOption().matches(options::OPT__SLASH_link)) {
3048+
for (const std::string &Value : A->getValues()) {
3049+
// Add any libpath values.
3050+
StringRef OptCheck(Value);
3051+
if (OptCheck.startswith_insensitive("-libpath:") ||
3052+
OptCheck.startswith_insensitive("/libpath:"))
3053+
LibPaths.emplace_back(Value.substr(std::string("-libpath:").size()));
3054+
if (addLibArg(Value))
3055+
continue;
3056+
for (auto LPath : LibPaths) {
3057+
SmallString<128> FullLib(LPath);
3058+
llvm::sys::path::append(FullLib, Value);
3059+
if (addLibArg(FullLib))
3060+
continue;
3061+
}
30373062
}
30383063
}
30393064
if (A->getOption().matches(options::OPT_Wl_COMMA) ||
@@ -3075,9 +3100,8 @@ getLinkerArgs(Compilation &C, DerivedArgList &Args, bool IncludeObj = false) {
30753100
llvm::StringSaver S(A);
30763101
llvm::cl::ExpandResponseFiles(
30773102
S,
3078-
C.getDefaultToolChain().getTriple().isWindowsMSVCEnvironment()
3079-
? llvm::cl::TokenizeWindowsCommandLine
3080-
: llvm::cl::TokenizeGNUCommandLine,
3103+
IsMSVC ? llvm::cl::TokenizeWindowsCommandLine
3104+
: llvm::cl::TokenizeGNUCommandLine,
30813105
ExpandArgs);
30823106
for (StringRef EA : ExpandArgs)
30833107
addKnownValues(EA);
@@ -8350,11 +8374,10 @@ bool clang::driver::isStaticArchiveFile(const StringRef &FileName) {
83508374
if (!llvm::sys::path::has_extension(FileName))
83518375
// Any file with no extension should not be considered an Archive.
83528376
return false;
8353-
StringRef Ext(llvm::sys::path::extension(FileName).drop_front());
83548377
llvm::file_magic Magic;
83558378
llvm::identify_magic(FileName, Magic);
83568379
// Only .lib and archive files are to be considered.
8357-
return (Ext == "lib" || Magic == llvm::file_magic::archive);
8380+
return (Magic == llvm::file_magic::archive);
83588381
}
83598382

83608383
bool clang::driver::willEmitRemarks(const ArgList &Args) {

clang/lib/Sema/SemaAccess.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -1903,7 +1903,13 @@ void Sema::CheckLookupAccess(const LookupResult &R) {
19031903
AccessTarget Entity(Context, AccessedEntity::Member,
19041904
R.getNamingClass(), I.getPair(),
19051905
R.getBaseObjectType());
1906-
Entity.setDiag(diag::err_access);
1906+
// This is to avoid leaking implementation details of lambda object.
1907+
// We do not want to generate 'private member access' diagnostic for
1908+
// lambda object.
1909+
if ((R.getNamingClass())->isLambda())
1910+
Diag(R.getNameLoc(), diag::err_lambda_member_access);
1911+
else
1912+
Entity.setDiag(diag::err_access);
19071913
CheckAccess(*this, R.getNameLoc(), Entity);
19081914
}
19091915
}

clang/lib/Sema/SemaLambda.cpp

+13-2
Original file line numberDiff line numberDiff line change
@@ -1702,12 +1702,23 @@ FieldDecl *Sema::BuildCaptureField(RecordDecl *RD,
17021702
const sema::Capture &Capture) {
17031703
SourceLocation Loc = Capture.getLocation();
17041704
QualType FieldType = Capture.getCaptureType();
1705+
IdentifierInfo *Id = nullptr;
17051706

17061707
TypeSourceInfo *TSI = nullptr;
17071708
if (Capture.isVariableCapture()) {
17081709
auto *Var = Capture.getVariable();
17091710
if (Var->isInitCapture())
17101711
TSI = Capture.getVariable()->getTypeSourceInfo();
1712+
1713+
// TODO: Upstream this behavior to LLVM project to save
1714+
// user speciifed names for all lambdas.
1715+
// For SYCL compilations, save user specified names for
1716+
// lambda capture.
1717+
if (getLangOpts().SYCLIsDevice || getLangOpts().SYCLIsHost) {
1718+
StringRef CaptureName = Var->getName();
1719+
if (!CaptureName.empty())
1720+
Id = &Context.Idents.get(CaptureName.str());
1721+
}
17111722
}
17121723

17131724
// FIXME: Should we really be doing this? A null TypeSourceInfo seems more
@@ -1717,8 +1728,8 @@ FieldDecl *Sema::BuildCaptureField(RecordDecl *RD,
17171728

17181729
// Build the non-static data member.
17191730
FieldDecl *Field =
1720-
FieldDecl::Create(Context, RD, /*StartLoc=*/Loc, /*IdLoc=*/Loc,
1721-
/*Id=*/nullptr, FieldType, TSI, /*BW=*/nullptr,
1731+
FieldDecl::Create(Context, RD, /*StartLoc=*/Loc, /*IdLoc=*/Loc, Id,
1732+
FieldType, TSI, /*BW=*/nullptr,
17221733
/*Mutable=*/false, ICIS_NoInit);
17231734
// If the variable being captured has an invalid type, mark the class as
17241735
// invalid as well.

clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
// RUN: %clang_cc1 -std=c++1y %s -verify
1+
// TODO: The SYCL changes in this test can be removed if/when changes (i.e.
2+
// PR to save user-specified names in lambda class) is upstreamed to LLVM
3+
// project.
24

3-
const char *has_no_member = [x("hello")] {}.x; // expected-error {{no member named 'x'}}
5+
// RUN: %clang_cc1 -std=c++1y %s -verify=notsycl,expected
6+
// RUN: %clang_cc1 -fsycl-is-device -std=c++1y %s -verify=sycl,expected
7+
8+
const char *has_no_member = [x("hello")] {}.x; // notsycl-error {{no member named 'x'}}
9+
// sycl-error@-1 {{invalid attempt to access member of lambda}}
410

511
double f;
612
auto with_float = [f(1.0f)] {

clang/test/CodeGenSYCL/accessor-readonly.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ void f0(cl::sycl::queue &myQueue, cl::sycl::buffer<int, 1> &in_buf, cl::sycl::bu
1414

1515
// CHECK: spir_kernel{{.*}}f1_kernel
1616
// CHECK-NOT: readonly
17-
// CHECK-SAME: %_arg_{{.*}}%_arg_1{{.*}}%_arg_2{{.*}}%_arg_3
18-
// CHECK-SAME: readonly align 4 %_arg_4
17+
// CHECK-SAME: %_arg_write_acc{{.*}}%_arg_write_acc1{{.*}}%_arg_write_acc2{{.*}}%_arg_write_acc3
18+
// CHECK-SAME: readonly align 4 %_arg_read_acc
1919
void f1(cl::sycl::queue &myQueue, cl::sycl::buffer<int, 1> &in_buf, cl::sycl::buffer<int, 1> &out_buf) {
2020
myQueue.submit([&](cl::sycl::handler &cgh) {
2121
auto write_acc = out_buf.get_access<cl::sycl::access::mode::write>(cgh);
@@ -25,9 +25,9 @@ void f1(cl::sycl::queue &myQueue, cl::sycl::buffer<int, 1> &in_buf, cl::sycl::bu
2525
}
2626

2727
// CHECK: spir_kernel{{.*}}f2_kernel
28-
// CHECK-SAME: readonly align 4 %_arg_
28+
// CHECK-SAME: readonly align 4 %_arg_read_acc
2929
// CHECK-NOT: readonly
30-
// CHECK-SAME: %_arg_8
30+
// CHECK-SAME: %_arg_write_acc
3131
void f2(cl::sycl::queue &myQueue, cl::sycl::buffer<int, 1> &in_buf, cl::sycl::buffer<int, 1> &out_buf) {
3232
myQueue.submit([&](cl::sycl::handler &cgh) {
3333
auto read_acc = in_buf.get_access<cl::sycl::access::mode::read>(cgh);

clang/test/CodeGenSYCL/accessor_no_alias_property.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ int main() {
2020
accessorB;
2121

2222
// Check that noalias parameter attribute is emitted when no_alias accessor property is used
23-
// CHECK: define {{.*}}spir_kernel void @_ZTSZ4mainE16kernel_function1({{.*}} noalias {{.*}} %_arg_, {{.*}})
23+
// CHECK: define {{.*}}spir_kernel void @_ZTSZ4mainE16kernel_function1({{.*}} noalias {{.*}} %_arg_accessorA, {{.*}})
2424
cl::sycl::kernel_single_task<class kernel_function1>(
2525
[=]() {
2626
accessorA.use();

clang/test/CodeGenSYCL/basic-kernel-wrapper.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ int main() {
2121

2222
// CHECK: define {{.*}}spir_kernel void @{{.*}}kernel_function
2323
// CHECK-SAME: i32 addrspace(1)* noundef align 4 [[MEM_ARG:%[a-zA-Z0-9_]+]],
24-
// CHECK-SAME: %"struct.cl::sycl::range"* noundef byval{{.*}}align 4 [[ACC_RANGE:%[a-zA-Z0-9_]+_1]],
25-
// CHECK-SAME: %"struct.cl::sycl::range"* noundef byval{{.*}}align 4 [[MEM_RANGE:%[a-zA-Z0-9_]+_2]],
24+
// CHECK-SAME: %"struct.cl::sycl::range"* noundef byval{{.*}}align 4 [[ACC_RANGE:%[a-zA-Z0-9_]+1]],
25+
// CHECK-SAME: %"struct.cl::sycl::range"* noundef byval{{.*}}align 4 [[MEM_RANGE:%[a-zA-Z0-9_]+2]],
2626
// CHECK-SAME: %"struct.cl::sycl::id"* noundef byval{{.*}}align 4 [[OFFSET:%[a-zA-Z0-9_]+]])
2727
// Check alloca for pointer argument
2828
// CHECK: [[MEM_ARG]].addr = alloca i32 addrspace(1)*

clang/test/CodeGenSYCL/device-variables.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ int main() {
3232
// CHECK: store i32 1, i32 addrspace(4)* %b
3333
foo(local_value);
3434
// Local variables and constexprs captured by lambda
35-
// CHECK: [[GEP:%[0-9]+]] = getelementptr inbounds %class.anon, %class.anon addrspace(4)* %{{.*}}, i32 0, i32 0
35+
// CHECK: [[GEP:%[a-z_]+]] = getelementptr inbounds %class.anon, %class.anon addrspace(4)* %{{.*}}, i32 0, i32 0
3636
// CHECK: call spir_func void @{{.*}}foo{{.*}}(i32 addrspace(4)* noundef align 4 dereferenceable(4) [[GEP]])
3737
int some_device_local_var = some_local_var;
38-
// CHECK: [[GEP1:%[0-9]+]] = getelementptr inbounds %class.anon, %class.anon addrspace(4)* %{{.*}}, i32 0, i32 1
38+
// CHECK: [[GEP1:%[a-z_]+]] = getelementptr inbounds %class.anon, %class.anon addrspace(4)* %{{.*}}, i32 0, i32 1
3939
// CHECK: [[LOAD1:%[0-9]+]] = load i32, i32 addrspace(4)* [[GEP1]]
4040
// CHECK: store i32 [[LOAD1]], i32 addrspace(4)* %some_device_local_var
4141
});

clang/test/CodeGenSYCL/esimd-accessor-ptr-md.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void test(int val) {
3030
// --- Attributes
3131
// CHECK: {{.*}} !kernel_arg_accessor_ptr ![[ACC_PTR_ATTR:[0-9]+]] !sycl_explicit_simd !{{[0-9]+}} {{.*}}{
3232
// --- init_esimd call is expected instead of __init:
33-
// CHECK: call spir_func void @{{.*}}__init_esimd{{.*}}(%"{{.*}}sycl::accessor" addrspace(4)* {{[^,]*}} %{{[0-9]+}}, i32 addrspace(1)* noundef %{{[0-9]+}})
33+
// CHECK: call spir_func void @{{.*}}__init_esimd{{.*}}(%"{{.*}}sycl::accessor" addrspace(4)* {{[^,]*}} %{{[a-zA-Z0-9_]+}}, i32 addrspace(1)* noundef %{{[0-9]+}})
3434
// CHECK-LABEL: }
3535
// CHECK: ![[ACC_PTR_ATTR]] = !{i1 true, i1 false, i1 true}
3636
}

clang/test/CodeGenSYCL/image_accessor.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,27 @@
88
//
99
// CHECK-1DRO: %opencl.image1d_ro_t = type opaque
1010
// CHECK-1DRO: define {{.*}}spir_kernel void @{{.*}}(%opencl.image1d_ro_t addrspace(1)* [[IMAGE_ARG:%[a-zA-Z0-9_]+]])
11-
// CHECK-1DRO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[0-9]+}}, %opencl.image1d_ro_t addrspace(1)* %{{[0-9]+}})
11+
// CHECK-1DRO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[a-zA-Z]+}}, %opencl.image1d_ro_t addrspace(1)* %{{[0-9]+}})
1212
//
1313
// CHECK-2DRO: %opencl.image2d_ro_t = type opaque
1414
// CHECK-2DRO: define {{.*}}spir_kernel void @{{.*}}(%opencl.image2d_ro_t addrspace(1)* [[IMAGE_ARG:%[a-zA-Z0-9_]+]])
15-
// CHECK-2DRO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[0-9]+}}, %opencl.image2d_ro_t addrspace(1)* %{{[0-9]+}})
15+
// CHECK-2DRO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[a-zA-Z]+}}, %opencl.image2d_ro_t addrspace(1)* %{{[0-9]+}})
1616
//
1717
// CHECK-3DRO: %opencl.image3d_ro_t = type opaque
1818
// CHECK-3DRO: define {{.*}}spir_kernel void @{{.*}}(%opencl.image3d_ro_t addrspace(1)* [[IMAGE_ARG:%[a-zA-Z0-9_]+]])
19-
// CHECK-3DRO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[0-9]+}}, %opencl.image3d_ro_t addrspace(1)* %{{[0-9]+}})
19+
// CHECK-3DRO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[a-zA-Z]+}}, %opencl.image3d_ro_t addrspace(1)* %{{[0-9]+}})
2020
//
2121
// CHECK-1DWO: %opencl.image1d_wo_t = type opaque
2222
// CHECK-1DWO: define {{.*}}spir_kernel void @{{.*}}(%opencl.image1d_wo_t addrspace(1)* [[IMAGE_ARG:%[a-zA-Z0-9_]+]])
23-
// CHECK-1DWO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[0-9]+}}, %opencl.image1d_wo_t addrspace(1)* %{{[0-9]+}})
23+
// CHECK-1DWO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[a-zA-Z]+}}, %opencl.image1d_wo_t addrspace(1)* %{{[0-9]+}})
2424
//
2525
// CHECK-2DWO: %opencl.image2d_wo_t = type opaque
2626
// CHECK-2DWO: define {{.*}}spir_kernel void @{{.*}}(%opencl.image2d_wo_t addrspace(1)* [[IMAGE_ARG:%[a-zA-Z0-9_]+]])
27-
// CHECK-2DWO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[0-9]+}}, %opencl.image2d_wo_t addrspace(1)* %{{[0-9]+}})
27+
// CHECK-2DWO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[a-zA-Z]+}}, %opencl.image2d_wo_t addrspace(1)* %{{[0-9]+}})
2828
//
2929
// CHECK-3DWO: %opencl.image3d_wo_t = type opaque
3030
// CHECK-3DWO: define {{.*}}spir_kernel void @{{.*}}(%opencl.image3d_wo_t addrspace(1)* [[IMAGE_ARG:%[a-zA-Z0-9_]+]])
31-
// CHECK-3DWO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[0-9]+}}, %opencl.image3d_wo_t addrspace(1)* %{{[0-9]+}})
31+
// CHECK-3DWO: call spir_func void @{{.*}}__init{{.*}}(%{{.*}}cl::sycl::accessor{{.*}} %{{[a-zA-Z]+}}, %opencl.image3d_wo_t addrspace(1)* %{{[0-9]+}})
3232
//
3333
// TODO: Add tests for the image_array opencl datatype support.
3434
#include "Inputs/sycl.hpp"

0 commit comments

Comments
 (0)