Skip to content

[SYCL] Don't define SYCL_EXTERNAL if -fno-sycl-rdc is passed #8537

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Mar 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions clang/include/clang/Basic/DiagnosticSemaKinds.td
Original file line number Diff line number Diff line change
Expand Up @@ -11834,9 +11834,6 @@ def err_sycl_restrict : Error<
def err_sycl_external_global : Error<
"invalid reference to 'device_global' variable; external 'device_global'"
" variable must be marked with SYCL_EXTERNAL macro">;
def err_sycl_external_no_rdc : Error<
"invalid %select{declaration|definition}0 of SYCL_EXTERNAL function in non-relocatable "
"device code mode">;
def warn_sycl_kernel_too_big_args : Warning<
"size of kernel arguments (%0 bytes) may exceed the supported maximum "
"of %1 bytes on some devices">, InGroup<SyclStrict>, ShowInSystemHeader;
Expand Down
3 changes: 2 additions & 1 deletion clang/lib/Frontend/InitPreprocessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1297,7 +1297,8 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
// SYCL device compiler which doesn't produce host binary.
if (LangOpts.SYCLIsDevice) {
Builder.defineMacro("__SYCL_DEVICE_ONLY__");
Builder.defineMacro("SYCL_EXTERNAL", "__attribute__((sycl_device))");
if (LangOpts.GPURelocatableDeviceCode)
Builder.defineMacro("SYCL_EXTERNAL", "__attribute__((sycl_device))");

const llvm::Triple &DeviceTriple = TI.getTriple();
const llvm::Triple::SubArchType DeviceSubArch = DeviceTriple.getSubArch();
Expand Down
9 changes: 0 additions & 9 deletions clang/lib/Sema/SemaDecl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10294,15 +10294,6 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
}
}

if (getLangOpts().SYCLIsDevice && !getLangOpts().GPURelocatableDeviceCode &&
NewFD->hasAttr<SYCLDeviceAttr>() &&
!getSourceManager().isInSystemHeader(NewFD->getLocation())) {
Diag(NewFD->getLocation(), diag::err_sycl_external_no_rdc)
<< (D.getFunctionDefinitionKind() ==
clang::FunctionDefinitionKind::Definition);
NewFD->setInvalidDecl();
}

if (!getLangOpts().CPlusPlus) {
// Perform semantic checking on the function declaration.
if (!NewFD->isInvalidDecl() && NewFD->isMain())
Expand Down
9 changes: 3 additions & 6 deletions clang/test/SemaSYCL/sycl-no-rdc.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
// RUN: %clang_cc1 -fsycl-is-device -verify -fsyntax-only -fno-gpu-rdc -internal-isystem %S/Inputs %s

// Check that declarations of SYCL_EXTERNAL functions throw an error if -fno-gpu-rdc is passed
// Check that uses of SYCL_EXTERNAL throw an error if -fno-gpu-rdc is passed
#include "sycl.hpp"

// expected-error@+1{{invalid declaration of SYCL_EXTERNAL function in non-relocatable device code mode}}
SYCL_EXTERNAL void syclExternalDecl();

// expected-error@+1{{invalid definition of SYCL_EXTERNAL function in non-relocatable device code mode}}
SYCL_EXTERNAL void syclExternalDefn() {}
// expected-error@+1{{unknown type name 'SYCL_EXTERNAL'}}
SYCL_EXTERNAL void syclExternal() {}

using namespace sycl;
queue q;
Expand Down
450 changes: 239 additions & 211 deletions sycl/include/CL/__spirv/spirv_ops.hpp

Large diffs are not rendered by default.

104 changes: 52 additions & 52 deletions sycl/include/CL/__spirv/spirv_vars.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,39 +17,39 @@

#if defined(__NVPTX__) || defined(__AMDGCN__)

SYCL_EXTERNAL size_t __spirv_GlobalInvocationId_x();
SYCL_EXTERNAL size_t __spirv_GlobalInvocationId_y();
SYCL_EXTERNAL size_t __spirv_GlobalInvocationId_z();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalInvocationId_x();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalInvocationId_y();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalInvocationId_z();

SYCL_EXTERNAL size_t __spirv_GlobalSize_x();
SYCL_EXTERNAL size_t __spirv_GlobalSize_y();
SYCL_EXTERNAL size_t __spirv_GlobalSize_z();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalSize_x();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalSize_y();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalSize_z();

SYCL_EXTERNAL size_t __spirv_GlobalOffset_x();
SYCL_EXTERNAL size_t __spirv_GlobalOffset_y();
SYCL_EXTERNAL size_t __spirv_GlobalOffset_z();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalOffset_x();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalOffset_y();
__DPCPP_SYCL_EXTERNAL size_t __spirv_GlobalOffset_z();

SYCL_EXTERNAL size_t __spirv_NumWorkgroups_x();
SYCL_EXTERNAL size_t __spirv_NumWorkgroups_y();
SYCL_EXTERNAL size_t __spirv_NumWorkgroups_z();
__DPCPP_SYCL_EXTERNAL size_t __spirv_NumWorkgroups_x();
__DPCPP_SYCL_EXTERNAL size_t __spirv_NumWorkgroups_y();
__DPCPP_SYCL_EXTERNAL size_t __spirv_NumWorkgroups_z();

SYCL_EXTERNAL size_t __spirv_WorkgroupSize_x();
SYCL_EXTERNAL size_t __spirv_WorkgroupSize_y();
SYCL_EXTERNAL size_t __spirv_WorkgroupSize_z();
__DPCPP_SYCL_EXTERNAL size_t __spirv_WorkgroupSize_x();
__DPCPP_SYCL_EXTERNAL size_t __spirv_WorkgroupSize_y();
__DPCPP_SYCL_EXTERNAL size_t __spirv_WorkgroupSize_z();

SYCL_EXTERNAL size_t __spirv_WorkgroupId_x();
SYCL_EXTERNAL size_t __spirv_WorkgroupId_y();
SYCL_EXTERNAL size_t __spirv_WorkgroupId_z();
__DPCPP_SYCL_EXTERNAL size_t __spirv_WorkgroupId_x();
__DPCPP_SYCL_EXTERNAL size_t __spirv_WorkgroupId_y();
__DPCPP_SYCL_EXTERNAL size_t __spirv_WorkgroupId_z();

SYCL_EXTERNAL size_t __spirv_LocalInvocationId_x();
SYCL_EXTERNAL size_t __spirv_LocalInvocationId_y();
SYCL_EXTERNAL size_t __spirv_LocalInvocationId_z();
__DPCPP_SYCL_EXTERNAL size_t __spirv_LocalInvocationId_x();
__DPCPP_SYCL_EXTERNAL size_t __spirv_LocalInvocationId_y();
__DPCPP_SYCL_EXTERNAL size_t __spirv_LocalInvocationId_z();

SYCL_EXTERNAL uint32_t __spirv_SubgroupSize();
SYCL_EXTERNAL uint32_t __spirv_SubgroupMaxSize();
SYCL_EXTERNAL uint32_t __spirv_NumSubgroups();
SYCL_EXTERNAL uint32_t __spirv_SubgroupId();
SYCL_EXTERNAL uint32_t __spirv_SubgroupLocalInvocationId();
__DPCPP_SYCL_EXTERNAL uint32_t __spirv_SubgroupSize();
__DPCPP_SYCL_EXTERNAL uint32_t __spirv_SubgroupMaxSize();
__DPCPP_SYCL_EXTERNAL uint32_t __spirv_NumSubgroups();
__DPCPP_SYCL_EXTERNAL uint32_t __spirv_SubgroupId();
__DPCPP_SYCL_EXTERNAL uint32_t __spirv_SubgroupLocalInvocationId();

#else // defined(__NVPTX__) || defined(__AMDGCN__)

Expand All @@ -68,89 +68,89 @@ __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInNumSubgroups;
__SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupId;
__SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupLocalInvocationId;

SYCL_EXTERNAL inline size_t __spirv_GlobalInvocationId_x() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalInvocationId_x() {
return __spirv_BuiltInGlobalInvocationId.x;
}
SYCL_EXTERNAL inline size_t __spirv_GlobalInvocationId_y() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalInvocationId_y() {
return __spirv_BuiltInGlobalInvocationId.y;
}
SYCL_EXTERNAL inline size_t __spirv_GlobalInvocationId_z() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalInvocationId_z() {
return __spirv_BuiltInGlobalInvocationId.z;
}

SYCL_EXTERNAL inline size_t __spirv_GlobalSize_x() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalSize_x() {
return __spirv_BuiltInGlobalSize.x;
}
SYCL_EXTERNAL inline size_t __spirv_GlobalSize_y() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalSize_y() {
return __spirv_BuiltInGlobalSize.y;
}
SYCL_EXTERNAL inline size_t __spirv_GlobalSize_z() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalSize_z() {
return __spirv_BuiltInGlobalSize.z;
}

SYCL_EXTERNAL inline size_t __spirv_GlobalOffset_x() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalOffset_x() {
return __spirv_BuiltInGlobalOffset.x;
}
SYCL_EXTERNAL inline size_t __spirv_GlobalOffset_y() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalOffset_y() {
return __spirv_BuiltInGlobalOffset.y;
}
SYCL_EXTERNAL inline size_t __spirv_GlobalOffset_z() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_GlobalOffset_z() {
return __spirv_BuiltInGlobalOffset.z;
}

SYCL_EXTERNAL inline size_t __spirv_NumWorkgroups_x() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_NumWorkgroups_x() {
return __spirv_BuiltInNumWorkgroups.x;
}
SYCL_EXTERNAL inline size_t __spirv_NumWorkgroups_y() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_NumWorkgroups_y() {
return __spirv_BuiltInNumWorkgroups.y;
}
SYCL_EXTERNAL inline size_t __spirv_NumWorkgroups_z() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_NumWorkgroups_z() {
return __spirv_BuiltInNumWorkgroups.z;
}

SYCL_EXTERNAL inline size_t __spirv_WorkgroupSize_x() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_WorkgroupSize_x() {
return __spirv_BuiltInWorkgroupSize.x;
}
SYCL_EXTERNAL inline size_t __spirv_WorkgroupSize_y() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_WorkgroupSize_y() {
return __spirv_BuiltInWorkgroupSize.y;
}
SYCL_EXTERNAL inline size_t __spirv_WorkgroupSize_z() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_WorkgroupSize_z() {
return __spirv_BuiltInWorkgroupSize.z;
}

SYCL_EXTERNAL inline size_t __spirv_WorkgroupId_x() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_WorkgroupId_x() {
return __spirv_BuiltInWorkgroupId.x;
}
SYCL_EXTERNAL inline size_t __spirv_WorkgroupId_y() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_WorkgroupId_y() {
return __spirv_BuiltInWorkgroupId.y;
}
SYCL_EXTERNAL inline size_t __spirv_WorkgroupId_z() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_WorkgroupId_z() {
return __spirv_BuiltInWorkgroupId.z;
}

SYCL_EXTERNAL inline size_t __spirv_LocalInvocationId_x() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_LocalInvocationId_x() {
return __spirv_BuiltInLocalInvocationId.x;
}
SYCL_EXTERNAL inline size_t __spirv_LocalInvocationId_y() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_LocalInvocationId_y() {
return __spirv_BuiltInLocalInvocationId.y;
}
SYCL_EXTERNAL inline size_t __spirv_LocalInvocationId_z() {
__DPCPP_SYCL_EXTERNAL inline size_t __spirv_LocalInvocationId_z() {
return __spirv_BuiltInLocalInvocationId.z;
}

SYCL_EXTERNAL inline uint32_t __spirv_SubgroupSize() {
__DPCPP_SYCL_EXTERNAL inline uint32_t __spirv_SubgroupSize() {
return __spirv_BuiltInSubgroupSize;
}
SYCL_EXTERNAL inline uint32_t __spirv_SubgroupMaxSize() {
__DPCPP_SYCL_EXTERNAL inline uint32_t __spirv_SubgroupMaxSize() {
return __spirv_BuiltInSubgroupMaxSize;
}
SYCL_EXTERNAL inline uint32_t __spirv_NumSubgroups() {
__DPCPP_SYCL_EXTERNAL inline uint32_t __spirv_NumSubgroups() {
return __spirv_BuiltInNumSubgroups;
}
SYCL_EXTERNAL inline uint32_t __spirv_SubgroupId() {
__DPCPP_SYCL_EXTERNAL inline uint32_t __spirv_SubgroupId() {
return __spirv_BuiltInSubgroupId;
}
SYCL_EXTERNAL inline uint32_t __spirv_SubgroupLocalInvocationId() {
__DPCPP_SYCL_EXTERNAL inline uint32_t __spirv_SubgroupLocalInvocationId() {
return __spirv_BuiltInSubgroupLocalInvocationId;
}

Expand Down
Loading