[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
asudarsa wrote: AddressSanitizer test is passing in subsequent runs. Mostly a flaky issue. Thanks https://github.com/llvm/llvm-project/pull/135809 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
llvm-ci wrote: LLVM Buildbot has detected a new failure on builder `llvm-clang-x86_64-gcc-ubuntu` running on `sie-linux-worker3` while building `clang,llvm` at step 6 "test-build-unified-tree-check-all". Full details are available at: https://lab.llvm.org/buildbot/#/builders/174/builds/16286 Here is the relevant piece of the build log for the reference ``` Step 6 (test-build-unified-tree-check-all) failure: test (failure) TEST 'AddressSanitizer-x86_64-linux :: TestCases/asan_lsan_deadlock.cpp' FAILED Exit Code: 1 Command Output (stderr): -- /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/./bin/clang --driver-mode=g++ -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only -m64 -O0 /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp -o /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/runtimes/runtimes-bins/compiler-rt/test/asan/X86_64LinuxConfig/TestCases/Output/asan_lsan_deadlock.cpp.tmp # RUN: at line 4 + /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/./bin/clang --driver-mode=g++ -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only -m64 -O0 /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp -o /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/runtimes/runtimes-bins/compiler-rt/test/asan/X86_64LinuxConfig/TestCases/Output/asan_lsan_deadlock.cpp.tmp env ASAN_OPTIONS=detect_leaks=1 not /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/runtimes/runtimes-bins/compiler-rt/test/asan/X86_64LinuxConfig/TestCases/Output/asan_lsan_deadlock.cpp.tmp 2>&1 | FileCheck /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp # RUN: at line 5 + env ASAN_OPTIONS=detect_leaks=1 not /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/runtimes/runtimes-bins/compiler-rt/test/asan/X86_64LinuxConfig/TestCases/Output/asan_lsan_deadlock.cpp.tmp + FileCheck /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp [1m/home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp:58:12: [0m[0;1;31merror: [0m[1mCHECK: expected string not found in input [0m // CHECK: SUMMARY: AddressSanitizer: stack-buffer-overflow [0;1;32m ^ [0m[1m:1:1: [0m[0;1;30mnote: [0m[1mscanning from here [0m= [0;1;32m^ [0m[1m:2:10: [0m[0;1;30mnote: [0m[1mpossible intended match here [0m==1774144==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7b8e9eade034 at pc 0x5617cd679260 bp 0x7b8e9ccfdce0 sp 0x7b8e9ccfdcd8 [0;1;32m ^ [0m Input file: Check file: /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp -dump-input=help explains the following input dump. Input was: << [1m[0m[0;1;30m1: [0m[1m[0;1;46m= [0m [0;1;31mcheck:58'0 X~ error: no match found [0m[0;1;30m2: [0m[1m[0;1;46m==1774144==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7b8e9eade034 at pc 0x5617cd679260 bp 0x7b8e9ccfdce0 sp 0x7b8e9ccfdcd8 [0m [0;1;31mcheck:58'0 ~ [0m[0;1;35mcheck:58'1 ? possible intended match [0m[0;1;30m3: [0m[1m[0;1;46mWRITE of size 4 at 0x7b8e9eade034 thread T2 [0m [0;1;31mcheck:58'0 [0m[0;1;30m4: [0m[1m[0;1;46mTimeout! Deadlock detected. [0m [0;1;31mcheck:58'0 [0m>> -- ``` https://github.com/llvm/llvm-project/pull/135809 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
https://github.com/sarnex closed https://github.com/llvm/llvm-project/pull/135809 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
https://github.com/sarnex approved this pull request. https://github.com/llvm/llvm-project/pull/135809 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
https://github.com/asudarsa updated
https://github.com/llvm/llvm-project/pull/135809
>From ec072a0ef5b699c58dd2ac404c90a5078f4a774a Mon Sep 17 00:00:00 2001
From: Arvind Sudarsanam
Date: Tue, 15 Apr 2025 09:27:27 -0700
Subject: [PATCH 1/3] [Offload][SYCL] Refactor OffloadKind implementation
Signed-off-by: Arvind Sudarsanam
---
.../tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 10 ++
llvm/include/llvm/Object/OffloadBinary.h | 10 ++
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 52d922abbcaec..a76b6f1da1e1d 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -923,10 +923,9 @@ Expected> linkAndWrapDeviceFiles(
});
auto LinkerArgs = getLinkerArgs(Input, BaseArgs);
-DenseSet ActiveOffloadKinds;
+uint16_t ActiveOffloadKindMask = 0u;
for (const auto &File : Input)
- if (File.getBinary()->getOffloadKind() != OFK_None)
-ActiveOffloadKinds.insert(File.getBinary()->getOffloadKind());
+ ActiveOffloadKindMask |= File.getBinary()->getOffloadKind();
// Write any remaining device inputs to an output file.
SmallVector InputFiles;
@@ -943,7 +942,10 @@ Expected> linkAndWrapDeviceFiles(
return OutputOrErr.takeError();
// Store the offloading image for each linked output file.
-for (OffloadKind Kind : ActiveOffloadKinds) {
+for (OffloadKind Kind = OFK_FIRST; Kind != OFK_LAST;
+ Kind = static_cast((uint16_t)(Kind) << 1)) {
+ if ((ActiveOffloadKindMask & Kind) == 0)
+continue;
llvm::ErrorOr> FileOrErr =
llvm::MemoryBuffer::getFileOrSTDIN(*OutputOrErr);
if (std::error_code EC = FileOrErr.getError()) {
diff --git a/llvm/include/llvm/Object/OffloadBinary.h
b/llvm/include/llvm/Object/OffloadBinary.h
index c02aec8d956ed..858c7a59bce4a 100644
--- a/llvm/include/llvm/Object/OffloadBinary.h
+++ b/llvm/include/llvm/Object/OffloadBinary.h
@@ -32,10 +32,12 @@ namespace object {
/// The producer of the associated offloading image.
enum OffloadKind : uint16_t {
OFK_None = 0,
- OFK_OpenMP,
- OFK_Cuda,
- OFK_HIP,
- OFK_LAST,
+ OFK_OpenMP = (1 << 1),
+ OFK_FIRST = OFK_OpenMP,
+ OFK_Cuda = (1 << 2),
+ OFK_HIP = (1 << 3),
+ OFK_SYCL = (1 << 4),
+ OFK_LAST = (1 << 5),
};
/// The type of contents the offloading image contains.
>From c0bc6890a68b7bfc3ce735bc857319a5ca776df2 Mon Sep 17 00:00:00 2001
From: Arvind Sudarsanam
Date: Tue, 15 Apr 2025 10:44:42 -0700
Subject: [PATCH 2/3] Address review comments
Signed-off-by: Arvind Sudarsanam
---
.../tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 2 +-
llvm/include/llvm/Object/OffloadBinary.h | 11 +--
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index a76b6f1da1e1d..082355e6c716f 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -942,7 +942,7 @@ Expected> linkAndWrapDeviceFiles(
return OutputOrErr.takeError();
// Store the offloading image for each linked output file.
-for (OffloadKind Kind = OFK_FIRST; Kind != OFK_LAST;
+for (OffloadKind Kind = OFK_OpenMP; Kind != OFK_LAST;
Kind = static_cast((uint16_t)(Kind) << 1)) {
if ((ActiveOffloadKindMask & Kind) == 0)
continue;
diff --git a/llvm/include/llvm/Object/OffloadBinary.h
b/llvm/include/llvm/Object/OffloadBinary.h
index 858c7a59bce4a..a3b78b8ec6261 100644
--- a/llvm/include/llvm/Object/OffloadBinary.h
+++ b/llvm/include/llvm/Object/OffloadBinary.h
@@ -32,12 +32,11 @@ namespace object {
/// The producer of the associated offloading image.
enum OffloadKind : uint16_t {
OFK_None = 0,
- OFK_OpenMP = (1 << 1),
- OFK_FIRST = OFK_OpenMP,
- OFK_Cuda = (1 << 2),
- OFK_HIP = (1 << 3),
- OFK_SYCL = (1 << 4),
- OFK_LAST = (1 << 5),
+ OFK_OpenMP = (1 << 0),
+ OFK_Cuda = (1 << 1),
+ OFK_HIP = (1 << 2),
+ OFK_SYCL = (1 << 3),
+ OFK_LAST = (1 << 4),
};
/// The type of contents the offloading image contains.
>From ed2b73cce44a634bfcfc2e8f29287ae3ae72da8f Mon Sep 17 00:00:00 2001
From: Arvind Sudarsanam
Date: Tue, 15 Apr 2025 14:32:21 -0700
Subject: [PATCH 3/3] Update tests to reflect changes in Offload kind enum
value for OFK_HIP from 3 to 4
Signed-off-by: Arvind Sudarsanam
---
clang/test/CodeGenCUDA/offloading-entries.cu | 24 ++--
clang/test/Driver/linker-wrapper-image.c | 2 +-
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/clang/test/CodeGenCUDA/offloading-entries.cu
b/clang/test/CodeGenCUDA/offloading-entries.cu
index c053cf586f8f5..ac0680ff08ea2 100644
--- a/clang/test/CodeGenCUDA/offloading-entries.cu
++
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
https://github.com/jhuber6 approved this pull request. https://github.com/llvm/llvm-project/pull/135809 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
@@ -32,10 +32,12 @@ namespace object {
/// The producer of the associated offloading image.
enum OffloadKind : uint16_t {
OFK_None = 0,
- OFK_OpenMP,
- OFK_Cuda,
- OFK_HIP,
- OFK_LAST,
+ OFK_OpenMP = (1 << 1),
asudarsa wrote:
Addressed in c0bc6890a68b7bfc3ce735bc857319a5ca776df2
Thanks
https://github.com/llvm/llvm-project/pull/135809
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
@@ -32,10 +32,12 @@ namespace object {
/// The producer of the associated offloading image.
enum OffloadKind : uint16_t {
OFK_None = 0,
- OFK_OpenMP,
- OFK_Cuda,
- OFK_HIP,
- OFK_LAST,
+ OFK_OpenMP = (1 << 1),
+ OFK_FIRST = OFK_OpenMP,
asudarsa wrote:
Good catch. I will update.
Thanks
https://github.com/llvm/llvm-project/pull/135809
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
@@ -923,10 +923,9 @@ Expected> linkAndWrapDeviceFiles( }); auto LinkerArgs = getLinkerArgs(Input, BaseArgs); -DenseSet ActiveOffloadKinds; +uint16_t ActiveOffloadKindMask = 0u; asudarsa wrote: I think it is a good optimization to have (16-bit mask instead of a Set). Also, it will be easier to pass the mask to callee function when introducing support for SYCL in my original PR. Thanks https://github.com/llvm/llvm-project/pull/135809 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
@@ -32,10 +32,12 @@ namespace object {
/// The producer of the associated offloading image.
enum OffloadKind : uint16_t {
OFK_None = 0,
- OFK_OpenMP,
- OFK_Cuda,
- OFK_HIP,
- OFK_LAST,
+ OFK_OpenMP = (1 << 1),
+ OFK_FIRST = OFK_OpenMP,
jhuber6 wrote:
We don't need `first`.
https://github.com/llvm/llvm-project/pull/135809
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
@@ -32,10 +32,12 @@ namespace object {
/// The producer of the associated offloading image.
enum OffloadKind : uint16_t {
OFK_None = 0,
- OFK_OpenMP,
- OFK_Cuda,
- OFK_HIP,
- OFK_LAST,
+ OFK_OpenMP = (1 << 1),
jhuber6 wrote:
This is 2, not 1.
https://github.com/llvm/llvm-project/pull/135809
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
@@ -923,10 +923,9 @@ Expected> linkAndWrapDeviceFiles( }); auto LinkerArgs = getLinkerArgs(Input, BaseArgs); -DenseSet ActiveOffloadKinds; +uint16_t ActiveOffloadKindMask = 0u; jhuber6 wrote: This code doesn't need to be modified, but I guess we could if we wanted to get rid of the set. I don't think it's necessary now though. https://github.com/llvm/llvm-project/pull/135809 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
llvmbot wrote:
@llvm/pr-subscribers-clang
Author: Arvind Sudarsanam (asudarsa)
Changes
Following are the changes:
1. Make OffloadKind enum values to be powers of two so we can use them like a
bitfield
2. Include OFK_SYCL enum value
3. Modify ActiveOffloadKinds support in clang-linker-wrapper to use bitfields
instead of a vector.
Thanks
---
Full diff: https://github.com/llvm/llvm-project/pull/135809.diff
2 Files Affected:
- (modified) clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp (+6-4)
- (modified) llvm/include/llvm/Object/OffloadBinary.h (+6-4)
``diff
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 52d922abbcaec..a76b6f1da1e1d 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -923,10 +923,9 @@ Expected> linkAndWrapDeviceFiles(
});
auto LinkerArgs = getLinkerArgs(Input, BaseArgs);
-DenseSet ActiveOffloadKinds;
+uint16_t ActiveOffloadKindMask = 0u;
for (const auto &File : Input)
- if (File.getBinary()->getOffloadKind() != OFK_None)
-ActiveOffloadKinds.insert(File.getBinary()->getOffloadKind());
+ ActiveOffloadKindMask |= File.getBinary()->getOffloadKind();
// Write any remaining device inputs to an output file.
SmallVector InputFiles;
@@ -943,7 +942,10 @@ Expected> linkAndWrapDeviceFiles(
return OutputOrErr.takeError();
// Store the offloading image for each linked output file.
-for (OffloadKind Kind : ActiveOffloadKinds) {
+for (OffloadKind Kind = OFK_FIRST; Kind != OFK_LAST;
+ Kind = static_cast((uint16_t)(Kind) << 1)) {
+ if ((ActiveOffloadKindMask & Kind) == 0)
+continue;
llvm::ErrorOr> FileOrErr =
llvm::MemoryBuffer::getFileOrSTDIN(*OutputOrErr);
if (std::error_code EC = FileOrErr.getError()) {
diff --git a/llvm/include/llvm/Object/OffloadBinary.h
b/llvm/include/llvm/Object/OffloadBinary.h
index c02aec8d956ed..858c7a59bce4a 100644
--- a/llvm/include/llvm/Object/OffloadBinary.h
+++ b/llvm/include/llvm/Object/OffloadBinary.h
@@ -32,10 +32,12 @@ namespace object {
/// The producer of the associated offloading image.
enum OffloadKind : uint16_t {
OFK_None = 0,
- OFK_OpenMP,
- OFK_Cuda,
- OFK_HIP,
- OFK_LAST,
+ OFK_OpenMP = (1 << 1),
+ OFK_FIRST = OFK_OpenMP,
+ OFK_Cuda = (1 << 2),
+ OFK_HIP = (1 << 3),
+ OFK_SYCL = (1 << 4),
+ OFK_LAST = (1 << 5),
};
/// The type of contents the offloading image contains.
``
https://github.com/llvm/llvm-project/pull/135809
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] [Offload][SYCL] Refactor OffloadKind implementation (PR #135809)
https://github.com/asudarsa created
https://github.com/llvm/llvm-project/pull/135809
Following are the changes:
1. Make OffloadKind enum values to be powers of two so we can use them like a
bitfield
2. Include OFK_SYCL enum value
3. Modify ActiveOffloadKinds support in clang-linker-wrapper to use bitfields
instead of a vector.
Thanks
>From ec072a0ef5b699c58dd2ac404c90a5078f4a774a Mon Sep 17 00:00:00 2001
From: Arvind Sudarsanam
Date: Tue, 15 Apr 2025 09:27:27 -0700
Subject: [PATCH] [Offload][SYCL] Refactor OffloadKind implementation
Signed-off-by: Arvind Sudarsanam
---
.../tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 10 ++
llvm/include/llvm/Object/OffloadBinary.h | 10 ++
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 52d922abbcaec..a76b6f1da1e1d 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -923,10 +923,9 @@ Expected> linkAndWrapDeviceFiles(
});
auto LinkerArgs = getLinkerArgs(Input, BaseArgs);
-DenseSet ActiveOffloadKinds;
+uint16_t ActiveOffloadKindMask = 0u;
for (const auto &File : Input)
- if (File.getBinary()->getOffloadKind() != OFK_None)
-ActiveOffloadKinds.insert(File.getBinary()->getOffloadKind());
+ ActiveOffloadKindMask |= File.getBinary()->getOffloadKind();
// Write any remaining device inputs to an output file.
SmallVector InputFiles;
@@ -943,7 +942,10 @@ Expected> linkAndWrapDeviceFiles(
return OutputOrErr.takeError();
// Store the offloading image for each linked output file.
-for (OffloadKind Kind : ActiveOffloadKinds) {
+for (OffloadKind Kind = OFK_FIRST; Kind != OFK_LAST;
+ Kind = static_cast((uint16_t)(Kind) << 1)) {
+ if ((ActiveOffloadKindMask & Kind) == 0)
+continue;
llvm::ErrorOr> FileOrErr =
llvm::MemoryBuffer::getFileOrSTDIN(*OutputOrErr);
if (std::error_code EC = FileOrErr.getError()) {
diff --git a/llvm/include/llvm/Object/OffloadBinary.h
b/llvm/include/llvm/Object/OffloadBinary.h
index c02aec8d956ed..858c7a59bce4a 100644
--- a/llvm/include/llvm/Object/OffloadBinary.h
+++ b/llvm/include/llvm/Object/OffloadBinary.h
@@ -32,10 +32,12 @@ namespace object {
/// The producer of the associated offloading image.
enum OffloadKind : uint16_t {
OFK_None = 0,
- OFK_OpenMP,
- OFK_Cuda,
- OFK_HIP,
- OFK_LAST,
+ OFK_OpenMP = (1 << 1),
+ OFK_FIRST = OFK_OpenMP,
+ OFK_Cuda = (1 << 2),
+ OFK_HIP = (1 << 3),
+ OFK_SYCL = (1 << 4),
+ OFK_LAST = (1 << 5),
};
/// The type of contents the offloading image contains.
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
