-
Notifications
You must be signed in to change notification settings - Fork 793
[SYCL] Add clang support for code_location in KernelInfo #5335
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
Changes from all commits
Commits
Show all changes
23 commits
Select commit
Hold shift + click to select a range
b4f196f
[SYCL] Add clang support for KernelInfo code_location() method
schittir 4fada17
Fix NDEBUG typo
schittir 3bc31c7
Populate code_location members
schittir 457b97b
Populate fields
schittir 5ed0c13
Make changes per Erich's comments
schittir 114d8cd
Populate "FuncionName" and change the test
schittir 7be77e7
Delete int_header2.cpp
schittir 622d27a
Update FunctionName and test
schittir a04d561
Fix format
schittir d0007da
Tidying up
schittir e7e29b9
Remove extra space
schittir 08a8d15
Remove temporary variables and path information from filename
schittir c848a82
Fix test and add more cases
schittir 7201467
Remove comments
schittir 338bff0
Fix format
schittir 99242c8
Add NDEBUG cases
schittir c067405
Remove NDEBUG from kernel_desc.hpp
schittir 4c59038
Fix quotes
schittir 2b10cbf
Emit fully qualified name
schittir 14124ff
Add an -fsycl-is-host RUN line with the int header as FileCheck input
schittir 16d6af3
Emit NDEBUG case to integration header
schittir 190a44d
Undo accidental deletion of __SYCL_DLL_LOCAL
schittir 76a77f4
Add Functor test case
schittir File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,308 @@ | ||
// RUN: %clang_cc1 -fsycl-is-device -internal-isystem -sycl-std=2020 -fsycl-int-header=%t.h %s -o %t.out | ||
// RUN: FileCheck -input-file=%t.h %s | ||
// RUN: %clang_cc1 -fsycl-is-host -sycl-std=2020 %s | FileCheck -input-file=%t.h %s | ||
|
||
#include "Inputs/sycl.hpp" | ||
|
||
// Check that meaningful information is returned when NDEBUG is not defined | ||
// and empty strings and 0s are emitted when it is. | ||
int test1() { | ||
cl::sycl::queue q; | ||
q.submit([&](cl::sycl::handler &h) { h.single_task([] {}); }); | ||
q.submit([&](cl::sycl::handler &h) { h.single_task<class KernelName>([]() {}); }); | ||
schittir marked this conversation as resolved.
Show resolved
Hide resolved
|
||
return 0; | ||
} | ||
// CHECK: template <> struct KernelInfoData<'_', 'Z', 'T', 'S', 'Z', 'Z', '5', 't', 'e', 's', 't', '1', 'v', 'E', 'N', 'K', 'U', 'l', 'R', 'N', '2', 'c', 'l', '4', 's', 'y', 'c', 'l', '7', 'h', 'a', 'n', 'd', 'l', 'e', 'r', 'E', 'E', '_', 'c', 'l', 'E', 'S', '2', '_', 'E', 'U', 'l', 'v', 'E', '_'> { | ||
// CHECK: static constexpr const char* getFileName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "code_location.cpp"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr const char* getFunctionName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return ""; | ||
schittir marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getLineNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 11; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getColumnNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 54; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: }; | ||
|
||
// CHECK: template <> struct KernelInfo<KernelName> { | ||
// CHECK: static constexpr const char* getFileName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "code_location.cpp"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: __SYCL_DLL_LOCAL | ||
// CHECK: static constexpr const char* getFunctionName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "KernelName"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: __SYCL_DLL_LOCAL | ||
// CHECK: static constexpr unsigned getLineNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 12; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: __SYCL_DLL_LOCAL | ||
// CHECK: static constexpr unsigned getColumnNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 72; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: }; | ||
|
||
// Check that the right name and location is returned when | ||
// lambda and kernel name are defined on different lines | ||
class KernelName2; | ||
int test2() { | ||
cl::sycl::queue q; | ||
q.submit([&](cl::sycl::handler &h) { h.single_task<KernelName2>( | ||
[] { int i = 2; }); }); | ||
return 0; | ||
} | ||
// CHECK: template <> struct KernelInfo<::KernelName2> { | ||
// CHECK: static constexpr const char* getFileName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "code_location.cpp"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr const char* getFunctionName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "::KernelName2"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getLineNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 86; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getColumnNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 44; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: }; | ||
|
||
// Check that fully qualified name is returned | ||
template <typename T> class KernelName3; | ||
int test3() { | ||
cl::sycl::queue q; | ||
q.submit([&](cl::sycl::handler &h) { h.single_task<KernelName3<KernelName2>>( | ||
[] { int i = 3; }); }); | ||
return 0; | ||
} | ||
// CHECK: template <> struct KernelInfo<::KernelName3<::KernelName2>> { | ||
// CHECK: static constexpr const char* getFileName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "code_location.cpp"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr const char* getFunctionName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "::KernelName3<::KernelName2>"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getLineNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 125; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getColumnNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 44; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: }; | ||
|
||
// Check that the location information returned is that of l4 | ||
auto l4 = []() { return 4; }; | ||
int test4() { | ||
cl::sycl::queue q; | ||
q.submit([=](cl::sycl::handler &h) { h.single_task<class KernelName4>(l4); }); | ||
return 0; | ||
} | ||
// CHECK: template <> struct KernelInfo<KernelName4> { | ||
// CHECK: static constexpr const char* getFileName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "code_location.cpp"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr const char* getFunctionName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "KernelName4"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getLineNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 160; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getColumnNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 11; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: }; | ||
|
||
// Check that fully qualified name is returned when unnamed lambda | ||
// kernel is enclosed in a namespace | ||
namespace NS { | ||
int test5() { | ||
cl::sycl::queue q; | ||
q.submit([=](cl::sycl::handler &h) { h.single_task([] {}); }); | ||
q.submit([=](cl::sycl::handler &h) { h.single_task<class KernelName5>([] {}); }); | ||
return 0; | ||
} | ||
} // namespace NS | ||
// CHECK: template <> struct KernelInfoData<'_', 'Z', 'T', 'S', 'Z', 'Z', 'N', '2', 'N', 'S', '5', 't', 'e', 's', 't', '5', 'E', 'v', 'E', 'N', 'K', 'U', 'l', 'R', 'N', '2', 'c', 'l', '4', 's', 'y', 'c', 'l', '7', 'h', 'a', 'n', 'd', 'l', 'e', 'r', 'E', 'E', '_', 'c', 'l', 'E', 'S', '3', '_', 'E', 'U', 'l', 'v', 'E', '_'> { | ||
// CHECK: static constexpr const char* getFileName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "code_location.cpp"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr const char* getFunctionName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "NS::"; | ||
schittir marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getLineNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 202; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getColumnNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 54; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: }; | ||
// CHECK: template <> struct KernelInfo<NS::KernelName5> { | ||
// CHECK: static constexpr const char* getFileName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "code_location.cpp"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr const char* getFunctionName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "NS::KernelName5"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getLineNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 203; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getColumnNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 73; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: }; | ||
|
||
// Check that the location information returned is that of the Functor | ||
struct Functor { | ||
void operator()() const { | ||
} | ||
}; | ||
int test6() { | ||
Functor F; | ||
cl::sycl::queue q; | ||
q.submit([=](cl::sycl::handler &h) { h.single_task<class KernelName6>(F); }); | ||
return 0; | ||
} | ||
// CHECK: template <> struct KernelInfo<KernelName6> { | ||
// CHECK: static constexpr const char* getFileName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "code_location.cpp"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr const char* getFunctionName() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return "KernelName6"; | ||
// CHECK: #else | ||
// CHECK: return ""; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getLineNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 269; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: static constexpr unsigned getColumnNumber() { | ||
// CHECK: #ifndef NDEBUG | ||
// CHECK: return 8; | ||
// CHECK: #else | ||
// CHECK: return 0; | ||
// CHECK: #endif | ||
// CHECK: } | ||
// CHECK: }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.