[llvm] [Offload] Store kernel name in GenericKernelTy (PR #142799)
Ross Brunton via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 4 08:47:17 PDT 2025
https://github.com/RossBrunton created https://github.com/llvm/llvm-project/pull/142799
GenericKernelTy has a pointer to the name that was used to create it.
However, the name passed in as an argument may not outlive the kernel.
Instead, GenericKernelTy now contains a SmallString, and copies the
name into there.
>From 4998fed5030355a4c0e8d0dc8f925ecc9ef1b1a6 Mon Sep 17 00:00:00 2001
From: Ross Brunton <ross at codeplay.com>
Date: Wed, 4 Jun 2025 16:41:50 +0100
Subject: [PATCH] [Offload] Store kernel name in GenericKernelTy
GenericKernelTy has a pointer to the name that was used to create it.
However, the name passed in as an argument may not outlive the kernel.
Instead, GenericKernelTy now contains a SmallString, and copies the
name into there.
---
.../plugins-nextgen/common/include/PluginInterface.h | 11 ++++++++---
.../plugins-nextgen/common/src/PluginInterface.cpp | 2 +-
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/offload/plugins-nextgen/common/include/PluginInterface.h b/offload/plugins-nextgen/common/include/PluginInterface.h
index d2437908a0a6f..88dd516697f57 100644
--- a/offload/plugins-nextgen/common/include/PluginInterface.h
+++ b/offload/plugins-nextgen/common/include/PluginInterface.h
@@ -256,7 +256,12 @@ class DeviceImageTy {
struct GenericKernelTy {
/// Construct a kernel with a name and a execution mode.
GenericKernelTy(const char *Name)
- : Name(Name), PreferredNumThreads(0), MaxNumThreads(0) {}
+ : Name(Name), PreferredNumThreads(0), MaxNumThreads(0) {
+ // Ensure that the name is null terminated so getName() can just return the
+ // pointer
+ this->Name.push_back('\0');
+ this->Name.pop_back();
+ }
virtual ~GenericKernelTy() {}
@@ -277,7 +282,7 @@ struct GenericKernelTy {
AsyncInfoWrapperTy &AsyncInfoWrapper) const = 0;
/// Get the kernel name.
- const char *getName() const { return Name; }
+ const char *getName() const { return Name.data(); }
/// Get the kernel image.
DeviceImageTy &getImage() const {
@@ -373,7 +378,7 @@ struct GenericKernelTy {
}
/// The kernel name.
- const char *Name;
+ SmallString<32> Name;
/// The image that contains this kernel.
DeviceImageTy *ImagePtr = nullptr;
diff --git a/offload/plugins-nextgen/common/src/PluginInterface.cpp b/offload/plugins-nextgen/common/src/PluginInterface.cpp
index f9e316adad8f4..9170a6a75d140 100644
--- a/offload/plugins-nextgen/common/src/PluginInterface.cpp
+++ b/offload/plugins-nextgen/common/src/PluginInterface.cpp
@@ -456,7 +456,7 @@ Error GenericKernelTy::init(GenericDeviceTy &GenericDevice,
KernelEnvironment = KernelEnvironmentTy{};
DP("Failed to read kernel environment for '%s' Using default Bare (0) "
"execution mode\n",
- Name);
+ getName());
}
// Max = Config.Max > 0 ? min(Config.Max, Device.Max) : Device.Max;
More information about the llvm-commits
mailing list