aboutsummaryrefslogtreecommitdiff
path: root/offload/liboffload/src/OffloadImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'offload/liboffload/src/OffloadImpl.cpp')
-rw-r--r--offload/liboffload/src/OffloadImpl.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/offload/liboffload/src/OffloadImpl.cpp b/offload/liboffload/src/OffloadImpl.cpp
index fa5d18c..b4a545e 100644
--- a/offload/liboffload/src/OffloadImpl.cpp
+++ b/offload/liboffload/src/OffloadImpl.cpp
@@ -91,7 +91,9 @@ struct ol_program_impl_t {
struct ol_symbol_impl_t {
ol_symbol_impl_t(GenericKernelTy *Kernel)
: PluginImpl(Kernel), Kind(OL_SYMBOL_KIND_KERNEL) {}
- std::variant<GenericKernelTy *> PluginImpl;
+ ol_symbol_impl_t(GlobalTy &&Global)
+ : PluginImpl(Global), Kind(OL_SYMBOL_KIND_GLOBAL_VARIABLE) {}
+ std::variant<GenericKernelTy *, GlobalTy> PluginImpl;
ol_symbol_kind_t Kind;
};
@@ -726,5 +728,23 @@ Error olLaunchKernel_impl(ol_queue_handle_t Queue, ol_device_handle_t Device,
return Error::success();
}
+Error olGetGlobalVariable_impl(ol_program_handle_t Program,
+ const char *GlobalName,
+ ol_symbol_handle_t *Global) {
+ auto &Device = Program->Image->getDevice();
+
+ GlobalTy GlobalObj{GlobalName};
+ if (auto Res = Device.Plugin.getGlobalHandler().getGlobalMetadataFromDevice(
+ Device, *Program->Image, GlobalObj))
+ return Res;
+
+ *Global = Program->Symbols
+ .emplace_back(
+ std::make_unique<ol_symbol_impl_t>(std::move(GlobalObj)))
+ .get();
+
+ return Error::success();
+}
+
} // namespace offload
} // namespace llvm