diff options
Diffstat (limited to 'offload/liboffload/src/OffloadImpl.cpp')
-rw-r--r-- | offload/liboffload/src/OffloadImpl.cpp | 22 |
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 |